You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Octave中使用GLPK求解最大化问题为何得到负值结果?

问题原因与修正方案

问题出在目标函数系数与优化方向的匹配错误。

GLPK的Octave接口中,s=-1表示要最大化目标函数c'*x,而你设置的c = [-12; -15; -20; -10],意味着实际求解的是:

max (-12x₁ -15x₂ -20x₃ -10x₄)

由于所有系数都是负数,求解器会让变量取最小值来最大化目标值——x₁下限是50,其他变量下限为0,最终得到-12*50 = -600,这就是负值结果的来源。

修正方式

如果你的真实目标是最大化12x₁ +15x₂ +20x₃ +10x₄(即注释中的利润最大化),有两种正确设置:

  1. 用正系数配合最大化方向:
c = [12; 15; 20; 10];  % 原利润系数
s = -1;                 % 声明最大化目标
  1. 用负系数配合最小化方向(等价于最大化原目标):
c = [-12; -15; -20; -10];  % 利润系数取反
s = 1;                      % 最小化取反后的目标,等价于最大化原利润

修正后重新运行,就能得到符合预期的正利润值。另外,status=0表示求解成功,这个状态是正常的,只是目标函数设置错误导致结果不符合预期。

内容的提问来源于stack exchange,提问作者Rares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:35:28