|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--ilog.cplex.IloCplex.Callback | +--ilog.cplex.IloCplex.MIPCallback | +--ilog.cplex.IloCplex.ControlCallback | +--ilog.cplex.IloCplex.BranchCallback
This is the base class for user-written callbacks that control branching during the branch-and-cut search.
This callback will be called prior to the creation of the children
of the current node.
It allows you to query how the invoking
instance of IloCplex
is about to create the children,
and gives you the opportunity to override this branch creation.
You can create one or two branches by calling one of the
makeBranch
methods once or twice. It is an error to call
makeBranch
more than twice.
By calling method prune
, you remove the current node from
the search tree. In other words, no subnodes from the current node will
be added to the search tree. Calling both prune
and
makeBranch
in one invocation of a branch callback is an
error and yields unspecified behavior.
If you call neither prune
nor makeBranch
,
the instance of IloCplex
proceeds with its own
branching.
The constructor and methods of this class are protected to make sure that
they are used only to derive a user-written callback class or to
implement the main
method in it.
IloCplex.ControlCallback
Constructor Summary | |
protected |
IloCplex.BranchCallback()
Constructor for user-written branch callbacks. |
Method Summary | |
protected double[] |
getBranches(ilog.concert.IloNumVar[][] vars,
double[][] bounds,
IloCplex.BranchDirection[][] dirs)
Queries the branches IloCplex would create at the current
node if not overridden by the invoking callback. |
protected IloCplex.BranchType |
getBranchType()
Returns the type of branching IloCplex is going to do at
the current node unless overridden by the invoking callback. |
protected int |
getNbranches()
Returns the number of branches IloCplex is going to create
at the current node unless overridden by the invoking callback. |
protected IloCplex.NodeId |
getNodeId()
Returns the IloCplex.NodeId of the current node. |
protected boolean |
isIntegerFeasible()
Returns true if the current node solution is considered to
be integer feasible and thus potentially eligible as a new incumbent. |
protected IloCplex.NodeId |
makeBranch(ilog.concert.IloConstraint[] cuts,
double objestimate)
Creates a child node for the current node. |
protected IloCplex.NodeId |
makeBranch(ilog.concert.IloConstraint[] cuts,
double objestimate,
java.lang.Object data)
Creates a child node for the current node. |
protected IloCplex.NodeId |
makeBranch(ilog.concert.IloNumVar[] vars,
double[] bounds,
IloCplex.BranchDirection[] dirs,
double objestimate)
Creates a child node for the current node. |
protected IloCplex.NodeId |
makeBranch(ilog.concert.IloNumVar[] vars,
double[] bounds,
IloCplex.BranchDirection[] dirs,
double objestimate,
java.lang.Object data)
Creates a child node for the current node. |
protected IloCplex.NodeId |
makeBranch(ilog.concert.IloNumVar var,
double bound,
IloCplex.BranchDirection dir,
double objestimate)
Creates a child node for the current node. |
protected IloCplex.NodeId |
makeBranch(ilog.concert.IloNumVar var,
double bound,
IloCplex.BranchDirection dir,
double objestimate,
java.lang.Object data)
Creates a child node for the current node. |
protected IloCplex.NodeId |
makeBranch(ilog.concert.IloRange rng,
double objestimate)
Creates a child node for the current node. |
protected IloCplex.NodeId |
makeBranch(ilog.concert.IloRange rng,
double objestimate,
java.lang.Object data)
Creates a child node for the current node. |
protected void |
prune()
Instructs the IloCplex branch-and-cut search not to create any child nodes for the current node. |
Methods inherited from class ilog.cplex.IloCplex.ControlCallback |
getDownPseudoCost, getFeasibilities, getFeasibilities, getFeasibility, getLB, getLBs, getLBs, getNodeData, getObjValue, getSlack, getSlacks, getSlacks, getSOSFeasibility, getSOSFeasibility, getUB, getUBs, getUBs, getUpPseudoCost, getValue, getValue, getValues, getValues |
Methods inherited from class ilog.cplex.IloCplex.Callback |
abort, getModel, getNcols, getNQCs, getNrows, main |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
protected IloCplex.BranchCallback()
IloCplex.BranchCallback
objects directly.
Method Detail |
protected IloCplex.NodeId getNodeId() throws IloException
IloCplex.NodeId
of the current node.
IloCplex.NodeId
of the current node.
IloException
protected int getNbranches()
IloCplex
is going to create
at the current node unless overridden by the invoking callback.
IloCplex
is going to create
at the current node.protected IloCplex.BranchType getBranchType()
IloCplex
is going to do at
the current node unless overridden by the invoking callback.
IloCplex
is going to do at
the current node.protected double[] getBranches(ilog.concert.IloNumVar[][] vars, double[][] bounds, IloCplex.BranchDirection[][] dirs) throws IloException
IloCplex
would create at the current
node if not overridden by the invoking callback. The returned branch
will be performed if the callback does not call the method
makeBranch
or prune
.
vars
- An array of length at least getNbranches
of arrays. Upon completion, vars[i]
will contain the list of variables whose bounds will
be changed in child i
of the current node.bounds
- An array of length at least getNbranches
of arrays. Upon completion, bounds[i]
will contain the list of new bounds used for
child i
.
One bound of variable
vars[i][j]
will be set to
bounds[i][j]
for all possible
pairs i, j
.dirs
- An array of length at least getNbranches
of arrays. Upon completion of this method
dirs[i] will contain the list of branch
directions used for child i
. If
dirs[i][j]
is
IloCplex.BranchDirection.Up
the lower
bound of variable vars[i][j]
will be set
to bounds[i][j]
for all possible pairs
i, j
.
Similarly, if dirs[i][j]
is IloCplex.BranchDirection.Down
the upper
bound of variable vars[i][j]
will be set
to bounds[i][j]
for all possible pairs
i, j
.
IloException
protected boolean isIntegerFeasible() throws IloException
true
if the current node solution is considered to
be integer feasible and thus potentially eligible as a new incumbent.
Note that in this case, getNbranches
returns
0
.
true
if the current node solution is integer
feasible.
IloException
protected IloCplex.NodeId makeBranch(ilog.concert.IloNumVar[] vars, double[] bounds, IloCplex.BranchDirection[] dirs, double objestimate) throws IloException
makeBranch
methods can be called zero, one, or two
times. Each time one of the makeBranch
methods is called
a child node of the current node is created, thereby overriding the
branch decision taken by the invoking IloCplex
object.
It is an error to call one of the makeBranch
methods
more than twice. If no makeBranch
method is called and
the method prune
is not called as well, the search is
continued with the branching decision taken by the invoking
IloCplex
object.
Each call specifies a branch; in other words, it instructs the invoking
IloCplex
optimizer how to create a subnode from the
current node.
With this method this is done by specifying new, tighter bounds for a
set of variables.
The parameter objestimate
provides an estimate of the
resulting optimal objective value for the subnode specified by this
branch. The invoking instance of IloCplex
may use this
estimate to select nodes to process. A poor estimate will
not influence the correctness of the solution, but it may influence
performance. Using the objective value of the current node is usually a
safe choice.
vars
- The array of variables for which new bounds will be
set in the branch.bounds
- The array of new bounds for the variables
corresponding to the variables in vars
.dirs
- The array of branching directions for the variables in
vars
. Setting dirs[j]
to
IloCplex.BranchDirection.Up
specifies that the lower bound of variable
vars[j]
is to be set to
bounds[j]
. Setting dirs[j]
to IloCplex.BranchDirection.Down
specifies that the upper bound of variable
vars[j]
is to be set to
bounds[j]
.objestimate
- An estimate of the objective value at the subnode
specified by this branch.
IloCplex.NodeId
of the created child node.
IloException
protected IloCplex.NodeId makeBranch(ilog.concert.IloNumVar[] vars, double[] bounds, IloCplex.BranchDirection[] dirs, double objestimate, java.lang.Object data) throws IloException
makeBranch
methods can be called zero, one or two
times. Each time one of the makeBranch
methods is called
a child node of the current node is created, thereby overriding the
branch decision taken by the invoking IloCplex
object.
It is an error to call one of the makeBranch
methods
more than twice. If no makeBranch
method is called and
the method prune
is not called as well, the search is
continued with the branching decision taken by the invoking
IloCplex
object.
Each call specifies a branch; in other words, it instructs the invoking
IloCplex
optimizer how to create a subnode from the
current node.
With this method this is done by specifying new, tighter bounds for a
set of variables.
The parameter objestimate
provides an estimate of the
resulting optimal objective value for the subnode specified by this
branch. The invoking instance of IloCplex
may use this
estimate to select nodes to process. A poor estimate will
not influence the correctness of the solution, but it may influence
performance. Using the objective value of the current node is usually a
safe choice.
vars
- The array of variables for which new bounds will be
set in the branch.bounds
- The array of new bounds for the variables
corresponding to the variables in vars
.dirs
- The array of branching directions for the variables in
vars
. Setting dirs[j]
to
IloCplex.BranchDirection.Up
specifies that the lower bound of variable
vars[j]
is to be set to
bounds[j]
. Setting dirs[j]
to IloCplex.BranchDirection.Down
specifies that the upper bound of variable
vars[j]
is to be set to
bounds[j]
.objestimate
- An estimate of the objective value at the subnode
specified by this branch.data
- A user object that will be assigned to the newly
created node. This object can later be queried
from other callbacks with the method
getNodeData
.
IloCplex.NodeId
of the created child node.
IloException
protected IloCplex.NodeId makeBranch(ilog.concert.IloNumVar var, double bound, IloCplex.BranchDirection dir, double objestimate) throws IloException
makeBranch
methods can be called zero, one or two
times. Each time one of the makeBranch
methods is called
a child node of the current node is created, thereby overriding the
branch decision taken by the invoking IloCplex
object.
It is an error to call one of the makeBranch
methods
more than twice. If no makeBranch
method is called and
the method prune
is not called as well, the search is
continued with the branching decision taken by the invoking
IloCplex
object.
Each call specifies a branch; in other words, it instructs the invoking
IloCplex
optimizer how to create a subnode from the
current node.
With this method this is done by specifying a new, tighter bound for
one variable.
The parameter objestimate
provides an estimate of the
resulting optimal objective value for the subnode specified by this
branch. The invoking instance of IloCplex
may use this
estimate to select nodes to process. A poor estimate will
not influence the correctness of the solution, but it may influence
performance. Using the objective value of the current node is usually a
safe choice.
var
- The variable for which a new bounds will be
set in the branch.bound
- The new bound for variable var
.dir
- The branching direction for var
.
Setting dir
to
IloCplex.BranchDirection.Up
specifies that the lower bound of variable
var
is to be set to
bound
. Setting dir
to IloCplex.BranchDirection.Down
specifies that the upper bound of variable
var
is to be set to
bound
.objestimate
- An estimate of the objective value at the subnode
specified by this branch.
IloCplex.NodeId
of the created child node.
IloException
protected IloCplex.NodeId makeBranch(ilog.concert.IloNumVar var, double bound, IloCplex.BranchDirection dir, double objestimate, java.lang.Object data) throws IloException
makeBranch
methods can be called zero, one or two
times. Each time one of the makeBranch
methods is called
a child node of the current node is created, thereby overriding the
branch decision taken by the invoking IloCplex
object.
It is an error to call one of the makeBranch
methods
more than twice. If no makeBranch
method is called and
the method prune
is not called as well, the search is
continued with the branching decision taken by the invoking
IloCplex
object.
Each call specifies a branch; in other words, it instructs the invoking
IloCplex
optimizer how to create a subnode from the
current node.
With this method this is done by specifying a new, tighter bound for
one variable.
The parameter objestimate
provides an estimate of the
resulting optimal objective value for the subnode specified by this
branch. The invoking instance of IloCplex
may use this
estimate to select nodes to process. A poor estimate will
not influence the correctness of the solution, but it may influence
performance. Using the objective value of the current node is usually a
safe choice.
var
- The variable for which a new bounds will be
set in the branch.bound
- The new bound for variable var
.dir
- The branching direction for var
.
Setting dir
to
IloCplex.BranchDirection.Up
specifies that the lower bound of variable
var
is to be set to
bound
. Setting dir
to IloCplex.BranchDirection.Down
specifies that the upper bound of variable
var
is to be set to
bound
.objestimate
- An estimate of the objective value at the subnode
specified by this branch.data
- A user object that will be assigned to the newly
created node. This object can later be queried
from other callbacks with the method
getNodeData
.
IloCplex.NodeId
of the created child node.
IloException
protected IloCplex.NodeId makeBranch(ilog.concert.IloConstraint[] cuts, double objestimate) throws IloException
makeBranch
methods can be called zero, one or two
times. Each time one of the makeBranch
methods is called
a child node of the current node is created, thereby overriding the
branch decision taken by the invoking IloCplex
object.
It is an error to call one of the makeBranch
methods
more than twice. If no makeBranch
method is called and
the method prune
is not called as well, the search is
continued with the branching decision taken by the invoking
IloCplex
object.
Each call specifies a branch; in other words, it instructs the invoking
IloCplex
optimizer how to create a subnode from the
current node.
With this method this is done by specifying additional constraints that
are added to the current node in order to define the child node.
The parameter objestimate
provides an estimate of the
resulting optimal objective value for the subnode specified by this
branch. The invoking instance of IloCplex
may use this
estimate to select nodes to process. A poor estimate will
not influence the correctness of the solution, but it may influence
performance. Using the objective value of the current node is usually a
safe choice.
cuts
- The array of constraints that will be added to
the current node in order to define the child node.
All constraints must be linear.objestimate
- An estimate of the objective value at the subnode
specified by this branch.
IloCplex.NodeId
of the created child node.
IloException
protected IloCplex.NodeId makeBranch(ilog.concert.IloConstraint[] cuts, double objestimate, java.lang.Object data) throws IloException
makeBranch
methods can be called zero, one or two
times. Each time one of the makeBranch
methods is called
a child node of the current node is created, thereby overriding the
branch decision taken by the invoking IloCplex
object.
It is an error to call one of the makeBranch
methods
more than twice. If no makeBranch
method is called and
the method prune
is not called as well, the search is
continued with the branching decision taken by the invoking
IloCplex
object.
Each call specifies a branch; in other words, it instructs the invoking
IloCplex
optimizer how to create a subnode from the
current node.
With this method this is done by specifying additional constraints that
will be added to the current node in order to define the child node.
The parameter objestimate
provides an estimate of the
resulting optimal objective value for the subnode specified by this
branch. The invoking instance of IloCplex
may use this
estimate to select nodes to process. A poor estimate will
not influence the correctness of the solution, but it may influence
performance. Using the objective value of the current node is usually a
safe choice.
cuts
- The array of constraints that will be added to
the current node in order to define the child node.
All constraints must be linear.objestimate
- An estimate of the objective value at the subnode
specified by this branch.data
- A user object that will be assigned to the newly
created node. This object can later be queried
from other callbacks with the method
getNodeData
.
IloCplex.NodeId
of the created child node.
IloException
protected IloCplex.NodeId makeBranch(ilog.concert.IloRange rng, double objestimate) throws IloException
makeBranch
methods can be called zero, one or two
times. Each time one of the makeBranch
methods is called
a child node of the current node is created, thereby overriding the
branch decision taken by the invoking IloCplex
object.
It is an error to call one of the makeBranch
methods
more than twice. If no makeBranch
method is called and
the method prune
is not called as well, the search is
continued with the branching decision taken by the invoking
IloCplex
object.
Each call specifies a branch; in other words, it instructs the invoking
IloCplex
optimizer how to create a subnode from the
current node.
With this method this is done by specifying an additional constraint
that needs to be added to the current node in order to define the child
node.
The parameter objestimate
provides an estimate of the
resulting optimal objective value for the subnode specified by this
branch. The invoking instance of IloCplex
may use this
estimate to select nodes to process. A poor estimate will
not influence the correctness of the solution, but it may influence
performance. Using the objective value of the current node is usually a
safe choice.
rng
- The constraint that will be added to
the current node in order to define the child node.
The constraint must be linear.objestimate
- An estimate of the objective value at the subnode
specified by this branch.
IloCplex.NodeId
of the created child node.
IloException
protected IloCplex.NodeId makeBranch(ilog.concert.IloRange rng, double objestimate, java.lang.Object data) throws IloException
makeBranch
methods can be called zero, one or two
times. Each time one of the makeBranch
methods is called
a child node of the current node is created, thereby overriding the
branch decision taken by the invoking IloCplex
object.
It is an error to call one of the makeBranch
methods
more than twice. If no makeBranch
method is called and
the method prune
is not called as well, the search is
continued with the branching decision taken by the invoking
IloCplex
object.
Each call specifies a branch; in other words, it instructs the invoking
IloCplex
optimizer how to create a subnode from the
current node.
With this method this is done by specifying an additional constraint
that will be added to the current node in order to define the child
node.
The parameter objestimate
provides an estimate of the
resulting optimal objective value for the subnode specified by this
branch. The invoking instance of IloCplex
may use this
estimate to select nodes to process. A poor estimate will
not influence the correctness of the solution, but it may influence
performance. Using the objective value of the current node is usually a
safe choice.
rng
- The constraint that will be added to
the current node in order to define the child node.
The constraint must be linear.objestimate
- An estimate of the objective value at the subnode
specified by this branch.data
- A user object that will be assigned to the newly
created node. This object can later be queried
from other callbacks with the method
getNodeData
.
IloCplex.NodeId
of the created child node.
IloException
protected void prune()
prune
and makeBranch
in one
invocation of a branch callback.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |