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

线性规划:为偏离最优值的变量添加惩罚(x=0除外)

解决方案

要实现「x=0时不施加偏离惩罚」的需求,你需要引入一个二进制标记变量区分x的状态,再调整约束和目标函数逻辑:

1. 引入二进制变量

新增一个0-1整数变量y,用来标记x的状态:

  • 当x=0时,y=0(无惩罚)
  • 当x≠0时,y=1(启用惩罚)

2. 添加变量关联约束

给x和y添加约束,确保两者状态绑定:

# M是足够大的正数(需大于x的最大可能取值,比如设为100)
M = 100
self.prob += x <= M * y

这个约束保证:如果x>0,y必须等于1;如果x=0,求解器会自动选择y=0(因为这样能消除惩罚项,更优)。

3. 调整惩罚约束

修改原有的_SP约束,让惩罚仅在y=1时生效:

# 当y=1时,约束退回到原有的|x-3| ≤ _SP;当y=0时,约束自动宽松(允许_SP=0)
self.prob += x - 3 <= _SP + M * (1 - y)
self.prob += 3 - x <= _SP + M * (1 - y)
self.prob += _SP >= 0  # 确保_SP非负

4. 修改目标函数的惩罚项

让惩罚仅在y=1时计入目标:

objective += other_values - 0.1 * _SP * y

调整后效果:

  • 当x=0时,y=0,惩罚项消失,_SP可取0,无惩罚产生
  • 当x≠0时,y=1,惩罚逻辑和原方案一致,约束会保证_SP覆盖x与3的偏差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:07:15