def testParams(paramName, paramList, filenameFormat, initGlobalParams=True, maxIters=None, baseParams={}): itemList = [] kwargs = baseParams.copy() for paramVal in paramList: kwargs[paramName] = paramVal g.setGlobalParams(initGlobalParams, **kwargs) #print("%s=%f" % (paramName, paramVal)) print(kwargs) iterate1(n=maxIters) filename = (filenameFormat % paramVal) + ".out" saveIters(filename)
def test2ParamsSummary(): table = {} for zHigh in zHighList: for beta in betaList: g.setGlobalParams(True, beta=0.7, zHigh=1.4, zLow=0.9); # this is the baseline g.setGlobalParams(False, zHigh=zHigh, beta=beta) print("zHigh=%f beta=%f" % (zHigh, beta)) filename = (filenameFormat % (zHigh, beta)) + ".out" loadIters(filename) g = createGraph(len(g_iterList) - 1) S = pruneZeroIndegree(g) if (g.BANKRUPT_NODE in S): S.remove(g.BANKRUPT_NODE) if (len(S) == 0): print("no nodes in cyclic paths") else: expHittingTimes = calcExpectedTimeToBankruptcy(g, S) print(expHittingTimes) (maxNode, maxTime) = (None, None) # find the blue node with the largest expected hitting time for (node, expHittingTime) in expHittingTimes: if ((maxTime == None or expHittingTime > maxTime) and g.node[node]['state'] == g.STATE_BLUE): (maxNode, maxTime) = (node, expHittingTime) if (not maxNode == None): opt_r = g_iterList[len(g_iterList) - 1]['opt_r'] (M, D) = (g.grid_M[maxNode[0]], g.grid_D[maxNode[1]]) table[(zHigh, beta)] = (maxNode, (M, D), maxTime, g.node[maxNode]['state'], opt_r([M, D])) for beta in betaList: print beta, print for zHigh in zHighList: for beta in betaList: if ((zHigh, beta) in table): (node, (M, D), hittingTime, state, r) = table[(zHigh, beta)] print r, else: print "-", print for beta in betaList: if ((zHigh, beta) in table): (node, (M, D), hittingTime, state, r) = table[(zHigh, beta)] print hittingTime, else: print "-", print return table
def test2Params(): for zHigh in zHighList: for beta in betaList: g.setGlobalParams(True, beta=0.7, zHigh=1.4, zLow=0.9); # this is the baseline g.setGlobalParams(False, zHigh=zHigh, beta=beta) print("zHigh=%f beta=%f" % (zHigh, beta)) iterate1(useNew=False, parallel=True) filename = (filenameFormat % (zHigh, beta)) + ".out" saveIters(filename) g = createGraph(len(g_iterList) - 1) S = pruneZeroIndegree(g) if (g.BANKRUPT_NODE in S): S.remove(g.BANKRUPT_NODE) if (len(S) == 0): print("no nodes in cyclic paths") else: expHittingTimes = calcExpectedTimeToBankruptcy(g, S) print(expHittingTimes)
def writeGraphs(outputDirname, title, paramName, paramList, filenameFormat): import markup if (not os.path.isdir(outputDirname)): os.mkdir(outputDirname) plt.ioff() itemList = [] for paramVal in paramList: kwargs = {paramName: paramVal} g.setGlobalParams(True, **kwargs) loadIters((filenameFormat % paramVal) + ".out") imgList = [] plotV(-2, colorStates=True) filename = (filenameFormat % paramVal) + "-V.png" path = os.path.join(outputDirname, filename) try: os.remove(path) except OSError: pass print(path) plt.savefig(path, format='png', dpi=60) plt.close() imgList.append(filename) plotOptD(-2, colorStates=True) filename = (filenameFormat % paramVal) + "-optD.png" path = os.path.join(outputDirname, filename) try: os.remove(path) except OSError: pass print(path) plt.savefig(path, format='png', dpi=60) plt.close() imgList.append(filename) plotOptR(-2, colorStates=True) filename = (filenameFormat % paramVal) + "-optR.png" path = os.path.join(outputDirname, filename) try: os.remove(path) except OSError: pass print(path) plt.savefig(path, format='png', dpi=60) plt.close() imgList.append(filename) plotNextM(1, -2, colorStates=True) filename = (filenameFormat % paramVal) + "-nextM.png" path = os.path.join(outputDirname, filename) try: os.remove(path) except OSError: pass print(path) plt.savefig(path, format='png', dpi=60) plt.close() imgList.append(filename) itemList.append(("%s=%f" % (paramName, paramVal), imgList)) plt.ion() page = markup.page() page.init(title=title) page.br( ) for item in itemList: (caption, imgList) = item page.p(caption) for imageName in imgList: page.img(src=imageName) filename = os.path.join(outputDirname, "index.html") f = open(filename, 'w') f.write(str(page)) f.close()
def calcHittingTimes(outputDirname, paramName, paramList, filenameFormat, baseParams): def colorBullet(state): hexcolor = matplotlib.colors.rgb2hex(stateToRGBA(state)[0:3]) return '<FONT COLOR="%s">•</FONT>' % hexcolor if (not os.path.isdir(outputDirname)): os.mkdir(outputDirname) filename = os.path.join(outputDirname, "bankruptcyTime.html") page = markup.page() page.init(title=paramName) opt_r_list = [] exp_time_list = [] for paramVal in paramList: kwargs = baseParams.copy() kwargs[paramName] = paramVal print(kwargs) g.setGlobalParams(True, **kwargs) loadIters((filenameFormat % paramVal) + ".out") graph = createGraph(len(g_iterList) - 1) print("%s = %f" % (paramName, paramVal)) page.p("%s = %f" % (paramName, paramVal)) # go through all blue states and get the range of opt_r opt_r_range = set() for node in graph.nodes(): if (graph.node[node]['state'] == g.STATE_BLUE): opt_r = graph.node[node]['opt_r'] opt_r_range.add(opt_r) S = pruneZeroIndegree(graph) if (g.BANKRUPT_NODE in S): S.remove(g.BANKRUPT_NODE) # print out r range opt_r_range_list = sorted(list(opt_r_range)) if (len(opt_r_range_list) > 0): print("opt_r range: %f, %f" % (opt_r_range_list[0], opt_r_range_list[-1])) else: print("opt_r range empty") opt_r_range_sorted = sorted(list(opt_r_range)) print(opt_r_range_sorted) if (len(opt_r_range_list) > 0): page.p("opt_r range: %f, %f" % (opt_r_range_list[0], opt_r_range_list[-1])) opt_r_list.append((paramVal, opt_r_range_sorted[0])) else: page.p("opt_r range empty") opt_r_list.append((paramVal, scipy.NaN)) # print transition matrix and expected hitting times if (len(S) == 0): print("no nodes in cyclic paths") page.p("no nodes in cyclic paths") exp_time_list.append((paramVal, None)) print("max exp time: None") else: (transitionMatrix, expHittingTimes) = calcExpectedTimeToBankruptcy(graph, S) # nodeList = sorted(expHittingTimes, cmp=compareNodes) nodeStrList = [] for (node, expTime) in expHittingTimes: (iM, iD) = node nodeStrList.append("%.3f, %.3f" % (g.grid_M[iM], g.grid_D[iD])) table = PrettyTable([""] + nodeStrList + ["expected hitting time"]) for (i, nodeStr) in enumerate(nodeStrList): table.add_row([colorBullet(graph.node[node]['state']) + nodeStr] + list(transitionMatrix[i]) + [expHittingTimes[i][1]]) print(table) print(expHittingTimes) page.add(table.get_html_string()) max_exp_time = scipy.amax([x[1] for x in expHittingTimes]) exp_time_list.append((paramVal, max_exp_time)) print("max exp time: %f" % max_exp_time) print("opt_r summary: ",) print(opt_r_list) page.p("opt_r summary: ") for (paramVal, opt_r) in opt_r_list: page.p("%f\t%f" % (paramVal, opt_r)) print("exp_time summary: ",) print(exp_time_list) page.p("exp_time summary: ") for (paramVal, exp_time) in exp_time_list: if (exp_time == None): page.p("%f\tNone" % paramVal) else: page.p("%f\t%f" % (paramVal, exp_time)) f = open(filename, 'w') f.write(str(page)) f.close()
def loadRun(filename): pk_file = gzip.open(filename, 'rb') (params, itersObj) = pickle.load(pk_file) pk_file.close() g.setGlobalParams(True, **params) bellman.setItersObj(itersObj)
itemList.append(("%s=%f" % (paramName, paramVal), imgList)) plt.ion() page = markup.page() page.init(title=title) page.br( ) for item in itemList: (caption, imgList) = item page.p(caption) for imageName in imgList: page.img(src=imageName) filename = os.path.join(outputDirname, "index.html") f = open(filename, 'w') f.write(str(page)) f.close() ######################################################################3 # testing and generating the output. # # init global parameters, c library # default values are: beta=0.9, m=0.1, bankruptcyPenalty=0, zLow=1.0, zHigh=1.2, pHigh=0.95 #g.setGlobalParams(True) g.setGlobalParams(True, beta=0.8, zHigh=1.2, zLow=0.8, pHigh=0.9) # zLow's effect... ? # beta's effect is to make blue "vertical", i.e. bank becomes impatient, so would rather take more out of M and go to blue, rather than have a higher M and go to green bellman.resetIters()