Changeset 1752 for stable


Ignore:
Timestamp:
Oct 31, 2011 7:34:55 PM (8 years ago)
Author:
tkr
Message:

Merging r1750 and r1751 from trunk

Location:
stable/2.7/Cbc
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • stable/2.7/Cbc

  • stable/2.7/Cbc/configure

    r1749 r1752  
    2921929219
    2922029220
     29221
     29222
     29223
     29224
     29225
     29226
     29227
     29228
     29229
     29230
     29231
     29232
     29233
     29234
     29235
     29236
    2922129237#check if user provided LIBS, CFLAGS, or DATA for package or disables use of package
    2922229238if test $coin_has_asl != skipping; then
     
    2923229248       ASL_PCLIBS="$withval"
    2923329249
     29250         CBCLIB_PCLIBS="$withval $CBCLIB_PCLIBS"
     29251         CBCLIB_LIBS="$withval $CBCLIB_LIBS"
     29252
     29253         CBCGENERIC_PCLIBS="$withval $CBCGENERIC_PCLIBS"
     29254         CBCGENERIC_LIBS="$withval $CBCGENERIC_LIBS"
     29255
    2923429256       # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables
    2923529257       if test -z "$PKG_CONFIG" ; then
    2923629258         ASL_LIBS_INSTALLED="$withval"
    29237 
     29259         CBCLIB_LIBS_INSTALLED="$withval $CBCLIB_LIBS_INSTALLED"CBCGENERIC_LIBS_INSTALLED="$withval $CBCGENERIC_LIBS_INSTALLED"
    2923829260       fi
    2923929261     fi
     
    2925229274       coin_has_asl=yes
    2925329275       ASL_CFLAGS="-I`${CYGPATH_W} $withval`"
    29254 
     29276       CBCLIB_CFLAGS="-I`${CYGPATH_W} $withval` $CBCLIB_CFLAGS"CBCGENERIC_CFLAGS="-I`${CYGPATH_W} $withval` $CBCGENERIC_CFLAGS"
    2925529277       # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables
    2925629278       if test -z "$PKG_CONFIG" ; then
    2925729279         ASL_CFLAGS_INSTALLED="$ASL_CFLAGS"
    29258 
     29280         CBCLIB_CFLAGS_INSTALLED="$ASL_CFLAGS $CBCLIB_CFLAGS_INSTALLED"CBCGENERIC_CFLAGS_INSTALLED="$ASL_CFLAGS $CBCGENERIC_CFLAGS_INSTALLED"
    2925929281       fi
    2926029282     fi
     
    2932029342        ASL_PCREQUIRES="coinasl"
    2932129343
    29322         # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in
     29344        # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in CbcLib CbcGeneric
     29345
     29346          CBCLIB_PCREQUIRES="coinasl $CBCLIB_PCREQUIRES"
     29347          CBCLIB_CFLAGS="$ASL_CFLAGS $CBCLIB_CFLAGS"
     29348          CBCLIB_LIBS="$ASL_LIBS $CBCLIB_LIBS"
     29349
     29350          CBCGENERIC_PCREQUIRES="coinasl $CBCGENERIC_PCREQUIRES"
     29351          CBCGENERIC_CFLAGS="$ASL_CFLAGS $CBCGENERIC_CFLAGS"
     29352          CBCGENERIC_LIBS="$ASL_LIBS $CBCGENERIC_LIBS"
    2932329353
    2932429354
     
    2956529595  ASL_PCREQUIRES="coinasl"
    2956629596
     29597    CBCLIB_PCREQUIRES="coinasl $CBCLIB_PCREQUIRES"
     29598    CBCLIB_CFLAGS="$ASL_CFLAGS $CBCLIB_CFLAGS"
     29599    CBCLIB_LIBS="$ASL_LIBS $CBCLIB_LIBS"
     29600    CBCLIB_CFLAGS_INSTALLED="$ASL_CFLAGS_INSTALLED $CBCLIB_CFLAGS_INSTALLED"
     29601    CBCLIB_LIBS_INSTALLED="$ASL_LIBS_INSTALLED $CBCLIB_LIBS_INSTALLED"
     29602
     29603    CBCGENERIC_PCREQUIRES="coinasl $CBCGENERIC_PCREQUIRES"
     29604    CBCGENERIC_CFLAGS="$ASL_CFLAGS $CBCGENERIC_CFLAGS"
     29605    CBCGENERIC_LIBS="$ASL_LIBS $CBCGENERIC_LIBS"
     29606    CBCGENERIC_CFLAGS_INSTALLED="$ASL_CFLAGS_INSTALLED $CBCGENERIC_CFLAGS_INSTALLED"
     29607    CBCGENERIC_LIBS_INSTALLED="$ASL_LIBS_INSTALLED $CBCGENERIC_LIBS_INSTALLED"
     29608
    2956729609
    2956829610fi
     
    2961129653     # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl)
    2961229654     ASL_DEPENDENCIES=`echo " $ASL_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ -framework  *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'`
     29655
     29656       CBCLIB_DEPENDENCIES=`echo " $CBCLIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ -framework  *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'`
     29657
     29658       CBCGENERIC_DEPENDENCIES=`echo " $CBCGENERIC_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ -framework  *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'`
    2961329659
    2961429660  fi
     
    2963929685echo "$as_me: ASL PCREQUIRES are $ASL_PCREQUIRES" >&6;}
    2964029686    fi
     29687
     29688      { echo "$as_me:$LINENO: CbcLib CFLAGS are $CBCLIB_CFLAGS" >&5
     29689echo "$as_me: CbcLib CFLAGS are $CBCLIB_CFLAGS" >&6;}
     29690      { echo "$as_me:$LINENO: CbcLib LIBS   are $CBCLIB_LIBS" >&5
     29691echo "$as_me: CbcLib LIBS   are $CBCLIB_LIBS" >&6;}
     29692      { echo "$as_me:$LINENO: CbcLib DEPENDENCIES are $CBCLIB_DEPENDENCIES" >&5
     29693echo "$as_me: CbcLib DEPENDENCIES are $CBCLIB_DEPENDENCIES" >&6;}
     29694
     29695      { echo "$as_me:$LINENO: CbcGeneric CFLAGS are $CBCGENERIC_CFLAGS" >&5
     29696echo "$as_me: CbcGeneric CFLAGS are $CBCGENERIC_CFLAGS" >&6;}
     29697      { echo "$as_me:$LINENO: CbcGeneric LIBS   are $CBCGENERIC_LIBS" >&5
     29698echo "$as_me: CbcGeneric LIBS   are $CBCGENERIC_LIBS" >&6;}
     29699      { echo "$as_me:$LINENO: CbcGeneric DEPENDENCIES are $CBCGENERIC_DEPENDENCIES" >&5
     29700echo "$as_me: CbcGeneric DEPENDENCIES are $CBCGENERIC_DEPENDENCIES" >&6;}
    2964129701
    2964229702  fi
  • stable/2.7/Cbc/configure.ac

    r1749 r1752  
    104104
    105105# Ampl Solver library
    106 AC_COIN_CHECK_PACKAGE(ASL, [coinasl])
     106AC_COIN_CHECK_PACKAGE(ASL, [coinasl], [CbcLib CbcGeneric])
    107107
    108108#############################################################################
  • stable/2.7/Cbc/src/CbcSolver.cpp

    r1734 r1752  
    62096209                                    return returnCode;
    62106210                                }
     6211#ifdef COIN_HAS_ASL
     6212                                if (statusUserFunction_[0]) {
     6213                                   clpSolver = dynamic_cast< OsiClpSolverInterface*> (babModel_->solver());
     6214                                   lpSolver = clpSolver->getModelPtr();
     6215                                   double value = babModel_->getObjValue()*lpSolver->getObjSense();
     6216                                   char buf[300];
     6217                                   int pos=0;
     6218                                   if (iStat==0) {
     6219                                      if (babModel_->getObjValue()<1.0e40) {
     6220                                         pos += sprintf(buf+pos,"optimal," );
     6221                                      } else {
     6222                                         // infeasible
     6223                                         iStat=1;
     6224                                         pos += sprintf(buf+pos,"infeasible,");
     6225                                      }
     6226                                   } else if (iStat==1) {
     6227                                      if (iStat2!=6)
     6228                                         iStat=3;
     6229                                      else
     6230                                         iStat=4;
     6231                                      pos += sprintf(buf+pos,"stopped on %s,",minor[iStat2].c_str());
     6232                                   } else if (iStat==2) {
     6233                                      iStat = 7;
     6234                                      pos += sprintf(buf+pos,"stopped on difficulties,");
     6235                                   } else if (iStat==5) {
     6236                                      iStat = 3;
     6237                                      pos += sprintf(buf+pos,"stopped on ctrl-c,");
     6238                                   } else {
     6239                                      pos += sprintf(buf+pos,"status unknown,");
     6240                                      iStat=6;
     6241                                   }
     6242                                   info.problemStatus=iStat;
     6243                                   info.objValue = value;
     6244                                   if (babModel_->getObjValue()<1.0e40) {
     6245                                      int precision = ampl_obj_prec();
     6246                                      if (precision>0)
     6247                                         pos += sprintf(buf+pos," objective %.*g",precision,
     6248                                                        value);
     6249                                      else
     6250                                         pos += sprintf(buf+pos," objective %g",value);
     6251                                   }
     6252                                   sprintf(buf+pos,"\n%d nodes, %d iterations, %g seconds",
     6253                                           babModel_->getNodeCount(),
     6254                                           babModel_->getIterationCount(),
     6255                                           totalTime);
     6256                                   if (bestSolution) {
     6257                                      free(info.primalSolution);
     6258                                      if (!numberKnapsack) {
     6259                                         info.primalSolution = (double *) malloc(n*sizeof(double));
     6260                                         CoinCopyN(lpSolver->primalColumnSolution(),n,info.primalSolution);
     6261                                         int numberRows = lpSolver->numberRows();
     6262                                         free(info.dualSolution);
     6263                                         info.dualSolution = (double *) malloc(numberRows*sizeof(double));
     6264                                         CoinCopyN(lpSolver->dualRowSolution(),numberRows,info.dualSolution);
     6265                                      } else {
     6266                                         // expanded knapsack
     6267                                         info.dualSolution=NULL;
     6268                                         int numberColumns = saveCoinModel.numberColumns();
     6269                                         info.primalSolution = (double *) malloc(numberColumns*sizeof(double));
     6270                                         // Fills in original solution (coinModel length)
     6271                                         afterKnapsack(saveTightenedModel,  whichColumn,  knapsackStart,
     6272                                                       knapsackRow,  numberKnapsack,
     6273                                                       lpSolver->primalColumnSolution(), info.primalSolution,1);
     6274                                      }
     6275                                   } else {
     6276                                      info.primalSolution=NULL;
     6277                                      info.dualSolution=NULL;
     6278                                   }
     6279                                   // put buffer into info
     6280                                   strcpy(info.buffer,buf);
     6281                                }
     6282#endif
    62116283                            } else {
    62126284                                std::cout << "Model strengthened - now has " << clpSolver->getNumRows()
  • stable/2.7/Cbc/src/CbcSolverExpandKnapsack.cpp

    r1573 r1752  
    528528
    529529
     530// Fills in original solution (coinModel length)
     531void
     532afterKnapsack(const CoinModel & coinModel2, const int * whichColumn, const int * knapsackStart,
     533              const int * knapsackRow, int numberKnapsack,
     534              const double * knapsackSolution, double * solution, int logLevel)
     535{
     536   CoinModel coinModel = coinModel2;
     537   int numberColumns = coinModel.numberColumns();
     538   int iColumn;
     539   // associate all columns to stop possible error messages
     540   for (iColumn=0;iColumn<numberColumns;iColumn++) {
     541      coinModel.associateElement(coinModel.columnName(iColumn),1.0);
     542   }
     543   CoinZeroN(solution,numberColumns);
     544   int nCol=knapsackStart[0];
     545   for (iColumn=0;iColumn<nCol;iColumn++) {
     546      int jColumn = whichColumn[iColumn];
     547      solution[jColumn]=knapsackSolution[iColumn];
     548   }
     549   int * buildRow = new int [numberColumns]; // wild overkill
     550   double * buildElement = new double [numberColumns];
     551   int iKnapsack;
     552   for (iKnapsack=0;iKnapsack<numberKnapsack;iKnapsack++) {
     553      int k=-1;
     554      double value=0.0;
     555      for (iColumn=knapsackStart[iKnapsack];iColumn<knapsackStart[iKnapsack+1];iColumn++) {
     556         if (knapsackSolution[iColumn]>1.0e-5) {
     557            if (k>=0) {
     558               printf("Two nonzero values for knapsack %d at (%d,%g) and (%d,%g)\n",iKnapsack,
     559                      k,knapsackSolution[k],iColumn,knapsackSolution[iColumn]);
     560               abort();
     561            }
     562            k=iColumn;
     563            value=floor(knapsackSolution[iColumn]+0.5);
     564            assert (fabs(value-knapsackSolution[iColumn])<1.0e-5);
     565         }
     566      }
     567      if (k>=0) {
     568         int iRow = knapsackRow[iKnapsack];
     569         int nCreate = 10000;
     570         int nel=coinModel.expandKnapsack(iRow,nCreate,NULL,NULL,buildRow,buildElement,k-knapsackStart[iKnapsack]);
     571         assert (nel);
     572         if (logLevel>0)
     573            printf("expanded column %d in knapsack %d has %d nonzero entries:\n",
     574                   k-knapsackStart[iKnapsack],iKnapsack,nel);
     575         for (int i=0;i<nel;i++) {
     576            int jColumn = buildRow[i];
     577            double value = buildElement[i];
     578            if (logLevel>0)
     579               printf("%d - original %d has value %g\n",i,jColumn,value);
     580            solution[jColumn]=value;
     581         }
     582      }
     583   }
     584   delete [] buildRow;
     585   delete [] buildElement;
     586#if 0
     587   for (iColumn=0;iColumn<numberColumns;iColumn++) {
     588      if (solution[iColumn]>1.0e-5&&coinModel.isInteger(iColumn))
     589         printf("%d %g\n",iColumn,solution[iColumn]);
     590   }
     591#endif
     592}
  • stable/2.7/Cbc/src/CbcSolverExpandKnapsack.hpp

    r1573 r1752  
    2020               int fixedPriority, int SOSPriority, CoinModel & tightenedModel);
    2121
     22void
     23afterKnapsack(const CoinModel & coinModel2, const int * whichColumn, const int * knapsackStart,
     24              const int * knapsackRow, int numberKnapsack,
     25              const double * knapsackSolution, double * solution, int logLevel);
     26
    2227#endif
    2328
  • stable/2.7/Cbc/src/Cbc_ampl.cpp

    r1675 r1752  
    3030*/
    3131
     32#include "CbcConfig.h"
     33
    3234#ifdef COIN_HAS_ASL
    3335
    34 #include "CbcConfig.h"
    3536#ifdef HAVE_UNISTD_H
    3637# include "unistd.h"
     
    144145static Option_Info Oinfo = {
    145146    const_cast<char*>("cbc"),
    146     const_cast<char*>("Cbc 1.04"),
     147    const_cast<char*>("CBC trunk"),
    147148    const_cast<char*>("cbc_options"),
    148149    keywds,
Note: See TracChangeset for help on using the changeset viewer.