#include <SmiScnModel.hpp>
Collaboration diagram for SmiScnModel:
Public Member Functions | |
SmiScenarioIndex | getNumScenarios () |
double | getScenarioProb (SmiScenarioIndex ns) |
SmiScnNode * | getLeafNode (SmiScenarioIndex i) |
SmiScnNode * | getRootNode () |
double | getObjectiveValue (SmiScenarioIndex ns) |
double * | getColSolution (SmiScenarioIndex ns, int *length) |
double * | getRowSolution (SmiScenarioIndex ns, int *length) |
void | setOsiSolverHandle (OsiSolverInterface &osi) |
OsiSolverInterface * | getOsiSolverInterface () |
void | releaseSolver () |
SmiScnModel () | |
~SmiScnModel () | |
void | addNode (SmiScnNode *node) |
Read SMPS files. | |
There should be three files: {name}.[core, time, stoch]. If you have different extension conventions, then you can hack the method yourself. The files can be compressed. The object that reads the files is derived from CoinMpsIO.
The optional argument SmiCoreCombineRule allows user to pass in a class to override the default methods to combine core and stochastic data. | |
int | readSmps (const char *name, SmiCoreCombineRule *r=NULL) |
SmiCoreData * | getCore () |
Direct methods. | |
Direct methods require the user to create instances of Core data and Scenario data. Currently, the dimension of the core nodes determines the dimension of the scenario nodes, but this is something that could easily be changed. | |
void | processDiscreteDistributionIntoScenarios (SmiDiscreteDistribution *s, bool test=false) |
generate scenarios from discrete distribution | |
SmiScenarioIndex | generateScenario (SmiCoreData *core, CoinPackedMatrix *matrix, CoinPackedVector *dclo, CoinPackedVector *dcup, CoinPackedVector *dobj, CoinPackedVector *drlo, CoinPackedVector *drup, vector< int >labels, double prob, SmiCoreCombineRule *r=SmiCoreCombineReplace::Instance()) |
generate scenario with ancestor/branch node identification | |
SmiScenarioIndex | generateScenario (SmiCoreData *core, CoinPackedMatrix *matrix, CoinPackedVector *dclo, CoinPackedVector *dcup, CoinPackedVector *dobj, CoinPackedVector *drlo, CoinPackedVector *drup, SmiStageIndex branch, SmiScenarioIndex anc, double prob, SmiCoreCombineRule *r=SmiCoreCombineReplace::Instance()) |
generate scenario with labels information | |
loadOsiSolverData | |
Loads deterministic equivalent model into internal osi data structures and return handle.
Note: this uses a callback class SmiCoreCombineRule to decide how to combine the core and stochastic data. The user can override the default methods when the scenario is generated (see SmiScnModel::generateScenario) or when SMPS files are processed (see SmiScnModel::readSmps). | |
OsiSolverInterface * | loadOsiSolverData () |
Private Attributes | |
CoinMessageHandler * | handler_ |
SmiMessage * | messages_ |
OsiSolverInterface * | osiStoch_ |
int | nrow_ |
int | ncol_ |
int | nels_ |
double * | drlo_ |
double * | drup_ |
double * | dobj_ |
double * | dclo_ |
double * | dcup_ |
CoinPackedMatrix * | matrix_ |
int | minrow_ |
bool | solve_synch_ |
double | totalProb_ |
SmiCoreData * | core_ |
SmiScenarioTree< SmiScnNode * > | smiTree_ |
Friends | |
void | SmiScnModelDiscreteUnitTest () |
Concrete class for generating scenario stochastic linear programs.
This class implements the Scenarios format of the Stochastic MPS modeling system (TODO: web pointer). Core data and Scenarios data can be passed using COIN/OSI structures, or can be read from SMPS formatted files.
Typical driver fragment looks like this
SmiScnModel smi; smi.readSmps("app0110R"); smi.setOsiSolverHandle(OsiClpSolverInterface()); OsiSolverInterface *osiStoch = smi.loadOsiSolverData(); osiStoch->initialSolve();
The setOsiSolverHandle method allows the user to pass in any OSI compatible solver.
Definition at line 53 of file SmiScnModel.hpp.
SmiScnModel::SmiScnModel | ( | ) | [inline] |
Definition at line 176 of file SmiScnModel.hpp.
SmiScnModel::~SmiScnModel | ( | ) |
int SmiScnModel::readSmps | ( | const char * | name, | |
SmiCoreCombineRule * | r = NULL | |||
) |
SmiCoreData* SmiScnModel::getCore | ( | ) | [inline] |
void SmiScnModel::processDiscreteDistributionIntoScenarios | ( | SmiDiscreteDistribution * | s, | |
bool | test = false | |||
) |
generate scenarios from discrete distribution
SmiScenarioIndex SmiScnModel::generateScenario | ( | SmiCoreData * | core, | |
CoinPackedMatrix * | matrix, | |||
CoinPackedVector * | dclo, | |||
CoinPackedVector * | dcup, | |||
CoinPackedVector * | dobj, | |||
CoinPackedVector * | drlo, | |||
CoinPackedVector * | drup, | |||
vector< int > | labels, | |||
double | prob, | |||
SmiCoreCombineRule * | r = SmiCoreCombineReplace::Instance() | |||
) |
generate scenario with ancestor/branch node identification
Core argument must be supplied. Data values combine with corresponding core values, if found, or creates them if not.
Scenario nodes need to have same dimensions as core nodes.
Data field arguments can be NULL, or empty.
branch, anc, arguments must be supplied. These identify the branching node according to the Stochastic MPS standard.
SmiScenarioIndex SmiScnModel::generateScenario | ( | SmiCoreData * | core, | |
CoinPackedMatrix * | matrix, | |||
CoinPackedVector * | dclo, | |||
CoinPackedVector * | dcup, | |||
CoinPackedVector * | dobj, | |||
CoinPackedVector * | drlo, | |||
CoinPackedVector * | drup, | |||
SmiStageIndex | branch, | |||
SmiScenarioIndex | anc, | |||
double | prob, | |||
SmiCoreCombineRule * | r = SmiCoreCombineReplace::Instance() | |||
) |
generate scenario with labels information
Core argument must be supplied. Data values combine with corresponding core values, if found, or creates them if not.
Scenario nodes need to have same dimensions as core nodes.
Data field arguments can be NULL, or empty.
Labels are passed as vector<int> array. Adds new path using labels to find branching node. The depth (root to leaf) of new path is labels.size().
OsiSolverInterface* SmiScnModel::loadOsiSolverData | ( | ) |
SmiScenarioIndex SmiScnModel::getNumScenarios | ( | ) | [inline] |
Definition at line 154 of file SmiScnModel.hpp.
References SmiScenarioTree< T >::getNumScenarios(), and smiTree_.
double SmiScnModel::getScenarioProb | ( | SmiScenarioIndex | ns | ) |
SmiScnNode* SmiScnModel::getLeafNode | ( | SmiScenarioIndex | i | ) | [inline] |
Definition at line 156 of file SmiScnModel.hpp.
References SmiTreeNode< T >::getDataPtr(), SmiScenarioTree< T >::getLeaf(), and smiTree_.
SmiScnNode* SmiScnModel::getRootNode | ( | ) | [inline] |
Definition at line 157 of file SmiScnModel.hpp.
References SmiTreeNode< T >::getDataPtr(), SmiScenarioTree< T >::getRoot(), and smiTree_.
double SmiScnModel::getObjectiveValue | ( | SmiScenarioIndex | ns | ) |
double* SmiScnModel::getColSolution | ( | SmiScenarioIndex | ns, | |
int * | length | |||
) |
double* SmiScnModel::getRowSolution | ( | SmiScenarioIndex | ns, | |
int * | length | |||
) |
void SmiScnModel::setOsiSolverHandle | ( | OsiSolverInterface & | osi | ) | [inline] |
Definition at line 166 of file SmiScnModel.hpp.
References OsiSolverInterface::clone(), and osiStoch_.
OsiSolverInterface* SmiScnModel::getOsiSolverInterface | ( | ) |
void SmiScnModel::releaseSolver | ( | ) | [inline] |
void SmiScnModel::addNode | ( | SmiScnNode * | node | ) |
Referenced by SmiScnModelAddNode::operator()().
void SmiScnModelDiscreteUnitTest | ( | ) | [friend] |
CoinMessageHandler* SmiScnModel::handler_ [private] |
Definition at line 188 of file SmiScnModel.hpp.
SmiMessage* SmiScnModel::messages_ [private] |
Definition at line 189 of file SmiScnModel.hpp.
OsiSolverInterface* SmiScnModel::osiStoch_ [private] |
Definition at line 192 of file SmiScnModel.hpp.
Referenced by releaseSolver(), and setOsiSolverHandle().
int SmiScnModel::nrow_ [private] |
Definition at line 194 of file SmiScnModel.hpp.
int SmiScnModel::ncol_ [private] |
Definition at line 195 of file SmiScnModel.hpp.
int SmiScnModel::nels_ [private] |
Definition at line 196 of file SmiScnModel.hpp.
double* SmiScnModel::drlo_ [private] |
Definition at line 198 of file SmiScnModel.hpp.
double* SmiScnModel::drup_ [private] |
Definition at line 199 of file SmiScnModel.hpp.
double* SmiScnModel::dobj_ [private] |
Definition at line 200 of file SmiScnModel.hpp.
double* SmiScnModel::dclo_ [private] |
Definition at line 201 of file SmiScnModel.hpp.
double* SmiScnModel::dcup_ [private] |
Definition at line 202 of file SmiScnModel.hpp.
CoinPackedMatrix* SmiScnModel::matrix_ [private] |
Definition at line 203 of file SmiScnModel.hpp.
int SmiScnModel::minrow_ [private] |
Definition at line 207 of file SmiScnModel.hpp.
bool SmiScnModel::solve_synch_ [private] |
Definition at line 209 of file SmiScnModel.hpp.
double SmiScnModel::totalProb_ [private] |
Definition at line 211 of file SmiScnModel.hpp.
SmiCoreData* SmiScnModel::core_ [private] |
SmiScenarioTree<SmiScnNode *> SmiScnModel::smiTree_ [private] |
Definition at line 215 of file SmiScnModel.hpp.
Referenced by getLeafNode(), getNumScenarios(), and getRootNode().