Changeset 132


Ignore:
Timestamp:
Oct 23, 2007 12:26:47 PM (14 years ago)
Author:
kingaj
Message:

Updated examples/stoch.cpp to print column and row solutions.

Location:
trunk/Smi/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Smi/src/SmiScnModel.cpp

    r130 r132  
    341341}
    342342
    343 const double *
    344 SmiScnModel::getColSolution(int ns)
    345 {
    346         return NULL;
    347 }
    348 
    349 const double *
    350 SmiScnModel::getRowSolution(int ns)
    351 {
    352         return NULL;
     343
     344double *
     345SmiScnModel::getColSolution(int ns, int *length)
     346{       
     347        CoinPackedVector *soln=new CoinPackedVector();
     348        const double * osiSoln = this->getOsiSolverInterface()->getColSolution();
     349        int numcols=0;
     350
     351        assert( ns < this->getNumScenarios() );
     352
     353        // start with leaf node
     354        SmiScnNode *node = this->getLeafNode(ns);
     355        while (node != NULL){
     356                // accumulate number of rows along scenario
     357                numcols+=node->getNumCols();
     358               
     359                // get parent of node
     360                node = node->getParent();
     361        }
     362
     363        // malloc vector
     364        double *dsoln = (double *)calloc(numcols,sizeof(double));
     365
     366        // start with leaf node
     367        node = this->getLeafNode(ns);
     368        while (node != NULL){
     369                // copy entries
     370                // getColStart returns the starting index of node in OSI model
     371                for(int j=node->getColStart(); j<node->getColStart()+node->getNumCols(); ++j){
     372                                // getCoreRowIndex returns the corresponding Core index
     373                                // in the original (user's) ordering
     374                                dsoln[node->getCoreColIndex(j)] = osiSoln[j];   
     375                }               
     376                // get parent of node
     377                node = node->getParent();
     378        }
     379        *length=numcols;
     380        return dsoln;
     381}
     382
     383double *
     384SmiScnModel::getRowSolution(int ns, int *length)
     385{       
     386        CoinPackedVector *soln=new CoinPackedVector();
     387        const double * osiSoln = this->getOsiSolverInterface()->getRowActivity();
     388        int numrows=0;
     389
     390        assert( ns < this->getNumScenarios() );
     391
     392        // start with leaf node
     393        SmiScnNode *node = this->getLeafNode(ns);
     394        while (node != NULL){
     395                // accumulate number of rows along scenario
     396                numrows+=node->getNumRows();
     397               
     398                // get parent of node
     399                node = node->getParent();
     400        }
     401
     402        // malloc vector
     403        double *dsoln = (double *)calloc(numrows,sizeof(double));
     404
     405        // start with leaf node
     406        node = this->getLeafNode(ns);
     407        while (node != NULL){
     408                // copy entries
     409                // getRowStart returns the starting index of node in OSI model
     410                for(int j=node->getRowStart(); j<node->getRowStart()+node->getNumRows(); ++j){
     411                                // getCoreRowIndex returns the corresponding Core index
     412                                // in the original (user's) ordering
     413                                dsoln[node->getCoreRowIndex(j)] = osiSoln[j];   
     414                }               
     415                // get parent of node
     416                node = node->getParent();
     417        }
     418        *length=numrows;
     419        return dsoln;
    353420}
    354421
  • trunk/Smi/src/SmiScnModel.hpp

    r111 r132  
    160160        // getXXX by scenario
    161161        double getObjectiveValue(SmiScenarioIndex ns);
    162         const double *getColSolution(SmiScenarioIndex ns);
    163         const double *getRowSolution(SmiScenarioIndex ns);
     162        double *getColSolution(SmiScenarioIndex ns, int *length);
     163        double *getRowSolution(SmiScenarioIndex ns, int *length);
    164164
    165165        // OsiSolverInterface
Note: See TracChangeset for help on using the changeset viewer.