Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

SbbFullNodeInfo Class Reference

Holds complete information for recreating a subproblem. More...

#include <SbbNode.hpp>

Inheritance diagram for SbbFullNodeInfo:

SbbNodeInfo List of all members.

Public Member Functions

virtual void applyToModel (SbbModel *model, CoinWarmStartBasis *&basis, SbbCountRowCut **addCuts, int &currentNumberCuts) const
 Modify model according to information at node.

virtual SbbNodeInfobuildRowBasis (CoinWarmStartBasis &basis) const
 SbbFullNodeInfo (SbbModel *model, int numberRowsAtContinuous)
 SbbFullNodeInfo (const SbbFullNodeInfo &)
virtual SbbNodeInfoclone () const
 Clone.


Protected Attributes

CoinWarmStartBasisbasis_
int numberIntegers_
double * lower_
double * upper_

Private Member Functions

SbbFullNodeInfooperator= (const SbbFullNodeInfo &rhs)
 Illegal Assignment operator.


Detailed Description

Holds complete information for recreating a subproblem.

A SbbFullNodeInfo object contains all necessary information (bounds, basis, and cuts) required to recreate a subproblem.

Todo:
While there's no explicit statement, the code often makes the implicit assumption that an SbbFullNodeInfo structure will appear only at the root node of the search tree. Things will break if this assumption is violated.

Definition at line 232 of file SbbNode.hpp.


Constructor & Destructor Documentation

SbbFullNodeInfo::SbbFullNodeInfo SbbModel model,
int  numberRowsAtContinuous
 

Constructor from continuous or satisfied

Definition at line 368 of file SbbNode.cpp.

References basis_, OsiSolverInterface::getColLower(), OsiSolverInterface::getColUpper(), SbbModel::getNumCols(), OsiSolverInterface::getWarmStart(), SbbModel::numberIntegers(), and SbbModel::solver().

Referenced by clone().

00369                                                              :
00370   SbbNodeInfo()
00371 {
00372   OsiSolverInterface * solver = model->solver();
00373   numberRows_ = numberRowsAtContinuous;
00374   numberIntegers_ = model->numberIntegers();
00375   int numberColumns = model->getNumCols();
00376   lower_ = new double [numberColumns];
00377   upper_ = new double [numberColumns];
00378   const double * lower = solver->getColLower();
00379   const double * upper = solver->getColUpper();
00380   int i;
00381 
00382   for (i=0;i<numberColumns;i++) {
00383     lower_[i]=lower[i];
00384     upper_[i]=upper[i];
00385   }
00386 
00387   basis_ =  dynamic_cast<CoinWarmStartBasis*>(solver->getWarmStart());
00388 }


Member Function Documentation

void SbbFullNodeInfo::applyToModel SbbModel model,
CoinWarmStartBasis *&  basis,
SbbCountRowCut **  addCuts,
int &  currentNumberCuts
const [virtual]
 

Modify model according to information at node.

The routine modifies the model according to bound information at node, creates a new basis according to information at node, but with the size passed in through basis, and adds any cuts to the addCuts array.

Note:
The basis passed in via basis is solely a vehicle for passing in the desired basis size. It will be deleted and a new basis returned.

Implements SbbNodeInfo.

Definition at line 437 of file SbbNode.cpp.

References basis_, CoinWarmStartBasis::clone(), CoinWarmStartBasis::getNumArtificial(), SbbModel::getNumCols(), CoinWarmStartBasis::resize(), OsiSolverInterface::setColBounds(), and SbbModel::solver().

00442 { OsiSolverInterface *solver = model->solver() ;
00443 
00444   // branch - do bounds
00445   int i;
00446   int numberColumns = model->getNumCols();
00447   for (i=0;i<numberColumns;i++) {
00448     solver->setColBounds(i,lower_[i],upper_[i]);
00449   }
00450   // move basis - but make sure size stays
00451   int numberRows = basis->getNumArtificial();
00452   delete basis ;
00453   basis = dynamic_cast<CoinWarmStartBasis *>(basis_->clone()) ;
00454   basis->resize(numberRows,numberColumns);
00455   for (i=0;i<numberCuts_;i++) 
00456     addCuts[currentNumberCuts+i]= cuts_[i];
00457   currentNumberCuts += numberCuts_;
00458   assert(!parent_);
00459   return ;
00460 }

SbbNodeInfo * SbbFullNodeInfo::buildRowBasis CoinWarmStartBasis basis  )  const [virtual]
 

Builds up row basis backwards (until original model). Returns NULL or previous one to apply . Depends on Free being 0 and impossible for cuts

Implements SbbNodeInfo.

Definition at line 467 of file SbbNode.cpp.

References basis_, CoinWarmStartBasis::getArtificialStatus(), and CoinWarmStartBasis::getNumArtificial().

00468 {
00469   const unsigned int * saved = 
00470     (const unsigned int *) basis_->getArtificialStatus();
00471   unsigned int * now = 
00472     (unsigned int *) basis.getArtificialStatus();
00473   int number=basis_->getNumArtificial()>>4;;
00474   int i;
00475   for (i=0;i<number;i++) { 
00476     if (!now[i])
00477       now[i] = saved[i];
00478   }
00479   return NULL;
00480 }


Member Data Documentation

CoinWarmStartBasis* SbbFullNodeInfo::basis_ [protected]
 

Full basis

This MUST BE A POINTER to avoid cutting extra information in derived warm start classes.

Definition at line 277 of file SbbNode.hpp.

Referenced by applyToModel(), buildRowBasis(), and SbbFullNodeInfo().


The documentation for this class was generated from the following files:
Generated on Wed Dec 3 14:36:23 2003 for Sbb by doxygen 1.3.5