| Overview | Group | Tree | Graph | Index | Concepts |

IloCplex::SearchLimitI is the base class for implementing
user-defined search limits. To do so, you must subclass
IloCplex::SearchLimitI and implement methods
check and duplicateLimit. You may optionally
implement method init. The method check must
return IloTrue when the limit is reached and
IloFalse otherwise. The method duplicateLimit
must return a copy of the invoking object to be used in parallel search.
Whenever method check is called by IloCplex,
the search limit object is first initialized to a node, referred to as the
current node. Information about the current node can be queried by calling
the get methods of class
IloCplex::SearchLimitI.
Search limits are applied to subtrees defined by goals with method
IloCplex::LimitSearch. For example:
IloGoal limitGoal = IloCplex::LimitSearch(cplex, goal1, limit);
creates a goal limitGoal which branches as specified by
goal1 until the limit specified by limit is
reached. Only the nodes created by goal1 (or any of the goals
created by it later) are subjected to the search limit. For example, if you
created two branches with the goal
OrGoal(limitGoal, goal2);
only the subtree defined by goal1 is subject to the search
limit limit; the subtree defined by goal2 is
not.
The ability to specify search limits for subtrees means that it is
possible for certain branches to be subject to more than one search limit.
Nodes with multiple search limits attached to them are processed only if
none of the search limits has been reached, or, in other words, if all the
search limits return IloFalse when method check
is called by IloCplex.
Each time CPLEX uses a search limit, it is duplicated first. If you use
the same instance of your limit in different branches, it will be duplicated
first, the copy will be passed to the corresponding node, and
init method will be called on the copy.
See Also:
IloCplex, IloCplex::SearchLimit
| Constructor and Destructor Summary | |
|---|---|
public | SearchLimitI() |
public | ~SearchLimitI() |
| Method Summary | |
|---|---|
public virtual IloBool | check() |
public virtual SearchLimitI * | duplicateLimit() |
public virtual void | init() |
| Constructor and Destructor Detail |
|---|
The default constructor creates a new instance of
SearchLimitI.
The virtual destructor allows you to manage you own data inside a search limit object and to delete the data when the limit is deleted.
| Method Detail |
|---|
This method is called for every node subjected to the invoking
search limit before evaluating the node. If it returns
IloTrue,
the node is pruned, or, equivalently, the search below that node is
discontinued. Thus, users implementing search limits must implement this
method to return IloTrue
if the search limit has been reached
and IloFalse otherwise.
This method is called internally to duplicate the current search limit. Users must implement it in a subclass to return a copy of the invoking object.
This method is called by IloCplex right before the first
time check is called for a node and allows you to initialize
the limit based on that node.