我正在尝试使用 active-set 方法设置fmincon以解决线性约束最小化问题,其中最小化目标函数@fun使得
但这些试验在历史上引发了更多奇怪的错误。
试验 1
[x,fval]=fmincon(@fun, Guess, A, b)
试验 2
options = optimoptions('fmincon','Algorithm','active-set'); [x,fval]=fmincon(@fun, Guess, A, b, options)
您为算法使用了错误的选项。MATLAB 会查看您提供的参数并使用使用这些参数的算法。它会引发警告,因为不同的算法可能会产生不同的结果(你永远不应该忽略这些)'trust-region-reflective' 是 fmincon 的默认算法。从文档中:
'trust-region-reflective' 要求您提供渐变,并且只允许边界或线性等式约束,但不能同时提供。
您致电 fmincon 的文档说:
x = fmincon(fun,x0,A,b) 从 x0 开始,并尝试找到 fun 中描述的函数的最小化函数 x 服从线性不等式 A*x ≤ b。x0 可以是标量、向量或矩阵。
您可能打算使用
x = fmincon(fun,x0,A,b,Aeq,beq)
您将拥有 A = []、b = [],并且 Aeq 和 beq 是您之前拥有的 A 和 b(如果您想使用 trust-region-reflective)。
您的第二次试用没有成功,因为您实际上是在打电话x = fmincon(fun,x0,A,b,Aeq,beq)
。相反,您尝试传递一个选项结构。
编辑:如果要传递选项,则必须指定所有可选参数:
[x,fval] = fmincon(@DijIIii,x0, A , b,[], [], [], [],@nonlcon,options);