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 }
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 }
00051
00052
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
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
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
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
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
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