#include <SbbNode.hpp>
Inheritance diagram for SbbFullNodeInfo:
Public Member Functions | |
virtual void | applyToModel (SbbModel *model, CoinWarmStartBasis *&basis, SbbCountRowCut **addCuts, int ¤tNumberCuts) const |
Modify model according to information at node. | |
virtual SbbNodeInfo * | buildRowBasis (CoinWarmStartBasis &basis) const |
SbbFullNodeInfo (SbbModel *model, int numberRowsAtContinuous) | |
SbbFullNodeInfo (const SbbFullNodeInfo &) | |
virtual SbbNodeInfo * | clone () const |
Clone. | |
Protected Attributes | |
CoinWarmStartBasis * | basis_ |
int | numberIntegers_ |
double * | lower_ |
double * | upper_ |
Private Member Functions | |
SbbFullNodeInfo & | operator= (const SbbFullNodeInfo &rhs) |
Illegal Assignment operator. |
A SbbFullNodeInfo object contains all necessary information (bounds, basis, and cuts) required to recreate a subproblem.
Definition at line 232 of file SbbNode.hpp.
|
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 } |
|
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.
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 } |
|
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 } |
|
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(). |