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

线性规划约束疑问:能否混用不同计量单位构建约束?

关于线性规划约束中混用计量单位的疑问解答

别担心,新手问题完全值得探讨!这是个很实际的问题,我来一步步给你解释清楚。

核心结论

线性规划的约束完全允许混用不同计量单位,不需要强制把所有单位统一转换,只要满足一个关键条件:单个约束内部的单位必须保持一致。

具体解释

每个约束都是独立的数学不等式,各自对应不同的物理/评价指标,不同约束之间的单位没有关联,只要每个约束里的计算逻辑自洽即可:

  • 比如你的卡路里约束:左边是「食材数量 × 每单位食材的卡路里」,结果的单位是卡路里;右边的47.0也是卡路里,两者单位匹配,这个约束是合理的。不管卡路里具体是千卡还是大卡,只要所有食材的卡路里参数和约束阈值用的是同一个标准,就完全没问题。
  • 脂肪约束:左边计算结果是克,右边阈值3.0也是克,单位一致,没问题。
  • 钙约束:左边是毫克,右边24毫克,单位匹配,正确。
  • Good指标约束:左边是「食材数量 × 每单位食材的good百分比」,结果是总餐食的good百分比,右边45%是对应的要求,只要这个阈值和参数的百分比定义统一(比如都是单份食材的占比),就完全合理。

需要注意的关键点

  • 绝对不能在同一个约束里混用单位:比如如果某个约束左边计算结果是克,右边阈值写成毫克,那这个约束的逻辑就完全错误了,这时候才需要转换单位(比如把克转成毫克,或者反过来)。
  • 对于你提到的「卡路里定义未知」的问题,只要所有食材的卡路里参数和约束阈值用的是同一套定义(比如都是大卡,或者都是千卡),就不影响模型的正确性——你不需要知道它的物理定义,只要保证数据的一致性就行。

对你的代码示例的验证

你的约束代码是完全合理的,每个约束内部的单位都保持了一致:

prob += lpSum([calories[f] * aliments_vars[f] for f in aliments]) >= 47.0, "caloriesMinIn?"
prob += lpSum([fat[f] * aliments_vars[f] for f in aliments]) >= 3.0, "fatMinIngrammes"
prob += lpSum([calcium[f] * aliments_vars[f] for f in aliments]) >= 24, "calciumMinInmilligrammes"
prob += lpSum([good[f] * aliments_vars[f] for f in aliments]) >= 45, "goodMinInPercent"

每个约束的左侧计算结果和右侧阈值的单位都匹配,完全符合线性规划的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:27:44