我有2个不同的矢量功能。这些是函数的控制向量(决策变量)。我想使用fmincon
来优化此函数,并分别获得两个控制向量结果。
我试过使用句柄,@,但是我收到了一个错误。
功能是:
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);
这是我得到的错误:
使用myFS时出错(第12行)没有足够的输入参数。
fmincon出错(第564行) initVals.f = feval(funfcn {3},X,varargin {:});
main_Econstraint中的错误(第58行)[Xtemp(:,h2),Fval,fiasco] = fmincon( 'myFS',XSTART,[],[],[],[],VLB,VUB,@(X,SV)myCon(SV),选项);
由于
答案 0 :(得分:1)
fmincon希望你的函数是一个变量,没有解决这个问题,但请看:
http://se.mathworks.com/help/optim/ug/passing-extra-parameters.html
例如,如果x,cv都是优化的变量,你可以将它们组合起来,然后将它们分成实际目标
例如
x_cv = vertcat(x, cv)
然后x = x_cv(1:5); cv = x_cv(6:end)
'
如果cv不是优化的变量,那么'冻结它'如上面的链接所示