使用 Matlab 进行函数最小化时遇到问题,因为它 returns 尽管函数值发生了显着变化,但仍具有相同的值

Trouble having function minimization with constraints using Matlab as it returns the same value despite significant changes in function values

我正在尝试最小化下面显示为 fun(a) 的函数,并且对于 Gf_delta(1,2,...7) 值的不同计算值,它 returns a 'a' 的一组特定值,不随 Gf_delta 值的变化而变化。

An image attached as link here to help understand better

a0 = [1,1,1,1,1,0.5,1];
fun = @(a) Gf_delta1*a(1)+Gf_delta2*a(2)+Gf_delta3*a(3)+Gf_delta4*a(4)+Gf_delta5*a(5)+Gf_delta6*a(6)+Gf_delta7*a(7)
A = []
B = []
Aeq = [1 2 1 0 0 0 0; 0 1 0 2 0 0 1; 0 0 0 0 2 2 0; 2 0 0 0 0 1 0]
Beq = [2,1,4,2]
lb = [0,0,0,0,0,0,0]
ub = []
options = optimoptions(@fmincon,'Algorithm','sqp-legacy','MaxIterations',1500)
a = fmincon(fun,a0,A,B,Aeq,Beq,lb,ub,[],options)

非常感谢任何帮助或建议,谢谢。

欢迎来到 Whosebug。尝试重现您的问题时,Gf_delta 的不同值得到了不同的结果。请参阅以下复制粘贴的命令行输出:

>> Gf_delta = 1:7;
>> fun = @(a) Gf_delta*a.';
>> a = fmincon(fun,a0,A,B,Aeq,Beq,lb,ub,[],options)
a =

    1.0000    0.5000         0    0.2500    2.0000    0.0000         0

>> Gf_delta = -3:3;
>> fun = @(a) Gf_delta*a.';
>> a = fmincon(fun,a0,A,B,Aeq,Beq,lb,ub,[],options)
a =

    1.0000    0.2284    0.5433    0.3858    2.0000         0         0

请注意,我用向量替换了 Gf_delta 的单个值,这将 fun 简化为向量-向量乘法(但不会改变根本问题)。因此,相同优化结果的原因在于其他地方。

一些提示,原因可能在于:

  1. 请注意,MATLAB 存储在声明期间传递给匿名函数的变量值。因此,更改 Gf_delta 值需要再次创建 fun(如上面的控制台输出所示)。 help page 提供了示例,其中创建了一个匿名函数并删除了参数。

  2. 也许,您的 Gf_delta 变量变化很小或以线性相关的方式变化,因此这个线性规划问题的解实际上保持不变。