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:
2 edited

Legend:

Unmodified
Added
Removed
  • stable/2.7/Cbc

  • 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()
Note: See TracChangeset for help on using the changeset viewer.