【发布时间】:2021-05-13 06:08:41
【问题描述】:
我在 Matlab 中使用 'fminsearch' 来解决值函数迭代问题。
parfor i_a = 1:Na %Loop over state variable a
for i_d = 1:Nd %Loop over state variable d
for i_y = 1:Ny %Loop over state variable y
for i_t = 1:Nt %Loop over state variable y
[adj_sol, adjval] = fminsearchbnd(@(x) ...
-adjvalue_model1(x,i_a,i_d,i_y,i_t,Utility,A,D,Y,T,R,delta,fixed,Interpol_1,Na,Nd), ...
[x0(i_a,i_d,i_y,i_t); x1(i_a,i_d,i_y,i_t)],...
[A(1); D(1)],[A(end); D(end)],options);
这里,[x0(i_a,i_d,i_y,i_t); x1(i_a,i_d,i_y,i_t)] 是 fminsearch 的起点。
但是,结果似乎不正确,因为它给了我局部最小值。
所以我给出了四个不同的起点,并从三个中选择最小值,结果似乎合理。
[adj_sol1, adjval1] = fminsearchbnd(@(x) ...
-adjvalue_model1(x,i_a,i_d,i_y,i_t,Utility,A,D,Y,T,R,delta,fixed,Interpol_1,Na,Nd), ...
[x0(i_a,i_d,i_y,i_t); x1(i_a,i_d,i_y,i_t)],...
[A(1); D(1)],[A(end); D(end)],options);
[adj_sol2, adjval2] = fminsearchbnd(@(x) ...
-adjvalue_model1(x,i_a,i_d,i_y,i_t,Utility,A,D,Y,T,R,delta,fixed,Interpol_1,Na,Nd), ...
[xs1(i_a,i_d,i_y,i_t); xs2(i_a,i_d,i_y,i_t)],...
[A(1); D(1)],[A(end); D(end)],options);
[adj_sol3, adjval3] = fminsearchbnd(@(x) ...
-adjvalue_model1(x,i_a,i_d,i_y,i_t,Utility,A,D,Y,T,R,delta,fixed,Interpol_1,Na,Nd), ...
[xs3(i_a,i_d,i_y,i_t); xs4(i_a,i_d,i_y,i_t)],...
[A(1); D(1)],[A(end); D(end)],options);
[adj_sol4, adjval4] = fminsearchbnd(@(x) ...
-adjvalue_model1(x,i_a,i_d,i_y,i_t,Utility,A,D,Y,T,R,delta,fixed,Interpol_1,Na,Nd), ...
[xs5(i_a,i_d,i_y,i_t); xs6(i_a,i_d,i_y,i_t)],...
[A(1); D(1)],[A(end); D(end)],options);
adjval = min([adjval1, adjval2, adjval3, adjval4]);
if adjval == adjval1
adj_sol = adj_sol1;
elseif adjval == adjval2
adj_sol = adj_sol2;
elseif adjval == adjval3
adj_sol = adj_sol3;
elseif adjval == adjval4
adj_sol = adj_sol4;
end
但是,使用四个不同的起点非常耗时,所以我想知道是否有另一种方法可以处理这个局部最小值问题,并且比仅使用多个起点更有效(在速度方面)。
提前致谢。
【问题讨论】:
标签: matlab fminsearch