我正在使用 Cplex 12.8 并尝试求解对其具有严格时间限制的ILP模型,即总求解时间不得超过某个阈值。我对找到可行解决方案的次数感兴趣。我正在使用cplex python API。
我注意到,在某些情况下,这种约束没有得到遵守。
例如,考虑以下Cplex日志。
CPXPARAM_TimeLimit 30
CPXPARAM_Read_DataCheck 1
Tried aggregator 1 time.
MIP Presolve eliminated 71 rows and 0 columns.
MIP Presolve modified 2101 coefficients.
Reduced MIP has 2547 rows, 316485 columns, and 946792 nonzeros.
Reduced MIP has 316485 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 2.37 sec. (985.65 ticks)
Found incumbent of value 661.834300 after 4.66 sec. (2118.41 ticks)
Tried aggregator 1 time.
Reduced MIP has 2547 rows, 316485 columns, and 946792 nonzeros.
Reduced MIP has 316485 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 76.33 sec. (14585.95 ticks)
Root node processing (before b&c):
Real time = 81.22 sec. (16805.06 ticks)
Parallel b&c, 4 threads:
Real time = 0.00 sec. (0.00 ticks)
Sync time (average) = 0.00 sec.
Wait time (average) = 0.00 sec.
------------
Total (root+branch&cut) = 81.22 sec. (16805.06 ticks)
Cplex status= 107
即使求解器确认已设置30秒的时限,但似乎presolve阶段将其忽略,并且仅在之后才考虑时限。
在这种特定情况下,Cplex状态表示已超过时间限制,但存在整数解(documentation)。
第一个解决方案可能是禁用预解决阶段,但是我宁愿保留它,并且如果在预解决的N秒之内没有得到在时间限制内没有整数解决方案返回状态找到整数解。
有没有办法实现这个目标?
答案 0 :(得分:1)
快速浏览模型(感谢传递模型)后,看来symmetry breaking参数的默认行为是罪魁祸首。作为解决问题的方法,如果将参数设置为值<= 2,则应遵守时间限制。请尝试一下。此外,较新版本的CPLEX(当前正在开发中)似乎已经解决了该问题,因此应在将来的CPLEX版本中解决此问题。