如何使用 fmincon 优化一个函数的两个控制向量
How to use fmincon to optimize two control vectors of a function
我有 2 个不同向量的函数。这些是函数的控制向量(决策变量)。我想用 fmincon
来优化这个函数,同时也分别得到两个控制向量的结果。
我尝试使用 handle ,@,但出现错误。
函数是:
function f = myFS(x,sv) % x is a vector (5,1)
f = norm(x)^2-sigma*(sv(1)+sv(2));
end
%% 我试着写 fmincone
来考虑两个控制向量(x 和 sv)
[Xtemp(:,h2),Fval, fiasco] = fmincon(@(x,sv)myFS(x,sv)...
,xstart,[],[],[],[],VLB,VUB,@(x,sv)myCon(sv),options);
这是我得到的错误:
Error using myFS (line 12) Not enough input arguments.
Error in fmincon (line 564)
initVals.f =
feval(funfcn{3},X,varargin{:});
Error in main_Econstraint (line 58) [Xtemp(:,h2),Fval, fiasco] =
fmincon('myFS',xstart,[],[],[],[],VLB,VUB,@(x,sv)myCon(sv),options);
谢谢
fmincon 期望您的函数是单个变量,没有解决办法,但请参阅:
http://se.mathworks.com/help/optim/ug/passing-extra-parameters.html
例如,如果 x、cv 都是优化的变量,您可以将它们合并,然后在实际中拆分它们 objective
例如
x_cv = vertcat(x, cv)
然后 x = x_cv(1:5); cv = x_cv(6:end)
'
如果 cv 不是优化的变量,则 'freeze it' 正如上面 link 所建议的那样
我有 2 个不同向量的函数。这些是函数的控制向量(决策变量)。我想用 fmincon
来优化这个函数,同时也分别得到两个控制向量的结果。
我尝试使用 handle ,@,但出现错误。
函数是:
function f = myFS(x,sv) % x is a vector (5,1)
f = norm(x)^2-sigma*(sv(1)+sv(2));
end
%% 我试着写 fmincone
来考虑两个控制向量(x 和 sv)
[Xtemp(:,h2),Fval, fiasco] = fmincon(@(x,sv)myFS(x,sv)...
,xstart,[],[],[],[],VLB,VUB,@(x,sv)myCon(sv),options);
这是我得到的错误:
Error using myFS (line 12) Not enough input arguments.
Error in fmincon (line 564) initVals.f = feval(funfcn{3},X,varargin{:});
Error in main_Econstraint (line 58) [Xtemp(:,h2),Fval, fiasco] = fmincon('myFS',xstart,[],[],[],[],VLB,VUB,@(x,sv)myCon(sv),options);
谢谢
fmincon 期望您的函数是单个变量,没有解决办法,但请参阅:
http://se.mathworks.com/help/optim/ug/passing-extra-parameters.html
例如,如果 x、cv 都是优化的变量,您可以将它们合并,然后在实际中拆分它们 objective
例如
x_cv = vertcat(x, cv)
然后 x = x_cv(1:5); cv = x_cv(6:end)
'
如果 cv 不是优化的变量,则 'freeze it' 正如上面 link 所建议的那样