Cplex: MIP Control Callback Methods
*本文主要记录和分享学习到的知识,算不上原创
*参考文献见链接
本文主要归纳了Cplex的Control callback常用的方法。
目录
NodeCallback
SolveCallback
UserCutCallback
LazyConstraintCallback
HeuristicCallback
BranchCallback
IncumbentCallback
Control CallBack Interface
If you determine that your application needs to seize control, intervene in the search, and redirect the optimizer, then the following control callbacks are available to do so.
The node callback allows you to query and optionally overwrite the next node CPLEX will process during a branch & cut search.
IloCplex.NodeCallback in the Java API
The solve callback allows you to specify and configure the optimizer option to be used for solving the LP at each individual node.
IloCplex.SolveCallback in the Java API
The user cut callback allows you to add problem-specific user-defined cuts at each node.
IloCplex.UserCutCallback in the Java API
The lazy constraint callback allows you to add lazy constraints; that is, constraints that are not evaluated unless they are violated.
IloCplex.LazyConstraintCallback in the Java API
The heuristic callback allows you to implement a heuristic that tries to generate a new incumbent from the solution of the LP relaxation at each node.
IloCplex.HeuristicCallback in the Java API
The branch callback allows you to query and optionally overwrite the way CPLEX will branch at each node.
IloCplex.BranchCallback in the Java API
The incumbent callback allows you to check and optionally reject incumbents found by CPLEX during the search.
IloCplex.IncumbentCallback in the Java API
In Java, there is no way of removing individual callbacks from yourIloCplexorCplexobject. Instead, you remove all callbacks by calling the methodIloCplex.clearCallbacksorCplexClearCallbacks.
Node Callback
getBranchVar(long node) Returns the variable that was branched upon to create the node specified by number node.
getDepth(long node) Returns the depth of the node in the search tree.
getNodeId(long node) Returns the node identifier of the node specified by the node number node.
getNodeNumber(IloCplex.NodeId nodeid) Returns the node number of the node specified by the node identifier.
getObjValue(long node) Returns the objective value of the node specified by the node number.
selectNode(long node) Selects the next node to be processed by its number.
Solve Callback
setStart() Specifies a starting point for the next invocation of the method solve during the current solve callback.
solve() Solves the current node using the default algorithm (IloCplex.Algorithm.Auto).
solve(int alg) Solves the current node using the algorithm alg.
useSolution() Instructs IloCplex to use a solution.
** This method instructs IloCplex to use the solution generated with this callback instead of solving the node itself.
Heuristic Callback
setBounds() Sets the bounds for a set of variables.
setSolution() Sets a solution to be used as the incumbent.
User Cut Callback
add() Adds a linear global cut to the current subproblem.
**This cut must be globally valid. It will not be removed by backtracking or any other means during the search. The cut must also not cut off any integer feasible solution.
addLocal() Adds a linear local cut to the current subproblem.
isAfterCutLoop() Returns True if called after the cut loop, False otherwise.
abortCutLoop() Terminate the cut loop and proceed with branching.
Lazy Constraint Callback
add(IloRange cut) Adds a linear consraint cut as a global lazy constraint to the problem being solved.
** As a lazy constraint, this cut must be globally valid. It will not be removed by backtracking or any other means during the search.
addLocal(IloRange cut) Adds cut as a local lazy constraint to the problem being solved.
isUnboundedNode() This method indicates whether or not the callback was invoked when the LP relaxation is found to be unbounded and the user needs to test whether a lazy constraint cuts off the unbounded direction.
Branch Callback
getBranches() Returns one of the candidate branches at the current node if not overridden by the invoking callback.
getBranchType() Returns the type of the branch at the current node unless overridden by the invoking callback.
getNbranches() Returns the number of branches CPLEX is going to create at the current node unless overridden by the invoking callback.
getNodeId() Returns the node identifier of the current node.
isIntegerFeasible() Returns true if the current node solution is considered to be integer feasible and thus potentially eligible as a new incumbent, but not suitable for branching.
makeBranch() Creates a child node for the current node
prune() Removes the current node from the search tree.
Incumbent Callback
getObjValue() Returns the objective value of the potential incumbent.
reject() Rejects the proposed incumbent solution.
Some other methods
setBounds Sets the bounds for a set of variables.
setSolution Sets a solution to be used as the incumbent.
Abort Aborts current optimization.
GetBestObjValue This method returns a bound on the optimal solution value of the active problem at the moment the callback is called.
GetCplexStatus Returns the Cplex.CplexStatus for the current node.
GetCplexTime This method returns a time stamp, useful in measuring elapsed time in seconds. elapsed time=end time-start time
GetCutoff Returns the cutoff for the objective value when nodes are being solved during branch-and-cut search.
GetEndTime This method returns a time stamp specifying when the time limit will occur. remaining time=getEndTime-getCplexTime
GetIncumbentObjValue Returns the objective value of the current best integer solution at the moment the callback is called. (incumbent: best integer feasible solution)
GetModel Returns the model being solved when the invoking callback is called, that is the active model.
GetNiterations Returns the total number of iterations for solving node relaxations during the current optimization.
GetNnodes Returns the number of nodes processed so far in the active branch-and-cut search.
GetNremainingNodes Returns the number of nodes remaining to be processed, or, equivalently, the number of active nodes in the tree.
GetObjValue Returns the objective function value of the solution of the continuous relaxation of the current node.
GetStartTime This method returns a time stamp specifying when the solving process was started.
GetStatus Returns the solution status for the current node.
HasIncumbent Returns true if an incumbent solution has been found when the callback is called.
Main The method to be implemented by user callback classes.
Solve Solves the current node relaxation using the default algorithm.
Cplex: MIP Control Callback Methods的更多相关文章
- Cplex: MIP Control Callback
*本文主要记录和分享学习到的知识,算不上原创 *参考文献见链接 之前,我们有简单提到Cplex中的MIP Callback Interface,包括了Informational callback, q ...
- Cplex: MIP Callback Interface
*本文主要记录和分享学习到的知识,算不上原创 *参考文献见链接 这篇文章主要记录一些Cplex的Callback的使用方法,采用Java语言. https://www.ibm.com/support/ ...
- Tutorial: WPF User Control for AX2012
原作者: https://community.dynamics.com/ax/b/goshoom/archive/2011/10/06/tutorial-wpf-user-control-for-ax ...
- Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系
1.Surface Surface extends Objectimplements Parcelable java.lang.Object ↳ android.view.Surface Cla ...
- 【Leafletjs】5.L.Control 自定义一个Control
L.Control 所有leaflet控制的基础类.继承自IControl接口. 你可以这样添加控件: control.addTo(map); // the same as map.addContro ...
- Overview of Form Control Types [AX 2012]
Overview of Form Control Types [AX 2012] Other Versions 0 out of 1 rated this helpful - Rate this to ...
- A Complete ActiveX Web Control Tutorial
A Complete ActiveX Web Control Tutorial From: https://www.codeproject.com/Articles/14533/A-Complete- ...
- Spring Bean Life Cycle Methods – InitializingBean, DisposableBean, @PostConstruct, @PreDestroy and *Aware interfaces
Spring Beans are the most important part of any Spring application. Spring ApplicationContext is res ...
- java多线程系类:JUC线程池:03之线程池原理(二)(转)
概要 在前面一章"Java多线程系列--"JUC线程池"02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包 ...
随机推荐
- 持续集成~Jenkins构建GitHub项目的实现
有了前两讲的基础,这回我们就可以把github上的项目做到CI(jenkins)里了,让它自动去集成部署,持续集成~Jenkins里的NuGet和MSBuild插件,持续集成~Jenkins里的pow ...
- JAVA基础之网络通信协议--TCP与UDP
个人理解: 了解区分UDP与TCP的不同,正常情况都是两者结合的使用模式!为了更好的传输,经常会开多线程进行传输的! 一.网络通信协议: 1.TCP/IP协议: 四层:应用层.传输层.网络层和链路层: ...
- cocos2d-x入门学习篇;切换场景
手机游戏开发最近很火爆,鉴于一直在学习c++,看起来上手就比较快了.这篇文章来自皂荚花 cocos2d-x技术,我把我的想法分享给大家. 首先来看一段代码: CCScene* HelloWorld:: ...
- Elasticsearch-基本操作2
Elasticsearch版本:6.0 为了避免并发修改的冲突问题,数据库中,经常用悲观锁和乐观锁来控制并发问题,而Elasticsearch使用乐观锁.如果源数据在读写过程中被修改,更新将失败,应用 ...
- 宿主机Windows访问虚拟机Linux文件(一)
如果用户使用windows操作系统,但是在虚拟机下配置Linux内核操作操作系统,往往需要实现通过宿主机Windows操作系统访问Linux内核操作系统中资源.本次实验实现的是宿主机windows 1 ...
- linux命令之文本查看
vi掌握练习: 英文文档,相同的单词复制粘贴光标移动编辑等操作: cat:显示文件所有内容,小文件查看时使用. 缺点:文件大时不方便查看,文件很大时,会抢占系统资源,会出现命令崩溃. [zyj@loc ...
- selenium-Python之上传文件
对于web 页面的上传功能实现一般有一下两种方式 普通上传:普通的附件上传是将本地文件的路径作为一个值放在input标签中,通过form表单将这个值提交给服务器 插件上传:一般是指基于flash.ja ...
- Python-OpenCV中图像合并显示
在图像处理中,我们通常需要将原图像与处理后的图像放在同一个窗口显示,这样便于比较. 首先,需要介绍Numpy中的两个函数:hstack().vstack(). 函数原型:hstack(tup) ,参数 ...
- CSS选择器基本介绍
一.web标准 所谓的web标准就是用来衡量我们当前的网页书写是否规范的一系列要求,这个标准是由W3C组织制定,在web标准中具体的要求就是结构.样式.行为三者相分离 结构:通过HTML标签来搭建的网 ...
- 2018.3.16 win 关闭自动更新代码
新建一个文本文件修改后缀名为 .bat 格式 net stop wuauserv sc config wuauserv start=disabled shutdown -r -t 1