私はPythonには新しく、再帰関数を書くのに苦労しています。 私は教授からの例として与えられたMATLABで動的なプログラミング機能のためのコード行があります。Pythonの再帰関数を使った動的プログラミング
function [policy,fstar] =StochasticInventoryControl(N,K,c,h,M,g,Dmax,p)
fstar=zeros(M+1,N+1);
for n=N:-1:1
for s=0:M
for x=0:M-s
temp=0;
for d=0:Dmax
temp=temp+p(d+1)*(g*min(s+x,d)+fstar(1+max(s+x-d,0),n+1));
end
f(1+s,1+x)=-K*(x>0)-c*x-h*(s+x)+temp;
end
[fstar(1+s,n),policy(1+s,n)]=max(f(1+s,1:M-s+1));
end
end
policy=policy-1;
end
私はPythonで再書き込みと同じ機能をしようとしている、と私が思いついたのこのコード:
def StochasticInventoryControl(N, K, c, h, M, g, Dmax, p):
fstar = zeros(M + 1, N + 1)
for n in range (N, 1, -1):
for s in range (0, M):
for x in range (0, M - s):
temp = 0
for d in range (0, Dmax):
temp = temp + p(d + 1)*(g*min(s + x, d) + fstar(1 + max(s + x - d,0), n + 1))
f(1 + s, 1 + x).lvalue = -K * (x > 0) - c * x - h * (s + x) + temp
[fstar(1 + s, n), policy(1 + s, n)] = max(f(1 + s, n in range (1, M - s + 1))
最終行が間違っていますが、私はこのようにPythonで関数の再帰的関係を定義することはできません。どうすればPythonで最後の行を書くべきですか?
あなたは '行列などのためnumpy'を使用していますか?あなたの 'zeros()'コールは、あなたのことを示唆しています。もしあなたがそうであれば、MATLABのバージョンに非常によく似たコードを書くことができるはずですが、 '[]'ではなく '()'でインデックスを付け、Pythonでは1から始まるインデックスではなく0を使います – Marius