CPLEX通用回调,用于分割的节点LP

问题描述 投票:0回答:1

我正在通过CPLEX 12.10的C API使用通用回调框架来设置分支剪切算法。

在每个节点处,分离问题基于当前节点LP,并检测本地有效切割,如果违反,则为当前节点的每个子节点添加切割。

据我所知,在通用回调中不容易获得当前节点LP的信息。但是,我想使用为父节点生成的切割,以在子节点中生成更好的切割。

是否有必要记录所有节点上生成的切割,或者可以使用CPLEX功能以某种方式传递此信息?如果唯一的可能性是跟踪所有生成的剪切,如果CPLEX从不同线程和不同节点中调用回调,那么如何使簿记成为线程安全的?

c callback mathematical-optimization cplex branch-and-bound
1个回答
0
投票

[无法让CPLEX为您跟踪此信息。您必须自己动手。

一种方法是实现一个字典,该字典将节点的唯一ID(请参见CPXCALLBACKINFO_NODEUID)映射到要与该节点一起存储的信息。关于线程安全,您只需要保护对该字典的访问即可。为此,请使用锁(例如,在非Windows上为pthread_mutex,在Windows上为CRITICAL_SECTION),然后对该词典进行锁定和查找或更新操作。

© www.soinside.com 2019 - 2024. All rights reserved.