我正在使用CPLEX(12.9)及其Python(3.6)API研究混合整数编程的一些高级分支启发式算法。
部分分支决策应基于变量的强分支(SB)得分。
虽然我可以通过API直接查询变量的伪成本分数[1],但似乎没有简单的方法可以得到计算出的SB分数。
因此,我想实现我自己的计算。我发现了一篇旧的论坛帖子,描述了如何使用C-API尽可能高效地实现强分支计算[2]。不幸的是,所描述的方法使用库调用(比如CPXgetcallbacknodelp()),我找不到相应的python方法。你知道吗
这给我留下了三个问题:
- 是否有API调用来获取我错过的SB分数?你知道吗
- 我忽视了Python吗
CPXgetcallbacknodelp()等的包装器。?你知道吗
- 有什么简单的方法可以添加
对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
Tags:
无法通过CPLEX Python API直接访问nodelp。如果使用从HSCallback继承的回调之一,则可以对其调用
solve()
,以此类推您可以做的是(尽管这可能不是很有效)克隆原始问题,在创建回调时将其传递给回调,然后在每个节点上调用Cplex.advanced.strong_branching()。你知道吗
相关问题 更多 >
编程相关推荐