DoCPLEX一次部分解决LP问题

问题描述

我正在研究具有800K约束的线性规划问题,该问题需要20分钟才能解决,但是如果我半小时解决问题,则只需1分钟。在DoCPLEX中有一种方法可以解决部分视域问题,然后使用该解决方案来解决另一半问题,而无需使用for循环

解决方法

三个建议:

  1. 将问题作为LP或SAV加载到cplex交互式优化器中并运行display problem stats。这可能显示(或排除)精度问题(病态问题)。还会输出非零数

  2. 将datacheck参数设置为2,这可能会检测到数据中的数字问题

  3. 您是否尝试过不同的LP算法?使用lpmethod参数,您可以尝试使用原始算法,对偶算法或障碍算法,以查看是否可以更快地解决您的问题。 参考: https://www.ibm.com/support/knowledgecenter/SSSA5P_12.10.0/ilog.odms.cplex.help/CPLEX/Parameters/topics/LPMETHOD.html

在DOcplex中:

model.parameters.datacheck = 2
model.parameters.lpmethod = 4 # for barrier
,

从您的答案中,我可以想到以下几点:

  • 如果您使用的是纯LP(是真的吗?),我认为舍入数字没有意义(但是是的,这对MIP很有帮助,请尝试舍入小数部分小于1e-7的舍入系数:4.0000001-> 4)
  • [li] 1e + 14条件表明存在严重的建模问题:常见的来源是将不同的目标与系数混合在一起。您是否尝试过多目标以避免这种情况? 另一个来源是big_M公式,您应该更喜欢指标约束。如果您不在这两种情况下,请尝试将数据重新规格化以保持较小的条件范围...

最后,您可以尝试将markowitz容差设置为0.99,以在单工分解中增加额外的细节,但是行为可能因一个数据集而异...