- Timestamp:
- Jul 21, 2007 6:41:25 PM (14 years ago)
- Location:
- trunk/Cbc/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cbc/src/CbcBranchDynamic.cpp
r687 r699 434 434 preferredWay=preferredWay_; 435 435 // weight at 1.0 is max min 436 #define WEIGHT_AFTER 0. 9437 #define WEIGHT_BEFORE 0. 3436 #define WEIGHT_AFTER 0.7 437 #define WEIGHT_BEFORE 0.1 438 438 if (fabs(value-nearest)<=integerTolerance) { 439 439 return 0.0; … … 446 446 // no solution 447 447 returnValue = WEIGHT_BEFORE*minValue + (1.0-WEIGHT_BEFORE)*maxValue; 448 if (0) { 449 double sum; 450 int number; 451 double downCost2 = CoinMax(value-below,0.0); 452 sum = sumDownCost_; 453 number = numberTimesDown_; 454 if (number>0) 455 downCost2 *= sum / (double) number; 456 else 457 downCost2 *= downDynamicPseudoCost_; 458 double upCost2 = CoinMax((above-value),0.0); 459 sum = sumUpCost_; 460 number = numberTimesUp_; 461 if (number>0) 462 upCost2 *= sum / (double) number; 463 else 464 upCost2 *= upDynamicPseudoCost_; 465 double minValue2 = CoinMin(downCost2,upCost2); 466 double maxValue2 = CoinMax(downCost2,upCost2); 467 printf("%d value %g downC %g upC %g minV %g maxV %g downC2 %g upC2 %g minV2 %g maxV2 %g\n", 468 columnNumber_,value,downCost,upCost,minValue,maxValue, 469 downCost2,upCost2,minValue2,maxValue2); 470 } 448 471 } else { 449 472 // some solution … … 545 568 preferredWay=preferredWay_; 546 569 // weight at 1.0 is max min 547 #define WEIGHT_BEFORE 0.3548 570 if (fabs(value-nearest)<=integerTolerance) { 549 571 return 0.0; … … 1247 1269 bestNumberDown_=INT_MAX; 1248 1270 } 1249 if (stateOfSearch<=1&&thisOne->model()->currentNode()->depth()> 10) {1271 if (stateOfSearch<=1&&thisOne->model()->currentNode()->depth()>=8) { 1250 1272 #define TRY_STUFF 1 1251 1273 #ifdef TRY_STUFF -
trunk/Cbc/src/CbcModel.cpp
r696 r699 1121 1121 if (tree) 1122 1122 tree->passInSolution(bestSolution_,heuristicValue); 1123 }1124 for (i = 0;i<numberHeuristics_;i++) { 1125 // delete FPump 1126 CbcHeuristicFPump * pump 1127 = dynamic_cast<CbcHeuristicFPump *> (heuristic_[i]);1128 if (pump) { 1129 delete pump;1130 numberHeuristics_ --;1131 for (int j=i;j<numberHeuristics_;j++)1132 heuristic_[j] = heuristic_[j+1];1123 for (i = 0;i<numberHeuristics_;i++) { 1124 // delete FPump 1125 CbcHeuristicFPump * pump 1126 = dynamic_cast<CbcHeuristicFPump *> (heuristic_[i]); 1127 if (pump) { 1128 delete pump; 1129 numberHeuristics_ --; 1130 for (int j=i;j<numberHeuristics_;j++) 1131 heuristic_[j] = heuristic_[j+1]; 1132 } 1133 1133 } 1134 1134 } … … 1137 1137 statistics_ = NULL; 1138 1138 // Do on switch 1139 if (doStatistics ) {1139 if (doStatistics>0&&doStatistics<100) { 1140 1140 maximumStatistics_=10000; 1141 1141 statistics_ = new CbcStatistics * [maximumStatistics_]; … … 2376 2376 << maximumDepthActual_ 2377 2377 << numberDJFixed_ << CoinMessageEol ; 2378 if (doStatistics==100) { 2379 for (int i=0;i<numberObjects_;i++) { 2380 CbcSimpleIntegerDynamicPseudoCost * obj = 2381 dynamic_cast <CbcSimpleIntegerDynamicPseudoCost *>(object_[i]) ; 2382 if (obj) 2383 obj->print(); 2384 } 2385 } 2378 2386 if (statistics_) { 2379 2387 // report in some way … … 6905 6913 } else if (!obj2) { 6906 6914 allDynamic=false; 6915 } else { 6916 // synchronize trust 6917 obj2->setNumberBeforeTrust(numberBeforeTrust_); 6907 6918 } 6908 6919 } -
trunk/Cbc/src/CbcSolver.cpp
r696 r699 1405 1405 OsiClpSolverInterface * originalSolver = dynamic_cast<OsiClpSolverInterface *> (model.solver()); 1406 1406 assert (originalSolver); 1407 CoinMessageHandler * generalMessageHandler = originalSolver->messageHandler() ;1407 CoinMessageHandler * generalMessageHandler = originalSolver->messageHandler()->clone(); 1408 1408 CoinMessages generalMessages = originalSolver->getModelPtr()->messages(); 1409 1409 char generalPrint[10000]; … … 3045 3045 OsiSolverInterface * saveSolver=NULL; 3046 3046 CglPreProcess process; 3047 // Say integers in sync 3048 bool integersOK=true; 3047 3049 delete babModel; 3048 3050 babModel = new CbcModel(model); … … 3195 3197 solver2 = process.preProcessNonDefault(*saveSolver,translate[preProcess],numberPasses, 3196 3198 tunePreProcess); 3199 integersOK=false; // We need to redo if CbcObjects exist 3197 3200 // Tell solver we are not in Branch and Cut 3198 3201 saveSolver->setHintParam(OsiDoInBranchAndCut,false,OsiHintDo) ; … … 3367 3370 } 3368 3371 babModel->passInPriorities( priority,false); 3372 integersOK=true; 3369 3373 delete [] priority; 3370 3374 delete [] sort; … … 3711 3715 // ************************************************************* 3712 3716 // CbcObjects 3713 if (preProcess&& process.numberSOS()) {3717 if (preProcess&&(process.numberSOS()||babModel->numberObjects())) { 3714 3718 int numberSOS = process.numberSOS(); 3715 3719 int numberIntegers = babModel->numberIntegers(); … … 3721 3725 babModel->findIntegers(true,type); 3722 3726 numberIntegers = babModel->numberIntegers(); 3727 integersOK=true; 3723 3728 } 3724 3729 OsiObject ** oldObjects = babModel->objects(); … … 3728 3733 int numberOldObjects = babModel->numberObjects(); 3729 3734 int numberColumns = babModel->getNumCols(); 3735 if (!integersOK) { 3736 // backward pointer to new variables 3737 int * newColumn = new int[numberOriginalColumns]; 3738 int i; 3739 for (i=0;i<numberOriginalColumns;i++) 3740 newColumn[i]=-1; 3741 assert (originalColumns); 3742 for (i=0;i<numberColumns;i++) 3743 newColumn[originalColumns[i]]=i; 3744 // Change column numbers etc 3745 int n=0; 3746 for (int iObj = 0;iObj<numberOldObjects;iObj++) { 3747 int iColumn = oldObjects[iObj]->columnNumber(); 3748 if (iColumn<0||iColumn>=numberOriginalColumns) { 3749 oldObjects[n++]=oldObjects[iObj]; 3750 } else { 3751 iColumn = newColumn[iColumn]; 3752 if (iColumn>=0) { 3753 CbcSimpleInteger * obj = 3754 dynamic_cast <CbcSimpleInteger *>(oldObjects[iObj]) ; 3755 assert (obj); 3756 obj->setColumnNumber(iColumn); 3757 oldObjects[n++]=oldObjects[iObj]; 3758 } else { 3759 delete oldObjects[iObj]; 3760 } 3761 } 3762 } 3763 delete [] newColumn; 3764 babModel->setNumberObjects(n); 3765 } 3730 3766 for (int iObj = 0;iObj<numberOldObjects;iObj++) { 3731 oldObjects[iObj]->setPriority(numberColumns+1); 3767 if (process.numberSOS()) 3768 oldObjects[iObj]->setPriority(numberColumns+1); 3732 3769 int iColumn = oldObjects[iObj]->columnNumber(); 3733 assert (iColumn>=0); 3734 if (iColumn>=numberOriginalColumns) 3770 if (iColumn<0||iColumn>=numberOriginalColumns) 3735 3771 continue; 3736 3772 if (originalColumns) … … 4512 4548 } 4513 4549 model = *babModel; 4550 delete generalMessageHandler; 4514 4551 return 777; 4515 4552 } else { … … 6263 6300 dmalloc_shutdown(); 6264 6301 #endif 6302 delete generalMessageHandler; 6265 6303 return 0; 6266 6304 }
Note: See TracChangeset
for help on using the changeset viewer.