Example #1
0
def execute_sim(function,Ts,tf,Nsims,Pi,name=None,cluster=False,informative=True):
	nSteps = int(tf/Ts)+1
	## matrix of initial conditions, size 2 x N
	X0 = np.random.multivariate_normal(mux0,Pi,size=(Nsims,)).transpose()
	## simulation output/measurement times
	tsim = np.arange(0.0,tf+Ts,Ts)
	## simulation output measurements
	YK = np.zeros((nSteps,Nsims))
	## simulation state history
	XK = np.zeros((nSteps,2*Nsims))

	t1 = time.time()
	for k in range(Nsims):
		if not cluster:
			sim = cp_dynamics.cp_simObject(function,X0[:,k],Ts)
		if cluster:
			if informative:
				sim = cp_dynamics.cp_simObjectCluster(function,X0[:,k],Ts)
			else:
				sim = cp_dynamics.cp_simObjectNonInformative(function,X0[:,k],Ts)
		# simulate
		(YK[:,k],XK[:,(2*k):(2*k+2)],tk) = sim.simFull(Tf=tf)
		t2 = time.time()
		etaCalc(k,Nsims,t2-t1)
	t2 = time.time()
	print("Completed %d sims in %g secs" % (Nsims,t2-t1))

	return(tsim,XK,YK,mux0,Ts,tf)
Example #2
0
def generate_sim(function,Ts,tf,name=None,cluster=False,informative=True):
	nSteps = int(tf/Ts)+1
	## matrix of initial conditions, size 2 x N
	if not cluster:
		X0 = np.random.multivariate_normal(mux0,P0,size=(Ns,)).transpose()
	else:
		X0 = np.random.multivariate_normal(mux0,Pcluster,size=(Ns,)).transpose()
	## simulation output/measurement times
	tsim = np.arange(0.0,tf+Ts,Ts)
	## simulation output measurements
	YK = np.zeros((nSteps,Ns))
	## simulation state history
	XK = np.zeros((nSteps,2*Ns))

	t1 = time.time()
	for k in range(Ns):
		if not cluster:
			sim = cp_dynamics.cp_simObject(function,X0[:,k],Ts)
		if cluster:
			if informative:
				sim = cp_dynamics.cp_simObjectCluster(function,X0[:,k],Ts)
			else:
				sim = cp_dynamics.cp_simObjectNonInformative(function,X0[:,k],Ts)
		# simulate
		(YK[:,k],XK[:,(2*k):(2*k+2)],tk) = sim.simFull(Tf=tf)
		t2 = time.time()
		etaCalc(k,Ns,t2-t1)
	t2 = time.time()
	print("Completed %d sims in %g secs" % (Ns,t2-t1))
	
	if name is not None:
		# write to file
		# write settings
		FID = open(name + "_settings.ini",'w')
		FID.write("[%s]\n" % (name))
		FID.write("Function: " + function.__name__ + "\n")
		FID.write("Ts: %g\n" % (Ts))
		FID.write("tf: %g\n" % tf)
		FID.write("Ns: %d\n" % Ns)
		if not cluster:
			FID.write("P0_11: %f\n" %  P0[0,0])
			FID.write("P0_12: %f\n" %  P0[0,1])
			FID.write("P0_21: %f\n" %  P0[1,0])
			FID.write("P0_22: %f\n" %  P0[1,1])
		else:
			FID.write("P0_11: %f\n" %  Pcluster[0,0])
			FID.write("P0_12: %f\n" %  Pcluster[0,1])
			FID.write("P0_21: %f\n" %  Pcluster[1,0])
			FID.write("P0_22: %f\n" %  Pcluster[1,1])
		FID.write("mux_1: %f\n" % mux0[0])
		FID.write("mux_2: %f\n" % mux0[1])
		FID.close()
		print("Wrote settings file")
		# write data
		datafilename = name + "_data.csv"
		FID = open(datafilename,'w')
		for k in range(nSteps):
			FID.write("%f," % tsim[k])
			for j in range(Ns):
				FID.write("%f,%f,%f," % (XK[k,2*j],XK[k,2*j+1],YK[k,j]))
			FID.write("\n")
		FID.close()
		print("Wrote data file")
		pass
	else:
		# plot histories and measurements
		fig = plt.figure()
		ax = []
		for k in range(2):
			nam = 'x' + str(k+1)
			ax.append(fig.add_subplot(1,2,k+1,ylabel=nam))
			inplot1 = range(k,2*Ns,2)
			print(inplot1)
			ax[k].plot(tsim,XK[:,inplot1])
			if k == 0:
				ax[k].plot(tsim,YK)
		fig.show()
		raw_input("Return to continue")
	return