Changeset 2298


Ignore:
Timestamp:
Jan 19, 2018 9:47:35 AM (9 months ago)
Author:
forrest
Message:

changes for SC

Location:
trunk/Clp/src/OsiClp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Clp/src/OsiClp/OsiClpSolverInterface.cpp

    r2286 r2298  
    56875687                m.getObjCoefficients(),m.getRowSense(),m.getRightHandSide(),
    56885688                m.getRowRange());
    5689     const char * integer = m.integerColumns();
     5689    char * integer = const_cast<char *>(m.integerColumns());
    56905690    int nCols=m.getNumCols();
    56915691    int nRows=m.getNumRows();
    56925692    if (integer) {
    5693       int i,n=0;
    5694       int * index = new int [nCols];
     5693      int i;
     5694      if (!integerInformation_) {
     5695        integerInformation_ = new char[modelPtr_->numberColumns()];
     5696        CoinFillN ( integerInformation_, modelPtr_->numberColumns(),static_cast<char> (0));
     5697      }
    56955698      for (i=0;i<nCols;i++) {
    5696         if (integer[i]) {
    5697           index[n++]=i;
     5699        integerInformation_[i]=integer[i];
     5700        if (integer[i]==1||integer[i]==3) {
     5701          modelPtr_->setInteger(i);
     5702        } else {
     5703          integer[i]=0;
    56985704        }
    56995705      }
    5700       setInteger(index,n);
    5701       delete [] index;
    5702       if (n)
    5703         modelPtr_->copyInIntegerInformation(integer);
     5706      modelPtr_->copyInIntegerInformation(integer);
    57045707    }
    57055708
     
    58025805      delete [] element;
    58035806    }
    5804     const char * integer = m.integerColumns();
     5807    char * integer = const_cast<char *>(m.integerColumns());
    58055808    int nRows=m.getNumRows();
    58065809    if (integer) {
    5807       int i,n=0;
    5808       int * index = new int [nCols];
     5810      int i;
     5811      if (!integerInformation_) {
     5812        integerInformation_ = new char[modelPtr_->numberColumns()];
     5813        CoinFillN ( integerInformation_, modelPtr_->numberColumns(),static_cast<char> (0));
     5814      }
    58095815      for (i=0;i<nCols;i++) {
    5810         if (integer[i]) {
    5811           index[n++]=i;
     5816        integerInformation_[i]=integer[i];
     5817        if (integer[i]==1||integer[i]==3) {
     5818          modelPtr_->setInteger(i);
     5819        } else {
     5820          integer[i]=0;
    58125821        }
    58135822      }
    5814       setInteger(index,n);
    5815       delete [] index;
    5816       if (n)
    5817         modelPtr_->copyInIntegerInformation(integer);
     5823      modelPtr_->copyInIntegerInformation(integer);
    58185824    }
    58195825    if (keepNames) {
     
    58685874              m.getObjCoefficients(), m.getRowLower(), m.getRowUpper());
    58695875
    5870   const char *integer = m.integerColumns();
     5876  char *integer = const_cast<char *>(m.integerColumns());
    58715877  int nCols = m.getNumCols();
    58725878  int nRows = m.getNumRows();
    58735879  if (integer) {
    5874     int i, n = 0;
    5875     int *index = new int [nCols];
    5876     for (i=0; i<nCols; i++) {
    5877       if (integer[i]) {
    5878         index[n++] = i;
    5879       }
    5880     }
    5881     setInteger(index,n);
    5882     delete [] index;
     5880      int i;
     5881      if (!integerInformation_) {
     5882        integerInformation_ = new char[modelPtr_->numberColumns()];
     5883        CoinFillN ( integerInformation_, modelPtr_->numberColumns(),static_cast<char> (0));
     5884      }
     5885      for (i=0;i<nCols;i++) {
     5886        integerInformation_[i]=integer[i];
     5887        if (integer[i]==1||integer[i]==3) {
     5888          modelPtr_->setInteger(i);
     5889        } else {
     5890          integer[i]=0;
     5891        }
     5892      }
     5893      modelPtr_->copyInIntegerInformation(integer);
    58835894  }
    58845895  // Always keep names
     
    59605971  const char * const * const rowNames = modelPtr_->rowNamesAsChar();
    59615972  const char * const * const columnNames = modelPtr_->columnNamesAsChar();
    5962   if (!numberSOS_) {
     5973  // check if odd integers
     5974  if (!numberSOS_ && (specialOptions_&8388608)==0) {
    59635975    // Fall back on Osi version - possibly with names
    59645976    OsiSolverInterface::writeLpNative(fp,
     
    59725984
    59735985   for (int i=0; i<numcols; i++) {
    5974      if (isInteger(i)) {
    5975        integrality[i] = 1;
     5986     if (integerType(i)) {
     5987       integrality[i] = integerType(i);
    59765988       hasInteger = true;
    59775989     } else {
  • trunk/Clp/src/OsiClp/OsiClpSolverInterface.hpp

    r2271 r2298  
    482482  inline bool isHeuristicInteger(int colIndex) const
    483483  { return ( integerInformation_&& integerInformation_[colIndex]==1 );}
     484  /// Return integer type (0,1,2=optional,3=sc,4=scint)
     485  inline int integerType(int colIndex) const
     486  { return integerInformation_[colIndex];}
     487  /// Set integer type (0,1,2=optional,3=sc,4=scint)
     488  inline void setIntegerType(int colIndex,int value)
     489  { integerInformation_[colIndex] = value;}
    484490  /// Get pointer to row-wise copy of matrix
    485491  virtual const CoinPackedMatrix * getMatrixByRow() const;
     
    14011407      1048576 Don't recompute ray after crunch
    14021408      2097152
     1409      8388608 Odd integers e.g. semi-continuous
    14031410  */
    14041411  mutable unsigned int specialOptions_;
Note: See TracChangeset for help on using the changeset viewer.