python - CPLEX:通过 python API 访问强分支值
问题描述
我正在通过其 Python (3.6) API 使用 CPLEX (12.9) 为混合整数编程研究一些高级分支启发式算法。部分分支决策应基于变量的强分支 (SB) 分数。虽然我可以直接通过 API [1] 查询变量的伪成本分数,但似乎没有简单的方法来计算 SB 分数。因此我想自己实现计算。我找到了一篇旧论坛帖子,描述了如何使用 C-API 尽可能高效地实现强分支计算 [2]。不幸的是,所描述的方法使用了库调用(如 CPXgetcallbacknodelp()),我找不到相应的 python 方法。
这给我留下了三个问题:
- 是否有 API 调用来获取我错过的 SB 分数?
- 我是否忽略了 CPXgetcallbacknodelp() 等的 python 包装器?
- 是否有一种简单的方法可以将包装器添加到对 cplex python 包装器的不支持的 C-API 调用(可能通过扩展 SWIG 生成的 python 文件)?
解决方案
无法通过 CPLEX Python API直接访问 nodelp。如果您使用从HSCallback继承的回调之一,您可以调用solve()
它,等等。
您可以做的(尽管这可能效率不高)是克隆原始问题,在创建它时将其传递给回调,然后在每个节点调用Cplex.advanced.strong_branching()。
推荐阅读
- python - Python 脚本服务在 ID 为 7039 的事件日志中生成警报
- angular - 具有 NGXS Facades 模式的动态 @Selector
- css - 使用 @mixin 在 Angular 上实现 RTL 支持
- unicode - 将任意 unicode 字母数字字符映射到它们的 ascii 等价物
- spring-boot - spring-boot 仅在调用操作时创建 bean
- python - row = line.rstrip("\n").split(",") 是什么意思
- java - Netbeans Ascii unicode char 不工作 base64 编码解码
- html - 滚动时固定标题下的阴影
- python - Python中多处理中的Queue和JoinableQueue有什么区别?
- python - 如何保存 CSV 文件的串联输出