[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r20931: {projects} Add comments and fix some bugs in hillclimbing code (projects/performance/node-selection)
Author: sjm217
Date: 2009-11-09 06:22:23 -0500 (Mon, 09 Nov 2009)
New Revision: 20931
Modified:
projects/performance/node-selection/hillclimbing.py
Log:
Add comments and fix some bugs in hillclimbing code
Modified: projects/performance/node-selection/hillclimbing.py
===================================================================
--- projects/performance/node-selection/hillclimbing.py 2009-11-09 11:20:52 UTC (rev 20930)
+++ projects/performance/node-selection/hillclimbing.py 2009-11-09 11:22:23 UTC (rev 20931)
@@ -13,15 +13,19 @@
import threading
+## Number of iterations before narrowing adjustment
ILIMIT = 1000
+NUM=8000
def wait(x, p, L, isbroken):
+ '''Calculate waiting time at each node'''
z = p*L*x
a = z*x
b = 2.0*(1.0-z)
return x + a/b
def calc_waittime(prob, xs, totalusage, debug=False):
+ '''Function to optimize'''
#print "info", prob[0], nodebw[0], totalusage
## Check that probabilities really add up to 1
assert abs(1.0 - prob.sum()) < 1e-6
@@ -112,10 +116,10 @@
prob = sprob.copy()
## Find elements to change
- a = random.randint(0, l-1)
- b = random.randint(0, l-1)
+ a = random.randint(0, l)
+ b = random.randint(0, l)
- ## Find amount to modify by
+ ## Clip amount to modify by
if prob[a] < amount:
damount = prob[a]
else:
@@ -128,12 +132,15 @@
## Calculate the function to optimize
wwait = calc_waittime(prob, xs, totalusage, True)
if wwait is None:
+ ## We reached a bad state, give up
continue
+
+ ## If this is an improvement, return new probabilities
s = wwait.sum()
-
if s < ss:
return i, prob, wwait, s
if i > ILIMIT:
+ ## We reached the maximum limit, return the original parameters
wwait = calc_waittime(sprob, xs, totalusage, True)
return i, sprob, wwait, wwait.sum()
@@ -169,10 +176,10 @@
amount = 1.0/2
i = 0
- while True:
+ while i<NUM:
i += 1
cnt, self.prob, wwait, s = optimize(self.prob, s, self.xs, self.totalusage, amount)
- print i, cnt, s
+ print "%6d %4d %f"%(i, cnt, s)
if cnt > ILIMIT:
amount /= 2.0
print "Narrowing... to", amount
@@ -181,9 +188,19 @@
line.set_ydata(cumsum(wwait))
self.fig.canvas.draw()
#time.sleep(1)
+ save(self.anodebw, self.prob, self.xs, self.totalusage, i)
+ sys.exit()
def main():
totalusage, anodebw, x, y = test()
+
+ #totalusage = anodebw.sum()*(1-1e-6)
+ #totalusage = anodebw.sum()*(1-1e-3)
+ #totalusage = anodebw.sum()*(1-1e-1)
+ #totalusage = anodebw.sum()*(0.75)
+ #totalusage = anodebw.sum()*(0.5)
+ #totalusage = anodebw.sum()*(0.25)
+ totalusage = anodebw.sum()*(0.1)
pt = anodebw/anodebw.sum()