Ignore:
Timestamp:
Jul 24, 2007 3:52:28 PM (13 years ago)
Author:
forrest
Message:

changes to compile under gcc 4.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Clp/src/ClpSimplexNonlinear.cpp

    r1034 r1054  
    33503350  //const double * elementByRow = copy.getElements();
    33513351  int numberArtificials=0;
     3352  // We could use nonlinearcost to do segments - maybe later
     3353#define SEGMENTS 3 
    33523354  // see how many extra we need
    33533355  CoinBigIndex numberExtra=0;
     
    33833385  }
    33843386  int numberColumns2 = numberColumns_;
    3385   double penalty=1.0e9;
     3387  // Penalties may be adjusted by duals
     3388  // Both these should be modified depending on problem
     3389  double penalties[]={1.0e-2,1.0,1.0e9};
     3390  double bounds[] = {1.0e-2,1.0,COIN_DBL_MAX};
    33863391  if (numberArtificials) {
     3392    numberArtificials *= SEGMENTS;
    33873393    numberColumns2 += numberArtificials;
    33883394    int * addStarts = new int [numberArtificials+1];
    33893395    int * addRow = new int[numberArtificials];
    33903396    double * addElement = new double[numberArtificials];
     3397    double * addUpper = new double[numberArtificials];
    33913398    addStarts[0]=0;
    33923399    double * addCost = new double [numberArtificials];
     
    33963403      int iRow = constraint->rowNumber();
    33973404      if (rowLower_[iRow]>-1.0e20) {
    3398         addRow[numberArtificials]=iRow;
    3399         addElement[numberArtificials]=1.0;
    3400         addCost[numberArtificials]=penalty;
    3401         numberArtificials++;
    3402         addStarts[numberArtificials]=numberArtificials;
     3405        for (int k=0;k<SEGMENTS;k++) {
     3406          addRow[numberArtificials]=iRow;
     3407          addElement[numberArtificials]=1.0;
     3408          addCost[numberArtificials]=penalties[k];
     3409          addUpper[numberArtificials]=bounds[k];
     3410          numberArtificials++;
     3411          addStarts[numberArtificials]=numberArtificials;
     3412        }
    34033413      }
    34043414      if (rowUpper_[iRow]<1.0e20) {
    3405         addRow[numberArtificials]=iRow;
    3406         addElement[numberArtificials]=-1.0;
    3407         addCost[numberArtificials]=penalty;
    3408         numberArtificials++;
    3409         addStarts[numberArtificials]=numberArtificials;
    3410       }
    3411     }
    3412     newModel.addColumns(numberArtificials,NULL,NULL,addCost,
     3415        for (int k=0;k<SEGMENTS;k++) {
     3416          addRow[numberArtificials]=iRow;
     3417          addElement[numberArtificials]=-1.0;
     3418          addCost[numberArtificials]=penalties[k];
     3419          addUpper[numberArtificials]=bounds[k];
     3420          numberArtificials++;
     3421          addStarts[numberArtificials]=numberArtificials;
     3422        }
     3423      }
     3424    }
     3425    newModel.addColumns(numberArtificials,NULL,addUpper,addCost,
    34133426                       addStarts,addRow,addElement);
    34143427    delete [] addStarts;
    34153428    delete [] addRow;
    34163429    delete [] addElement;
     3430    delete [] addUpper;
    34173431    delete [] addCost;
    34183432  }
     
    34703484      int numberArtificials=0;
    34713485      if (rowLower_[iRow]>-1.0e20)
    3472         numberArtificials++;
     3486        numberArtificials += SEGMENTS;
    34733487      if (rowUpper_[iRow]<1.0e20)
    3474         numberArtificials++;
     3488        numberArtificials += SEGMENTS;
    34753489      if (numberArtificials==rowLength[iRow]) {
    34763490        // all possible
     
    36833697      objValue=objective_->objectiveValue(this,solution);
    36843698    }
     3699    double infPenalty=0.0;
    36853700    for (iConstraint=0;iConstraint<numberConstraints;iConstraint++) {
    36863701      ClpConstraint * constraint = constraints[iConstraint];
     
    36923707               newModel.primalRowSolution()[iRow],
    36933708               dualValue,offset);
     3709      double infeasibility=0.0;
    36943710      if (functionValue<rowLower_[iRow]-1.0e-5) {
    3695         double under = rowLower_[iRow]-functionValue;
    3696         infValue += under;
     3711        infeasibility = rowLower_[iRow]-functionValue;
    36973712      } else if (functionValue>rowUpper_[iRow]+1.0e-5) {
    3698         double over = functionValue-rowUpper_[iRow];
    3699         infValue += over;
     3713        infeasibility = functionValue-rowUpper_[iRow];
     3714      }
     3715      infValue += infeasibility;
     3716      for (int k=0;k<SEGMENTS;k++) {
     3717        if (infeasibility<=0)
     3718          break;
     3719        double thisPart = CoinMin(infeasibility,bounds[k]);
     3720        infPenalty += thisPart*penalties[k];
     3721        infeasibility -= thisPart;
    37003722      }
    37013723    }
    37023724    if (infValue)
    3703       printf("Sum infeasibilities %g ",infValue);
    3704     if (infValue<0.1)
    3705       infValue=0.0;
    3706     infValue *= penalty;
    3707     if (infValue)
    3708       printf("Infeasible obj %g ",infValue);
     3725      printf("Sum infeasibilities %g - penalty %g",infValue,infPenalty);
    37093726    if (objectiveOffset2)
    37103727      printf("offset2 %g\n",objectiveOffset2);
    37113728    objValue -= objectiveOffset2;
    37123729    printf("True objective %g\n",objValue);
    3713     objValue += infValue;
     3730    objValue += infPenalty;
    37143731    if (iPass) {
    37153732      double drop = lastObjective-objValue;
Note: See TracChangeset for help on using the changeset viewer.