首页 > 解决方案 > CPLEX:通过 python API 访问强分支值

问题描述

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

这给我留下了三个问题:

  1. 是否有 API 调用来获取我错过的 SB 分数?
  2. 我是否忽略了 CPXgetcallbacknodelp() 等的 python 包装器?
  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

标签: pythoncallbackcplex

解决方案


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

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


推荐阅读