我想解决二维动态规划问题。我在TxT
上的某个对称网格网格上使用值函数迭代。我知道我在(t_i,t_j)
中遍历每个州TxT
并找到最佳控件(I_i,I_j)
。然而,该过程相当耗时。我想摆脱for循环。是否可以在objective
网格上定义TxT
,提供初始矩阵I0
并在一步中找到所有(I_i,I_j)
。
[...]
% vfi loop
while(iterate < max_iter & error > error_tol)
w_fit = fit([t1, t2], w, 'poly23');
% maximizing objective function for every possible state
for i = 1:length(w)
objective = @(I) -(h*1/6*((t1(i) + t2(i))/(2*c)...
- (a*(t1(i).^2 + t2(i).^2) + b*(I(1).^2 + I(2).^2)))...
+(1-r*h)*w_fit(t1(i) + h*(I(1) - d*t1(i)), t2(i) + h*(I(2) - d*t2(i))));
I_star =fminsearch(objective,[I1_0(i), I2_0(i)]);
pi_1(i) = I_star(1);
pi_2(i) = I_star(2);
Tw(i) = -objective(I_star);
end
iterate = iterate + 1
error = max(abs(Tw - w))
w = Tw;
I1_0 = pi_1;
I2_0 = pi_2;
end
答案 0 :(得分:2)
我不相信循环的“矢量化”会给你带来很多好处(而且我不知道你是如何做这样的矢量化的)。计算密集度最高的部分将是fminsearch
,它将多次调用存储在objective
中的匿名函数。因此,目标是优化 功能的执行。最好的技巧:只计算一次不依赖于匿名函数输入的术语和因子(在函数定义之外),并使用anon函数定义中的预计算值。
可以通过调整fminsearch
本身来完成其他优化:放宽容差,减少配置的迭代次数或功能评估,抑制诊断消息和图。请参阅此处的帮助:http://www.mathworks.com/help/matlab/ref/fminsearch.html