我想用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
也接受所需的非标量输出函数?
答案 0 :(得分:1)
在数学上未定义计算非标量目标函数的最小值。作为替代方案,您可以最小化以下选项之一:
x(1)
或x(2)
其他注意事项
如果它们是约束函数的一部分,那么不属于目标函数的变量可能会发生变化,以便进一步减少其他变量。
在目标/约束函数中使用随机生成器(如randn
)通常是个坏主意,因为fmincon
会多次调用它们输入参数导致随机改变的目标/约束函数。您应该在调用fmincon
之前生成随机变量,并将这些变量作为函数的参数传递。