problem.addcboptnode
| problem.addcboptnode | 
  Purpose
 
  Declares an optimal node callback function, called during the branch and bound search, after the LP relaxation has been solved for the current node, and after any internal cuts and heuristics have been applied, but before the Optimizer checks if the current node should be branched. This callback function will be called in addition to any callbacks already added by addcboptnode.
 
  Synopsis
 
 problem.addcboptnode (f_optnode, object, priority)
 feas = f_optnode (my_prob, my_object)
 
 
  Arguments
 
| 
     f_optnode 
     | 
     The callback function which takes three arguments,
     my_prob,
     my_object and
     feas, and has no return value.
     | 
| 
     my_prob 
     | 
     The problem passed to the callback function,
     f_optnode.
     | 
| 
     my_object 
     | 
     The user-defined object passed as
     object when setting up the callback with
     addcboptnode.
     | 
| 
     feas 
     | 
     The feasibility status. If set to a nonzero value by the user, the current node will be declared infeasible.
     | 
| 
     object 
     | 
     A user-defined object to be passed to the callback function,
     f_optnode.
     | 
| 
     priority 
     | 
     An integer that determines the order in which multiple node-optimal callbacks will be invoked. The callback added with a higher priority will be called before a callback with a lower priority. Set to 0 if not required.
     | 
  Example
 
 The following prints the optimal objective value of the node LP relaxations:
 
prob.addcboptnode (nodeOptimal, None, 0)
prob.mipoptimize ("")
 The callback function might resemble:
 
def nodeOptimal (prob, object, feas):
    node = prob.attributes.currentnode
    print ("NodeOptimal: node number", node)
    objval = prob.attributes.lpobjval
    print ("Objective function value =", objval)
  Related topics
 
 problem.removecboptnode,
 problem.addcbinfnode,
 problem.addcbintsol,
 problem.addcbnodecutoff,
 CALLBACKCOUNT_OPTNODE.
 
 
