如何使用 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 所建议的那样