在CPLEX中,参数文件适合保存线程数、时间限制、MIP间隙、预求解、搜索策略等求解设置,后续可以在其他会话或模型中重新调用。处理“CPLEX参数文件怎么保存,CPLEX加载参数文件后为什么没有生效”时,不能只确认.prm文件已经存在,还要核对文件中实际保存了哪些非默认参数、加载后当前值是否改变,以及求解前有没有其他设置再次覆盖这些参数。CPLEX的PRM文件主要记录与默认值不同的参数设置。
一、CPLEX参数文件应怎样保存
CPLEX参数文件的扩展名为.prm。保存之前,可以先查看当前有哪些参数已经偏离默认值,避免生成文件后才发现目标设置没有写进去。
1、先确认需要保存的参数
①在Interactive Optimizer中完成参数设置,例如修改时间限制、线程数或MIP间隙。
②执行下面的命令:
display settings changed
③查看输出结果,确认需要保存的参数已经出现。
④如果需要检查全部当前设置,可以执行:
display settings all
display settings changed用于显示与默认值不同的参数;如果执行set defaults,则会将参数重新恢复为默认状态。
2、把当前设置保存为PRM文件
Interactive Optimizer可以直接根据当前设置生成参数文件。
①确认目标参数已经设置完成。
②执行:
write myparams.prm
③打开保存目录,检查是否已经生成对应的.prm文件。
④使用文本编辑器打开文件,确认需要的参数名称和值已经写入。
这种方式可以避免手工编写参数名称时出现格式错误。IBM文档也建议先在Interactive Optimizer中设置参数,再通过write文件名.prm生成参数文件。
3、通过API保存参数文件
使用Python或C API开发求解程序时,也可以直接保存当前参数。
①Python API可以使用:
cpx.parameters.write("myparams.prm")
②后续需要加载时使用:
cpx.parameters.read("myparams.prm")
③使用C API时,可通过CPXwriteparam保存当前非默认参数,通过CPXreadcopyparam读取参数文件。
Python API的参数组提供read()和write()方法;C API写出的PRM文件同样只包含当前非默认设置。
二、CPLEX参数文件加载后没有生效应怎样处理
参数文件已经成功打开,但运行时间、线程数或求解行为没有变化时,应先检查参数值本身,而不能仅凭求解结果判断文件有没有生效。
1、加载后立即核对参数
①在Interactive Optimizer中使用read myparams.prm读取参数文件。.prm属于CPLEX能够识别的非默认参数文件格式。
②读取完成后立即执行:
display settings changed
③对照PRM文件中的参数和值,确认两边是否一致。
④Python程序中可以使用对应参数的get()查看当前值,或通过get_changed检查所有非默认参数。
如果这里已经显示正确,说明加载动作本身基本正常,应继续检查后面的程序流程。
2、检查PRM文件有没有格式或数值错误
CPLEX读取PRM文件时会先检查整个文件。如果存在缺失值、非法值等错误,不会只跳过错误的一项再继续应用其他内容,而是不会修改当前参数。
①查看加载参数时的日志和错误提示。
②重点检查手工添加或修改过的参数。
③确认整数参数、浮点参数和字符串参数使用了正确格式。
④修正文件后重新加载,再执行一次参数检查。
如果文件中同一个参数重复出现,CPLEX采用最后一项设置,因此还要检查是否存在后面的重复值把前面的正确设置覆盖。
3、检查加载后是否再次修改参数
参数文件中的值不是永久锁定的,程序后面仍然可以重新设置。
①检查读取PRM之后是否还有set命令或参数设置代码。
②检查是否执行了set defaults、reset()或统一初始化参数的函数。
③找到同一个参数被多次设置的位置,只保留最终需要的值。
④在真正执行求解之前,再输出一次关键参数。
例如PRM中将线程数设为4,加载之后程序又把线程参数改回自动模式,最终求解自然不会继续使用4线程。
4、检查是否读入了不同的CPLEX实例
通过Python、C++或Java编程时,还要注意参数作用于具体的CPLEX求解对象。
①确认执行参数读取的对象和最终执行求解的对象是否相同。
②检查函数或循环中有没有重新创建求解器实例。
③如果重新建立实例,需要重新加载PRM或重新设置参数。
④在调用求解前读取时间限制、线程数等参数进行最终确认。
三、CPLEX参数文件加载后应怎样验证
参数显示正确以后,还应通过容易观察的设置做一次实际验证,因为某些参数只针对特定模型或求解阶段发挥作用。
1、先验证明显参数
①建立一份测试PRM,将时间限制设置为容易观察的数值。
②加载文件并运行同一个较耗时模型。
③查看求解日志和停止条件是否与设置一致。
④确认基础参数有效后,再测试MIP策略、预求解等参数。
2、区分不同参数文件版本
①不同模型或测试方案分别保存PRM文件。
②文件名中加入模型名称、用途或版本信息。
③修改参数后重新执行display settings changed再保存。
④升级CPLEX版本后重新检查旧PRM文件。参数文件包含版本信息时,版本与当前产品不一致会产生警告。
总结
处理“CPLEX参数文件怎么保存,CPLEX加载参数文件后为什么没有生效”时,应先确认当前非默认参数,再将设置保存为.prm文件。重新加载后,首先检查参数当前值,而不是直接根据求解速度判断;如果没有生效,再依次排查文件格式、非法参数、重复项、后续参数覆盖和CPLEX实例是否一致。最后使用时间限制、线程数等容易观察的设置验证实际效果,可以更快确定问题发生在哪个环节。如需进一步了解CPLEX参数文件保存、加载及加载后未生效的排查与验证方法,欢迎联系咨询。
