具有非标量目标函数的Matlab中的fmincon

时间:2017-06-20 17:35:36

标签: matlab

我想用Matlab来解决约束最小化问题:

min wrto (gamma,delta) the function f(gamma,delta):=[gamma,delta]

这样

A(gamma,delta)-B(gamma,delta)<=0

这是一个工作示例:

%main file
gamma0=0.4;
delta0=0.5;
x=fmincon(@(x) [x(1) x(2)], [gamma0 delta0], ...
          [],[],[],[],[],[], ...
          @(x) mycon(x(1),x(2))); 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%function for constraints
function [C,Ceq]=mycon(gamma,delta)
    A=randn(1)+gamma+delta;
    B=randn(1)+gamma+delta;
    C=A-B;
    Ceq=[];
end

然而,我得到了错误

Error using fmincon (line 607)
User supplied objective function must return a scalar value.

您能否帮我理解如何修改代码,以便fmincon也接受所需的非标量输出函数?

1 个答案:

答案 0 :(得分:1)

在数学上未定义计算非标量目标函数的最小值。作为替代方案,您可以最小化以下选项之一:

  • x(1)x(2)
  • 两者的加权组合(通常为L1L2L_infinity规范)

其他注意事项

  • 如果它们是约束函数的一部分,那么不属于目标函数的变量可能会发生变化,以便进一步减少其他变量。

  • 在目标/约束函数中使用随机生成器(如randn)通常是个坏主意,因为fmincon会多次调用它们输入参数导致随机改变的目标/约束函数。您应该在调用fmincon之前生成随机变量,并将这些变量作为函数的参数传递。