如何让PYOMO调用的带AMPL的SCIP求解器在.sol文件输出迭代数据
SCIP求解器输出迭代明细数据的解决方案
首先明确:AMPL规范定义的.sol文件本身仅用于存储求解最终结果,迭代日志不会写入该文件,你需要的迭代明细会输出到单独的日志文件或者控制台标准输出中,可通过以下SCIP参数配置开启:
Pyomo调用AMPL版SCIP的配置方法
你在Pyomo中构造求解器时传入对应SCIP参数即可,示例代码如下:
from pyomo.environ import SolverFactory # 构造SCIP求解器,替换为你本地的scipampl可执行文件路径 solver = SolverFactory('scip', executable='path/to/your/scipampl') # 基础输出配置 solver.options['display/verblevel'] = 5 # 日志输出等级,取值0-5,5为最高级,输出所有迭代明细 solver.options['display/freq'] = 1 # 每迭代1步输出一次日志,避免信息延迟输出 solver.options['log/file'] = "scip_iteration.log" # 指定迭代日志输出到单独文件,不填则默认输出到控制台 solver.options['log/append'] = False # 每次求解覆盖旧日志文件,不需要覆盖可设为True # 输出IPOPT子求解器迭代明细(即你示例中包含iter、objective、inf_pr等指标的内点法迭代表) # 若你的问题为非连续整数规划不需要该配置 solver.options['nlpi/ipopt/print_level'] = 5 # 可选:输出分支定界过程更多细节(仅整数/混合整数规划需要) solver.options['display/nodeselinfo'] = True solver.options['display/cutinfo'] = True solver.options['display/lpinfo'] = True
注意事项
- 你之前
.sol文件中出现的WARNING: unknown parameter <output_file>是因为传入了AMPL通用的output_file参数,SCIP的AMPL接口不识别该参数,输出日志请使用上述log/file参数 - 高等级输出会额外增加求解耗时,大规模问题可按需调低
display/verblevel等级或者调大display/freq的取值,减少IO开销 - 若直接在命令行调用scipampl,参数写法与上述一致,格式为
scipampl -<参数名> <参数值> 问题文件名.nl
内容的提问来源于stack exchange,提问作者Wilson Mendes
相关产品推荐
相关产品推荐

