GLOP等LP求解器Python脚本实现及初始解限时优化技术问询
线性规划MPS模型求解脚本及功能说明
一、GLOP的最小Python求解脚本
GLOP是Google OR-Tools套件中的线性规划求解器,需先安装依赖:
pip install ortools
对应命令行read model.mps+optimize的最小实现脚本:
from ortools.linear_solver import pywraplp # 初始化GLOP求解器 solver = pywraplp.Solver.CreateSolver('GLOP') if not solver: exit() # 加载MPS模型 if solver.LoadModel('model.mps') != pywraplp.Solver.OK: print("模型加载失败") exit() # 执行优化 solve_status = solver.Solve() # 可选:输出基础求解结果 print(f"求解状态: {solver.StatusName(solve_status)}") if solve_status == pywraplp.Solver.OPTIMAL: print(f"最优目标值: {solver.Objective().Value()}")
二、PDLP、CLP等求解器的实现方式
PDLP求解器
PDLP同样属于Google OR-Tools生态,安装依赖与GLOP一致,仅需修改求解器名称即可:
from ortools.linear_solver import pywraplp solver = pywraplp.Solver.CreateSolver('PDLP') if not solver: exit() solver.LoadModel('model.mps') solver.Solve()
CLP求解器
CLP是COIN-OR项目中的开源LP求解器,需先安装其Python绑定:
pip install coinor-clp
最小求解脚本:
from clp import CLPSolver solver = CLPSolver() # 读取MPS模型 solver.readMps('model.mps') # 执行优化 solver.initialSolve() # 可选:输出结果 print(f"目标值: {solver.objectiveValue()}")
三、指定初始解与限时寻优功能支持
指定初始解
所有三款求解器均支持设置初始解,帮助求解器更快收敛:
- GLOP/PDLP:通过变量的
SetHint方法设置初始值:# 遍历模型所有变量,为每个变量设置初始值 for var in solver.variables(): var.SetHint(your_initial_value) # your_initial_value为预设的初始解数值 solver.Solve() - CLP:通过
setInitialSolution方法批量设置:vars_list = solver.variables() initial_values = [val1, val2, ...] # 数值顺序需与变量列表对应 solver.setInitialSolution(vars_list, initial_values) solver.initialSolve()
限时寻优
三款求解器均支持设置求解时间限制,超时后返回当前找到的最优可行解:
- GLOP/PDLP:
SetTimeLimit方法,单位为毫秒:solver.SetTimeLimit(30000) # 限制求解时间为30秒 solver.Solve() - CLP:
setTimeLimit方法,单位为秒:solver.setTimeLimit(30) # 限制求解时间为30秒 solver.initialSolve()
参考问题翻译:如何为大规模线性规划问题找到一个可行但非最优的解?
内容的提问来源于stack exchange,提问作者Zohar Levi
相关产品推荐
相关产品推荐

