コード例 #1
0
ファイル: ponzi4.py プロジェクト: zsh1313/bellman
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)
コード例 #2
0
ファイル: ponzi4.py プロジェクト: zsh1313/bellman
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
コード例 #3
0
ファイル: ponzi4.py プロジェクト: zsh1313/bellman
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)
コード例 #4
0
ファイル: ponzi4.py プロジェクト: zsh1313/bellman
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()
コード例 #5
0
ファイル: ponzi4.py プロジェクト: zsh1313/bellman
def calcHittingTimes(outputDirname, paramName, paramList, filenameFormat, baseParams):	
	def colorBullet(state):
		hexcolor = matplotlib.colors.rgb2hex(stateToRGBA(state)[0:3])
		return '<FONT COLOR="%s">&bull;</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()
コード例 #6
0
ファイル: ponzi4.py プロジェクト: zsh1313/bellman
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)		
コード例 #7
0
ファイル: ponzi4.py プロジェクト: zsh1313/bellman
		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()