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

使用mip库在目标函数中引入基数约束:为何未得到预期解?

解决思路
  • 核心问题:你错误地试图通过目标函数实现基数约束(每个子列表恰好4个变量为1),这不符合MIP库的使用逻辑。约束条件需要显式添加到模型中,而非嵌入目标函数。
  • 正确做法:
    1. 移除目标函数里模拟约束的代码,为每个子列表添加等式约束,强制子列表内变量的和等于4。
    2. 若有实际的优化需求(比如最大化/最小化某个线性表达式),单独定义目标函数;若仅需满足约束,目标可设为任意简单形式(比如最大化0)。
  • 修正后的代码示例:
from mip import Model, xsum, maximize, BINARY

model = Model()

# 创建5个长度为6的二进制变量列表
x = [[model.add_var(var_type=BINARY) for _ in range(6)] for _ in range(5)]

# 为每个子列表添加约束:恰好4个变量为1
for sublist in x:
    model.add_constr(xsum(sublist) == 4)

# 可根据需求定义目标函数,这里示例为最大化所有变量的总和
model.objective = maximize(xsum(xsum(sublist) for sublist in x))

model.optimize()

# 输出结果
for v in x:
    print([a.x for a in v])
  • 关键说明:
    • model.add_constr(xsum(sublist) == 4) 是MIP中添加约束的标准方式,直接确保每个子列表的二进制变量和严格等于4。
    • 目标函数仅用于驱动求解器优化,若无需额外优化目标,设为maximize(0)也能正常得到满足约束的解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:23:12