/home/coin/SVN-release/OS-1.0.0/OS/src/OSModelInterfaces/OSmps2osil.cpp

Go to the documentation of this file.
00001 
00017 #include "OSmps2osil.h"
00018 
00019 #include <CoinMpsIO.hpp>
00020 #include <CoinPackedMatrix.hpp>
00021 #include <iostream> 
00022 
00023 
00024 
00025 using std::cout;
00026 using std::endl;
00027 
00028 OSmps2osil::OSmps2osil( std::string mpsfilename)
00029 {
00030         m_MpsData = new CoinMpsIO();
00031         m_MpsData->readMps( &mpsfilename[ 0] ); 
00032         m_CoinPackedMatrix  =  new CoinPackedMatrix( *(m_MpsData->getMatrixByCol()));
00033 }// end constructor
00034 
00035 OSmps2osil::~OSmps2osil(){
00036         m_MpsData = NULL;
00037         delete m_CoinPackedMatrix;
00038         m_CoinPackedMatrix = NULL;
00039         osinstance->instanceData->linearConstraintCoefficients->value->el = NULL;
00040         osinstance->instanceData->linearConstraintCoefficients->start->el = NULL;
00041         osinstance->instanceData->linearConstraintCoefficients->colIdx->el = NULL;
00042         osinstance->instanceData->linearConstraintCoefficients->rowIdx->el = NULL;
00043         delete osinstance;                       
00044         osinstance = NULL;
00045         #ifdef DEBUG
00046         cout << "now delete m_MpsData" << endl;
00047         #endif
00048         delete m_MpsData;
00049 
00050 } // end destructor
00051 
00052 // Kipp-- put in integer programming
00053 bool OSmps2osil::createOSInstance( )
00054 {
00055         osinstance = new OSInstance();
00056         int i;
00057         int numvar =  m_MpsData->getNumCols();
00058         int numrows =  m_MpsData->getNumRows();
00059         int numnonz = m_MpsData->getNumElements();
00060         int numberObj = 1;
00061         int objIndex = -1;
00062         double objWeight = 1.0;
00063         osinstance->setInstanceName( const_cast<char*>(m_MpsData->getProblemName()));
00064         //
00065         // get the variable information
00066         //
00067         std::string initString;
00068         double init = OSNAN;
00069         osinstance->setVariableNumber( numvar);
00070         for(i = 0; i < numvar; i++)
00071         {
00072                 osinstance->addVariable(i, m_MpsData->columnName( i), 
00073                         m_MpsData->getColLower()[ i], m_MpsData->getColUpper()[ i], 
00074                         m_MpsData->isInteger( i)? 'I':'C', init, initString);
00075         }
00076         //
00077         // now create the objective function
00078         //      
00079         SparseVector* objectiveCoefficients = NULL;
00080         objectiveCoefficients = new SparseVector( numvar);
00081         double *p = const_cast<double*>(m_MpsData->getObjCoefficients());
00082         for(i = 0; i < numvar; i++){
00083                 objectiveCoefficients->indexes[i] = i;
00084                 objectiveCoefficients->values[i] = *(p++);
00085         }
00086         // kipp -- check on this -- does MPS assume a min???
00087         osinstance->setObjectiveNumber( numberObj) ;
00088         osinstance->addObjective(objIndex, m_MpsData->getObjectiveName(), 
00089         "min", m_MpsData->objectiveOffset(),  objWeight, objectiveCoefficients) ;
00090         delete objectiveCoefficients;
00091         objectiveCoefficients = NULL;
00092         //
00093         // now fill in row information
00094         //
00095         osinstance->setConstraintNumber( numrows);
00096         double constant = 0.0;
00097         for(i = 0; i < numrows; i++){
00098                 osinstance->addConstraint(i, m_MpsData->rowName( i), m_MpsData->getRowLower()[i], 
00099                 m_MpsData->getRowUpper()[i], constant);
00100         }
00101         //
00102         // now fill in the lp arrays
00103         //
00104         int valuesBegin = 0;
00105         int valuesEnd = numnonz - 1;
00106         int startsBegin = 0;
00107         int indexesBegin = 0;
00108         int indexesEnd = numnonz - 1;
00109         int startsEnd = m_CoinPackedMatrix->isColOrdered()?numvar:numrows;
00110         osinstance->setLinearConstraintCoefficients(numnonz,  m_CoinPackedMatrix->isColOrdered(), 
00111                 const_cast<double*>(m_CoinPackedMatrix->getElements()), valuesBegin,  valuesEnd, 
00112                 const_cast<int*>(m_CoinPackedMatrix->getIndices()),  indexesBegin,  indexesEnd,                         
00113                 const_cast<int*>(m_CoinPackedMatrix->getVectorStarts()),  startsBegin,  startsEnd);
00114         return true;
00115 }
00116 
00117 
00118 
00119 

Generated on Thu May 15 22:15:05 2008 by  doxygen 1.4.7