如何在CPLEX中绘制代码效率与最优解收敛图表及解析相关统计图
在CPLEX中可视化运行效率与最优解收敛情况及进度图解析
一、生成运行效率与收敛情况图表的方法
1. 用CPLEX自带工具直接可视化
- 在CPLEX交互式优化器里,先输入命令
set graphics yes,再执行optimize,系统会自动弹出收敛追踪窗口,实时展示目标值上下界随时间的变化曲线。 - 用OPL Studio的话,在运行配置里勾选Show graphical progress选项,运行模型时会直接弹出收敛图,能直观看到最优解的收敛过程。
2. 导出数据自定义绘图
如果需要更个性化的图表,可以导出求解过程数据,用Excel、Python等工具手动绘制:
- 在OPL中,通过CPLEX的API在求解循环里记录关键数据,比如时间、当前目标值、最优下界,保存到CSV文件。示例代码片段:
float currentObj; float bestBound; float elapsedTime; execute{ while (cplex.solve()) { currentObj = cplex.getObjValue(); bestBound = cplex.getBestObjValue(); elapsedTime = cplex.getCplexTime(); writeln(elapsedTime, ",", currentObj, ",", bestBound); } }
- 导出后用Python读取数据绘图,比如用Matplotlib生成收敛曲线:
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('cplex_log.csv', header=None, names=['Time', 'ObjValue', 'BestBound']) plt.plot(data['Time'], data['ObjValue'], label='当前可行解目标值') plt.plot(data['Time'], data['BestBound'], label='最优下界') plt.xlabel('耗时(秒)') plt.ylabel('目标函数值') plt.legend() plt.show()
二、统计窗口黑色进度图的概念与作用
1. 基本概念
这个黑色图是CPLEX的MIP进度追踪图,专门用于混合整数规划模型的求解监控:
- 横轴是求解时间(或迭代次数),纵轴是目标函数值。
- 上方曲线:当前找到的最优可行解的目标值(最小化问题中是上界,会逐渐降低;最大化问题中是下界,会逐渐升高)。
- 下方曲线:松弛问题的最优目标值(最小化问题中是下界,会逐渐升高;最大化问题中是上界,会逐渐降低)。
- 两条曲线的差值就是最优性间隙,当间隙缩小到设定阈值(比如默认0.1%),求解自动终止。
2. 核心作用
- 判断收敛速度:看曲线斜率就能知道近期是否频繁找到更优解,斜率越大说明收敛越快。
- 评估求解难度:如果两条曲线长时间几乎平行,说明最优性间隙难以缩小,可能需要调整分支策略、割生成强度等参数。
- 预判终止时机:根据间隙缩小趋势,能决定是否提前终止求解,或者调整间隙阈值来平衡求解时间和解的质量。
内容的提问来源于stack exchange,提问作者MO MO MA
相关产品推荐
相关产品推荐

