//----------------------------------------------------------------
// Assignment operator
//-------------------------------------------------------------------
ClpDynamicExampleMatrix &
ClpDynamicExampleMatrix::operator=(const ClpDynamicExampleMatrix& rhs)
{
     if (this != &rhs) {
          ClpDynamicMatrix::operator=(rhs);
          numberColumns_ = rhs.numberColumns_;
          delete [] startColumnGen_;
          delete [] rowGen_;
          delete [] elementGen_;
          delete [] costGen_;
          delete [] fullStartGen_;
          delete [] dynamicStatusGen_;
          delete [] idGen_;
          delete [] columnLowerGen_;
          delete [] columnUpperGen_;
          startColumnGen_ = ClpCopyOfArray(rhs.startColumnGen_, numberColumns_ + 1);
          CoinBigIndex numberElements = startColumnGen_[numberColumns_];
          rowGen_ = ClpCopyOfArray(rhs.rowGen_, numberElements);;
          elementGen_ = ClpCopyOfArray(rhs.elementGen_, numberElements);;
          costGen_ = ClpCopyOfArray(rhs.costGen_, numberColumns_);
          fullStartGen_ = ClpCopyOfArray(rhs.fullStartGen_, numberSets_ + 1);
          dynamicStatusGen_ = ClpCopyOfArray(rhs.dynamicStatusGen_, numberColumns_);
          idGen_ = ClpCopyOfArray(rhs.idGen_, maximumGubColumns_);
          columnLowerGen_ = ClpCopyOfArray(rhs.columnLowerGen_, numberColumns_);
          columnUpperGen_ = ClpCopyOfArray(rhs.columnUpperGen_, numberColumns_);
     }
     return *this;
}
Exemple #2
0
//----------------------------------------------------------------
// Assignment operator
//-------------------------------------------------------------------
ClpMatrixBase &
ClpMatrixBase::operator=(const ClpMatrixBase& rhs)
{
     if (this != &rhs) {
          type_ = rhs.type_;
          delete [] rhsOffset_;
          int numberRows = rhs.getNumRows();
          if (rhs.rhsOffset_ && numberRows) {
               rhsOffset_ = ClpCopyOfArray(rhs.rhsOffset_, numberRows);
          } else {
               rhsOffset_ = NULL;
          }
          startFraction_ = rhs.startFraction_;
          endFraction_ = rhs.endFraction_;
          savedBestDj_ = rhs.savedBestDj_;
          originalWanted_ = rhs.originalWanted_;
          currentWanted_ = rhs.currentWanted_;
          savedBestSequence_ = rhs.savedBestSequence_;
          lastRefresh_ = rhs.lastRefresh_;
          refreshFrequency_ = rhs.refreshFrequency_;
          minimumObjectsScan_ = rhs.minimumObjectsScan_;
          minimumGoodReducedCosts_ = rhs.minimumGoodReducedCosts_;
          trueSequenceIn_ = rhs.trueSequenceIn_;
          trueSequenceOut_ = rhs.trueSequenceOut_;
          skipDualCheck_ = rhs.skipDualCheck_;
     }
     return *this;
}
Exemple #3
0
ClpLsqr::ClpLsqr(const ClpLsqr &rhs)
  : nrows_(rhs.nrows_)
  , ncols_(rhs.ncols_)
  , model_(rhs.model_)
  , diag2_(rhs.diag2_)
{
  diag1_ = ClpCopyOfArray(rhs.diag1_, nrows_);
}
//-------------------------------------------------------------------
// Copy constructor
//-------------------------------------------------------------------
ClpDynamicExampleMatrix::ClpDynamicExampleMatrix (const ClpDynamicExampleMatrix & rhs)
     : ClpDynamicMatrix(rhs)
{
     numberColumns_ = rhs.numberColumns_;
     startColumnGen_ = ClpCopyOfArray(rhs.startColumnGen_, numberColumns_ + 1);
     CoinBigIndex numberElements = startColumnGen_[numberColumns_];
     rowGen_ = ClpCopyOfArray(rhs.rowGen_, numberElements);;
     elementGen_ = ClpCopyOfArray(rhs.elementGen_, numberElements);;
     costGen_ = ClpCopyOfArray(rhs.costGen_, numberColumns_);
     fullStartGen_ = ClpCopyOfArray(rhs.fullStartGen_, numberSets_ + 1);
     dynamicStatusGen_ = ClpCopyOfArray(rhs.dynamicStatusGen_, numberColumns_);
     idGen_ = ClpCopyOfArray(rhs.idGen_, maximumGubColumns_);
     columnLowerGen_ = ClpCopyOfArray(rhs.columnLowerGen_, numberColumns_);
     columnUpperGen_ = ClpCopyOfArray(rhs.columnUpperGen_, numberColumns_);
}
Exemple #5
0
// Assignment operator. This copies the data
ClpLsqr &
ClpLsqr::operator=(const ClpLsqr &rhs)
{
  if (this != &rhs) {
    delete[] diag1_;
    diag1_ = ClpCopyOfArray(rhs.diag1_, nrows_);
    nrows_ = rhs.nrows_;
    ncols_ = rhs.ncols_;
    model_ = rhs.model_;
    diag2_ = rhs.diag2_;
  }
  return *this;
}
/* This is the real constructor*/
ClpDynamicExampleMatrix::ClpDynamicExampleMatrix(ClpSimplex * model, int numberSets,
          int numberGubColumns, const int * starts,
          const double * lower, const double * upper,
          const CoinBigIndex * startColumn, const int * row,
          const double * element, const double * cost,
          const double * columnLower, const double * columnUpper,
          const unsigned char * status,
          const unsigned char * dynamicStatus,
          int numberIds, const int *ids)
     : ClpDynamicMatrix(model, numberSets, 0, NULL, lower, upper, NULL, NULL, NULL, NULL, NULL, NULL,
                        NULL, NULL)
{
     setType(25);
     numberColumns_ = numberGubColumns;
     // start with safe values - then experiment
     maximumGubColumns_ = numberColumns_;
     maximumElements_ = startColumn[numberColumns_];
     // delete odd stuff created by ClpDynamicMatrix constructor
     delete [] startSet_;
     startSet_ = new int [numberSets_];
     delete [] next_;
     next_ = new int [maximumGubColumns_];
     delete [] row_;
     delete [] element_;
     delete [] startColumn_;
     delete [] cost_;
     delete [] columnLower_;
     delete [] columnUpper_;
     delete [] dynamicStatus_;
     delete [] status_;
     delete [] id_;
     // and size correctly
     row_ = new int [maximumElements_];
     element_ = new double [maximumElements_];
     startColumn_ = new CoinBigIndex [maximumGubColumns_+1];
     // say no columns yet
     numberGubColumns_ = 0;
     startColumn_[0] = 0;
     cost_ = new double[maximumGubColumns_];
     dynamicStatus_ = new unsigned char [2*maximumGubColumns_];
     memset(dynamicStatus_, 0, maximumGubColumns_);
     id_ = new int[maximumGubColumns_];
     if (columnLower)
          columnLower_ = new double[maximumGubColumns_];
     else
          columnLower_ = NULL;
     if (columnUpper)
          columnUpper_ = new double[maximumGubColumns_];
     else
          columnUpper_ = NULL;
     // space for ids
     idGen_ = new int [maximumGubColumns_];
     int iSet;
     for (iSet = 0; iSet < numberSets_; iSet++)
          startSet_[iSet] = -1;
     // This starts code specific to this storage method
     CoinBigIndex i;
     fullStartGen_ = ClpCopyOfArray(starts, numberSets_ + 1);
     startColumnGen_ = ClpCopyOfArray(startColumn, numberColumns_ + 1);
     CoinBigIndex numberElements = startColumnGen_[numberColumns_];
     rowGen_ = ClpCopyOfArray(row, numberElements);
     elementGen_ = new double[numberElements];
     for (i = 0; i < numberElements; i++)
          elementGen_[i] = element[i];
     costGen_ = new double[numberColumns_];
     for (i = 0; i < numberColumns_; i++) {
          costGen_[i] = cost[i];
          // I don't think I need sorted but ...
          CoinSort_2(rowGen_ + startColumnGen_[i], rowGen_ + startColumnGen_[i+1], elementGen_ + startColumnGen_[i]);
     }
     if (columnLower) {
          columnLowerGen_ = new double[numberColumns_];
          for (i = 0; i < numberColumns_; i++) {
               columnLowerGen_[i] = columnLower[i];
               if (columnLowerGen_[i]) {
                    printf("Non-zero lower bounds not allowed - subtract from model\n");
                    abort();
               }
          }
     } else {
          columnLowerGen_ = NULL;
     }
     if (columnUpper) {
          columnUpperGen_ = new double[numberColumns_];
          for (i = 0; i < numberColumns_; i++)
               columnUpperGen_[i] = columnUpper[i];
     } else {
          columnUpperGen_ = NULL;
     }
     // end specific coding
     if (columnUpper_) {
          // set all upper bounds so we have enough space
          double * columnUpper = model->columnUpper();
          for(i = firstDynamic_; i < lastDynamic_; i++)
               columnUpper[i] = 1.0e10;
     }
     status_ = new unsigned char [2*numberSets_+4];
     if (status) {
          memcpy(status_,status, numberSets_ * sizeof(char));
          assert (dynamicStatus);
          CoinMemcpyN(dynamicStatus, numberIds, dynamicStatus_);
          assert (numberIds);
     } else {
          assert (!numberIds);
          memset(status_, 0, numberSets_);
          for (i = 0; i < numberSets_; i++) {
               // make slack key
               setStatus(i, ClpSimplex::basic);
          }
     }
     dynamicStatusGen_ = new unsigned char [numberColumns_];
     memset(dynamicStatusGen_, 0, numberColumns_); // for clarity
     for (i = 0; i < numberColumns_; i++)
          setDynamicStatusGen(i, atLowerBound);
     // Populate with enough columns
     if (!numberIds) {
          // This could be made more sophisticated
          for (iSet = 0; iSet < numberSets_; iSet++) {
               int sequence = fullStartGen_[iSet];
               CoinBigIndex start = startColumnGen_[sequence];
               addColumn(startColumnGen_[sequence+1] - start,
                         rowGen_ + start,
                         elementGen_ + start,
                         costGen_[sequence],
                         columnLowerGen_ ? columnLowerGen_[sequence] : 0,
                         columnUpperGen_ ? columnUpperGen_[sequence] : 1.0e30,
                         iSet, getDynamicStatusGen(sequence));
               idGen_[iSet] = sequence; // say which one in
               setDynamicStatusGen(sequence, inSmall);
          }
     } else {
          // put back old ones
          int * set = new int[numberColumns_];
          for (iSet = 0; iSet < numberSets_; iSet++) {
               for (CoinBigIndex j = fullStartGen_[iSet]; j < fullStartGen_[iSet+1]; j++)
                    set[j] = iSet;
          }
          for (int i = 0; i < numberIds; i++) {
               int sequence = ids[i];
               CoinBigIndex start = startColumnGen_[sequence];
               addColumn(startColumnGen_[sequence+1] - start,
                         rowGen_ + start,
                         elementGen_ + start,
                         costGen_[sequence],
                         columnLowerGen_ ? columnLowerGen_[sequence] : 0,
                         columnUpperGen_ ? columnUpperGen_[sequence] : 1.0e30,
                         set[sequence], getDynamicStatus(i));
               idGen_[iSet] = sequence; // say which one in
               setDynamicStatusGen(sequence, inSmall);
          }
          delete [] set;
     }
     if (!status) {
          gubCrash();
     } else {
          initialProblem();
     }
}
Exemple #7
0
void
ClpInterior::gutsOfCopy(const ClpInterior & rhs)
{
     lower_ = ClpCopyOfArray(rhs.lower_, numberColumns_ + numberRows_);
     rowLowerWork_ = lower_ + numberColumns_;
     columnLowerWork_ = lower_;
     upper_ = ClpCopyOfArray(rhs.upper_, numberColumns_ + numberRows_);
     rowUpperWork_ = upper_ + numberColumns_;
     columnUpperWork_ = upper_;
     //cost_ = ClpCopyOfArray(rhs.cost_,2*(numberColumns_+numberRows_));
     cost_ = ClpCopyOfArray(rhs.cost_, numberColumns_);
     rhs_ = ClpCopyOfArray(rhs.rhs_, numberRows_);
     x_ = ClpCopyOfArray(rhs.x_, numberColumns_);
     y_ = ClpCopyOfArray(rhs.y_, numberRows_);
     dj_ = ClpCopyOfArray(rhs.dj_, numberColumns_ + numberRows_);
     lsqrObject_ = rhs.lsqrObject_ != NULL ? new ClpLsqr(*rhs.lsqrObject_) : NULL;
     pdcoStuff_ = rhs.pdcoStuff_ != NULL ? rhs.pdcoStuff_->clone() : NULL;
     largestPrimalError_ = rhs.largestPrimalError_;
     largestDualError_ = rhs.largestDualError_;
     sumDualInfeasibilities_ = rhs.sumDualInfeasibilities_;
     sumPrimalInfeasibilities_ = rhs.sumPrimalInfeasibilities_;
     worstComplementarity_ = rhs.worstComplementarity_;
     xsize_ = rhs.xsize_;
     zsize_ = rhs.zsize_;
     solveType_ = rhs.solveType_;
     mu_ = rhs.mu_;
     objectiveNorm_ = rhs.objectiveNorm_;
     rhsNorm_ = rhs.rhsNorm_;
     solutionNorm_ = rhs.solutionNorm_;
     dualObjective_ = rhs.dualObjective_;
     primalObjective_ = rhs.primalObjective_;
     diagonalNorm_ = rhs.diagonalNorm_;
     stepLength_ = rhs.stepLength_;
     linearPerturbation_ = rhs.linearPerturbation_;
     diagonalPerturbation_ = rhs.diagonalPerturbation_;
     gamma_ = rhs.gamma_;
     delta_ = rhs.delta_;
     targetGap_ = rhs.targetGap_;
     projectionTolerance_ = rhs.projectionTolerance_;
     maximumRHSError_ = rhs.maximumRHSError_;
     maximumBoundInfeasibility_ = rhs.maximumBoundInfeasibility_;
     maximumDualError_ = rhs.maximumDualError_;
     diagonalScaleFactor_ = rhs.diagonalScaleFactor_;
     scaleFactor_ = rhs.scaleFactor_;
     actualPrimalStep_ = rhs.actualPrimalStep_;
     actualDualStep_ = rhs.actualDualStep_;
     smallestInfeasibility_ = rhs.smallestInfeasibility_;
     complementarityGap_ = rhs.complementarityGap_;
     baseObjectiveNorm_ = rhs.baseObjectiveNorm_;
     worstDirectionAccuracy_ = rhs.worstDirectionAccuracy_;
     maximumRHSChange_ = rhs.maximumRHSChange_;
     errorRegion_ = ClpCopyOfArray(rhs.errorRegion_, numberRows_);
     rhsFixRegion_ = ClpCopyOfArray(rhs.rhsFixRegion_, numberRows_);
     deltaY_ = ClpCopyOfArray(rhs.deltaY_, numberRows_);
     upperSlack_ = ClpCopyOfArray(rhs.upperSlack_, numberRows_ + numberColumns_);
     lowerSlack_ = ClpCopyOfArray(rhs.lowerSlack_, numberRows_ + numberColumns_);
     diagonal_ = ClpCopyOfArray(rhs.diagonal_, numberRows_ + numberColumns_);
     deltaX_ = ClpCopyOfArray(rhs.deltaX_, numberRows_ + numberColumns_);
     deltaZ_ = ClpCopyOfArray(rhs.deltaZ_, numberRows_ + numberColumns_);
     deltaW_ = ClpCopyOfArray(rhs.deltaW_, numberRows_ + numberColumns_);
     deltaSU_ = ClpCopyOfArray(rhs.deltaSU_, numberRows_ + numberColumns_);
     deltaSL_ = ClpCopyOfArray(rhs.deltaSL_, numberRows_ + numberColumns_);
     primalR_ = ClpCopyOfArray(rhs.primalR_, numberRows_ + numberColumns_);
     dualR_ = ClpCopyOfArray(rhs.dualR_, numberRows_ + numberColumns_);
     rhsB_ = ClpCopyOfArray(rhs.rhsB_, numberRows_);
     rhsU_ = ClpCopyOfArray(rhs.rhsU_, numberRows_ + numberColumns_);
     rhsL_ = ClpCopyOfArray(rhs.rhsL_, numberRows_ + numberColumns_);
     rhsZ_ = ClpCopyOfArray(rhs.rhsZ_, numberRows_ + numberColumns_);
     rhsW_ = ClpCopyOfArray(rhs.rhsW_, numberRows_ + numberColumns_);
     rhsC_ = ClpCopyOfArray(rhs.rhsC_, numberRows_ + numberColumns_);
     solution_ = ClpCopyOfArray(rhs.solution_, numberRows_ + numberColumns_);
     workArray_ = ClpCopyOfArray(rhs.workArray_, numberRows_ + numberColumns_);
     zVec_ = ClpCopyOfArray(rhs.zVec_, numberRows_ + numberColumns_);
     wVec_ = ClpCopyOfArray(rhs.wVec_, numberRows_ + numberColumns_);
     cholesky_ = rhs.cholesky_->clone();
     numberComplementarityPairs_ = rhs.numberComplementarityPairs_;
     numberComplementarityItems_ = rhs.numberComplementarityItems_;
     maximumBarrierIterations_ = rhs.maximumBarrierIterations_;
     gonePrimalFeasible_ = rhs.gonePrimalFeasible_;
     goneDualFeasible_ = rhs.goneDualFeasible_;
     algorithm_ = rhs.algorithm_;
}