已部分求解的Gurobi MIP模型如何设置SolutionLimit获取新增解?
解决MIP模型获取恰好一个新增解的方法
针对你遇到的问题,这里有两种可靠的处理方式:
方法一:解锁解存储上限,直接获取实际解数
- 首先修改参数,让Gurobi存储所有找到的可行解,突破默认10个的上限:
model.Params.PoolSolutions = 1000000 # 设置一个足够大的数值,覆盖你可能找到的解数量 - 此时
model.SolCount会返回模型实际已找到的解的总数,接着设置求解的解限制:model.Params.SolutionLimit = model.SolCount + 1 - 重新调用求解方法,模型就会恰好找到一个新增的可行解。
方法二:不存储所有解,通过约束排除已有解
如果担心存储大量解占用内存,可以用这种方式:
- 每次求解时只要求找1个解:
model.Params.SolutionLimit = 1 model.Params.PoolSearchMode = 2 # 让模型专注于寻找不同的可行解 - 每次找到一个解后,添加一个约束来排除这个解(以整数变量为例):
# 假设x是模型中的整数变量集合,var.X是当前解的变量取值 expr = gp.LinExpr() for var in x: expr += var * (1 - var.X) + (1 - var) * var.X model.addConstr(expr >= 1, name=f"exclude_sol_{model.SolCount}") - 再次求解时,模型就会返回下一个和已有解不同的可行解,实现每次只获取一个新增解的需求。
内容的提问来源于stack exchange,提问作者johk95
相关产品推荐
相关产品推荐

