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之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包 ...
随机推荐
- UIScrollView使用stoboard自动布局
使用stoboard布局 scrollView 是有点麻烦的,首先我们往往约束好一个 scrollView 然后在添加子控件,此时都会报错,原因是, scrollView必须确定滚动范围 然后在使用V ...
- jquery中使用each遍历。
一直知道each这个方法,但是就是不太明白到底怎么用,今天两个地方都使用了each.真的太高兴了,太有成就感了. 东钿微信平台订单列表页 全部订单之前是按照产调,评估,借款的顺序依次排下来,华总说要按 ...
- 关于如何将html中的表格下载成csv格式的方法
今天在网上看了很多方法,自己还是慢慢探索写出了最终效果 简单代码如下: <!DOCTYPE html> <html> <head> <meta content ...
- 如何正确配置 Nginx + PHP ???
本文转自如何正确配置 Nginx + PHP,如有侵权,请联系管理员及时删除!
- Lua与游戏的不解之缘
本文转载自秦元培博客:blog.csdn.net/qinyuanpei 一.什么是Lua? Lua 是一个小巧的脚本语言,巴西里约热内卢天主教大学里的一个研究小组于1993年开发,其设计目的是为了嵌入 ...
- C#的位运算
链接地址: http://www.cnblogs.com/NetBelieve/archive/2012/07/30/2615006.html
- HDU 4284 Travel (Folyd预处理+dfs暴搜)
题意:给你一些N个点,M条边,走每条边要花费金钱,然后给出其中必须访问的点,在这些点可以打工,但是需要先拿到证书,只可以打一次,也可以选择不打工之直接经过它.一个人从1号点出发,给出初始金钱,问你能不 ...
- VPS Linux SSH 客户端断开后保持进程继续运行配置方法——screen
前言 在Linux中,我们经常会做一些关于数据的操作(备份.传输.压缩等)或是要在后台持续的运行一些程序.由于,工作的数据量很大或者工作要持续很长的时间,我们就必须保证这个终端的启动,一旦终端关闭了, ...
- 棋盘问题——POJ1321
棋盘问题——深度优先搜索 题目描述: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘 ...
- 使用控件的Tag属性传递信息
实现效果: 知识运用: Control类的Tag属性 //获取或设置包含 有关控件的数据的对象 public object Tag {get;set;} 实现代码: private void Form ...