CPLEX:通过python API访问强分支值

时间:2019-04-29 16:14:23

标签: python callback cplex

我正在研究一些高级的分支启发法,以通过其Python(3.6)API使用CPLEX(12.9)进行混合整数编程。 分支决策的一部分应基于变量的强分支(SB)分数。 虽然我可以直接通过API [1]查询变量的伪成本得分,但似乎没有简单的方法来获取计算得出的SB得分。 因此,我想自己执行计算。我在论坛上发了一个老帖子,描述了如何使用C-API尽可能有效地实现强大的分支计算[2]。不幸的是,所描述的方法使用了库调用(例如CPXgetcallbacknodelp()),而我找不到对应的python方法。

这给我留下了三个问题:

  1. 是否有API调用来获取我错过的SB分数?
  2. 我是否忽略了python CPXgetcallbacknodelp()等的包装器??
  3. 有没有简单的添加方法 包装器到对cplex python包装器的不支持的C-API调用 (也许通过扩展SWIG生成的python文件)?

[1] https://www.ibm.com/support/knowledgecenter/SSSA5P_12.9.0/ilog.odms.cplex.help/refpythoncplex/html/cplex.callbacks.ControlCallback-class.html

[2] https://www.ibm.com/developerworks/community/forums/html/threadTopic?id=77777777-0000-0000-0000-000014479565&ps=25

1 个答案:

答案 0 :(得分:3)

无法通过CPLEX Python API来直接访问nodelp。如果您使用从HSCallback继承的回调之一,则可以在其上调用solve(),等等。

您可以做的(虽然可能并不高效)是克隆原始问题,在创建它时将其传递给回调,然后在每个节点调用Cplex.advanced.strong_branching()