ich habe folgendes spezielles Problem, was ich noch nicht in anderen Threats bisher gesehen habe.
Ich möchte eine value function iteration durchführen, d.h. dass Tw = w ergibt, wobei T der Operator ist (mehr oder weniger ein Fixpunktproblem)
Ich habe bisher folgenden Code:
Code: Alles auswählen
import numpy as np
import find_max as fm
def vfi(nk,nos,consum,beta,P,error_tol=1e-5,max_iter=1000, verbose=1):
vk = np.zeros((nk,nos))
decis = np.ones((nk,nos))
vj = np.zeros((nk,nos))
tdecis = np.ones((nk,nos))
metric1 = 10
metric2 = 10
metric = max(metric1,metric2)
iterate = 0
while metric > error_tol and iterate < max_iter:
for q in range(nos):
z = consum[:,:,q] + beta*(vj*np.transpose(P[q,:])*np.ones((1,nk)))
# print(z)
tv_p = z.max(0)
tdecis_p = fm.max_pos(nk,z)
vk[:,q] = np.ravel(np.transpose(tv_p))
tdecis[:,q] = np.ravel(tdecis_p)
Z1 = np.abs(vk-vj)
Z2 = np.abs(tdecis-decis)
metric1 = Z1.max()
metric2 = Z2.max()
metric = max(metric1,metric2)
iterate += 1
if verbose:
print "Computed iterate %d with error %f" % (iterate, metric)
vj = vk
decis = tdecis
return vk, tdecis, z, tdecis_p, tv_p, vj, decis, metric1, metric2, PDas Problem habe ich ab dem zweiten Iterationsschritt. Dabei wird die Matrix v0 spaltenweise von der Matrix v1 überschrieben, wobei das erst am Ende jeder Iteration geschehen soll. Innerhalb einer Iteration soll sich die Matrix v0 nicht verändern, da ich für die verschiedenen nos (number of states) das gleiche v0 benutzen möchte.
Die Funktion max_pos findet einfach in der Matrix z spaltenweise die Position des maximalen Werts, da sollte es also keine Probleme geben.
nk ist die number of grid points = 200
nos = 7
consum ist eine nk x nk x nos Matrix
beta und crit sind skalare
P ist eine nos x nos Matrix
Für eine kleine Hilfe wäre ich sehr dankbar. Bin absoluter Neuling in Python und hab bisher nur mit Matlab gearbeitet.
Danke, Frohe Weihnachten und beste Grüße,
staacke
Edit(cofi): Code in Python-Tags gesetzt.
