Changeset 1271 for stable/2.4/Cbc/src/CbcBranchDynamic.cpp
 Timestamp:
 Nov 5, 2009 10:57:25 AM (10 years ago)
 Location:
 stable/2.4
 Files:

 1 edited
 1 copied
Legend:
 Unmodified
 Added
 Removed

stable/2.4
 Property svn:externals

old new 7 7 CoinUtils https://projects.coinor.org/svn/CoinUtils/stable/2.5/CoinUtils 8 8 Cgl https://projects.coinor.org/svn/Cgl/stable/0.54/Cgl 9 Clp https://projects.coinor.org/svn/Clp/stable/1.1 0/Clp9 Clp https://projects.coinor.org/svn/Clp/stable/1.11/Clp 10 10 Osi https://projects.coinor.org/svn/Osi/stable/0.100/Osi 11 11 Vol https://projects.coinor.org/svn/Vol/stable/1.1/Vol

 Property svn:externals

stable/2.4/Cbc/src/CbcBranchDynamic.cpp
r1132 r1271 1 /* $Id$ */ 1 2 // Copyright (C) 2002, International Business Machines 2 3 // Corporation and others. All Rights Reserved. … … 20 21 #ifdef COIN_DEVELOP 21 22 typedef struct { 23 double sumUp_; 24 double upEst_; // or change in obj in update 25 double sumDown_; 26 double downEst_; // or movement in value in update 27 int sequence_; 28 int numberUp_; 29 int numberUpInf_; 30 int numberDown_; 31 int numberDownInf_; 22 32 char where_; 23 33 char status_; 24 unsigned short sequence_;25 int numberUp_;26 int numberUpInf_;27 float sumUp_;28 float upEst_; // or change in obj in update29 int numberDown_;30 int numberDownInf_;31 float sumDown_;32 float downEst_; // or movement in value in update33 34 } History; 34 35 History * history=NULL; … … 113 114 sumDownChange_(0.0), 114 115 sumUpChange_(0.0), 115 sumDownCostSquared_(0.0),116 sumUpCostSquared_(0.0),116 downShadowPrice_(0.0), 117 upShadowPrice_(0.0), 117 118 sumDownDecrease_(0.0), 118 119 sumUpDecrease_(0.0), … … 133 134 method_(0) 134 135 { 135 #ifdef CBC_INSTRUMENT136 numberTimesInfeasible_=0;137 #endif138 136 } 139 137 … … 150 148 sumDownChange_(0.0), 151 149 sumUpChange_(0.0), 152 sumDownCostSquared_(0.0),153 sumUpCostSquared_(0.0),150 downShadowPrice_(0.0), 151 upShadowPrice_(0.0), 154 152 sumDownDecrease_(0.0), 155 153 sumUpDecrease_(0.0), … … 170 168 method_(0) 171 169 { 172 #ifdef CBC_INSTRUMENT173 numberTimesInfeasible_=0;174 #endif175 170 const double * cost = model>getObjCoefficients(); 176 171 double costValue = CoinMax(1.0e5,fabs(cost[iColumn])); … … 218 213 sumDownChange_(0.0), 219 214 sumUpChange_(0.0), 220 sumDownCostSquared_(0.0),221 sumUpCostSquared_(0.0),215 downShadowPrice_(0.0), 216 upShadowPrice_(0.0), 222 217 sumDownDecrease_(0.0), 223 218 sumUpDecrease_(0.0), … … 238 233 method_(0) 239 234 { 240 #ifdef CBC_INSTRUMENT241 numberTimesInfeasible_=0;242 #endif243 235 downDynamicPseudoCost_ = downDynamicPseudoCost; 244 236 upDynamicPseudoCost_ = upDynamicPseudoCost; … … 275 267 */ 276 268 CbcSimpleIntegerDynamicPseudoCost::CbcSimpleIntegerDynamicPseudoCost (CbcModel * model, 277 int dummy, int iColumn, double downDynamicPseudoCost, 269 int /*dummy*/, 270 int iColumn, double downDynamicPseudoCost, 278 271 double upDynamicPseudoCost) 279 272 { … … 291 284 sumDownChange_(rhs.sumDownChange_), 292 285 sumUpChange_(rhs.sumUpChange_), 293 sumDownCostSquared_(rhs.sumDownCostSquared_),294 sumUpCostSquared_(rhs.sumUpCostSquared_),286 downShadowPrice_(rhs.downShadowPrice_), 287 upShadowPrice_(rhs.upShadowPrice_), 295 288 sumDownDecrease_(rhs.sumDownDecrease_), 296 289 sumUpDecrease_(rhs.sumUpDecrease_), … … 312 305 313 306 { 314 #ifdef CBC_INSTRUMENT315 numberTimesInfeasible_=rhs.numberTimesInfeasible_;316 #endif317 307 } 318 308 … … 337 327 sumDownChange_ = rhs.sumDownChange_; 338 328 sumUpChange_ = rhs.sumUpChange_; 339 sumDownCostSquared_ = rhs.sumDownCostSquared_;340 sumUpCostSquared_ = rhs.sumUpCostSquared_;329 downShadowPrice_ = rhs.downShadowPrice_; 330 upShadowPrice_ = rhs.upShadowPrice_; 341 331 sumDownDecrease_ = rhs.sumDownDecrease_; 342 332 sumUpDecrease_ = rhs.sumUpDecrease_; … … 355 345 numberTimesUpTotalFixed_ = rhs.numberTimesUpTotalFixed_; 356 346 numberTimesProbingTotal_ = rhs.numberTimesProbingTotal_; 357 #ifdef CBC_INSTRUMENT358 numberTimesInfeasible_=rhs.numberTimesInfeasible_;359 #endif360 347 method_=rhs.method_; 361 348 } … … 377 364 sumDownChange_ = otherObject>sumDownChange_; 378 365 sumUpChange_ = otherObject>sumUpChange_; 379 sumDownCostSquared_ = otherObject>sumDownCostSquared_;380 sumUpCostSquared_ = otherObject>sumUpCostSquared_;366 downShadowPrice_ = otherObject>downShadowPrice_; 367 upShadowPrice_ = otherObject>upShadowPrice_; 381 368 sumDownDecrease_ = otherObject>sumDownDecrease_; 382 369 sumUpDecrease_ = otherObject>sumUpDecrease_; … … 447 434 sumDownChange_ += rhsObject>sumDownChange_baseObject>sumDownChange_; 448 435 sumUpChange_ += rhsObject>sumUpChange_baseObject>sumUpChange_; 449 sumDownCostSquared_ += rhsObject>sumDownCostSquared_baseObject>sumDownCostSquared_;450 sumUpCostSquared_ += rhsObject>sumUpCostSquared_baseObject>sumUpCostSquared_;436 downShadowPrice_ = 0.0; 437 upShadowPrice_ = 0.0; 451 438 sumDownDecrease_ += rhsObject>sumDownDecrease_baseObject>sumDownDecrease_; 452 439 sumUpDecrease_ += rhsObject>sumUpDecrease_baseObject>sumUpDecrease_; … … 491 478 if (sumUpChange_!= otherObject>sumUpChange_) 492 479 okay=false; 493 if ( sumDownCostSquared_!= otherObject>sumDownCostSquared_)494 okay=false; 495 if ( sumUpCostSquared_!= otherObject>sumUpCostSquared_)480 if (downShadowPrice_!= otherObject>downShadowPrice_) 481 okay=false; 482 if (upShadowPrice_!= otherObject>upShadowPrice_) 496 483 okay=false; 497 484 if (sumDownDecrease_!= otherObject>sumDownDecrease_) … … 526 513 okay=false; 527 514 return okay; 528 }529 // Creates a branching objecty530 CbcBranchingObject *531 CbcSimpleIntegerDynamicPseudoCost::createBranch(int way)532 {533 const double * solution = model_>testSolution();534 const double * lower = model_>getCbcColLower();535 const double * upper = model_>getCbcColUpper();536 double value = solution[columnNumber_];537 value = CoinMax(value, lower[columnNumber_]);538 value = CoinMin(value, upper[columnNumber_]);539 #ifndef NDEBUG540 double nearest = floor(value+0.5);541 double integerTolerance =542 model_>getDblParam(CbcModel::CbcIntegerTolerance);543 assert (upper[columnNumber_]>lower[columnNumber_]);544 #endif545 if (!model_>hotstartSolution()) {546 assert (fabs(valuenearest)>integerTolerance);547 } else {548 const double * hotstartSolution = model_>hotstartSolution();549 double targetValue = hotstartSolution[columnNumber_];550 if (way>0)551 value = targetValue0.1;552 else553 value = targetValue+0.1;554 }555 CbcDynamicPseudoCostBranchingObject * newObject =556 new CbcDynamicPseudoCostBranchingObject(model_,columnNumber_,way,557 value,this);558 double up = upDynamicPseudoCost_*(ceil(value)value);559 double down = downDynamicPseudoCost_*(valuefloor(value));560 double changeInGuessed=updown;561 if (way>0)562 changeInGuessed =  changeInGuessed;563 changeInGuessed=CoinMax(0.0,changeInGuessed);564 //if (way>0)565 //changeInGuessed += 1.0e8; // bias to stay up566 newObject>setChangeInGuessed(changeInGuessed);567 newObject>setOriginalObject(this);568 return newObject;569 515 } 570 516 /* Create an OsiSolverBranch object … … 594 540 } 595 541 //#define FUNNY_BRANCHING 596 // Infeasibility  large is 0.5597 542 double 598 CbcSimpleIntegerDynamicPseudoCost::infeasibility(int & preferredWay) const 543 CbcSimpleIntegerDynamicPseudoCost::infeasibility(const OsiBranchingInformation * info, 544 int &preferredWay) const 599 545 { 600 546 assert (downDynamicPseudoCost_>1.0e40&&upDynamicPseudoCost_>1.0e40); … … 611 557 // Lower bound active 612 558 lastUpDecrease_++; 613 sumDownCostSquared_ += djValue;614 559 } 615 560 } else if (djValue<1.0e6) { … … 618 563 // Upper bound active 619 564 lastUpDecrease_++; 620 sumUpCostSquared_ = djValue;621 565 } 622 566 } … … 673 617 #endif 674 618 #endif 675 if (number>0.0) 676 downCost *= sum / number; 677 else 678 downCost *= downDynamicPseudoCost_; 619 #define MOD_SHADOW 1 620 #if MOD_SHADOW>0 621 if (!downShadowPrice_) { 622 if (number>0.0) 623 downCost *= sum / number; 624 else 625 downCost *= downDynamicPseudoCost_; 626 } else if (downShadowPrice_>0.0) { 627 downCost *= downShadowPrice_; 628 } else { 629 downCost *= (downDynamicPseudoCost_downShadowPrice_); 630 } 631 #else 632 if (downShadowPrice_<=0.0) { 633 if (number>0.0) 634 downCost *= sum / number; 635 else 636 downCost *= downDynamicPseudoCost_; 637 } else { 638 downCost *= downShadowPrice_; 639 } 640 #endif 679 641 double upCost = CoinMax((abovevalue),0.0); 680 642 #if TYPE2==0 … … 696 658 #endif 697 659 #endif 698 if (number>0.0) 699 upCost *= sum / number; 700 else 701 upCost *= upDynamicPseudoCost_; 660 #if MOD_SHADOW>0 661 if (!upShadowPrice_) { 662 if (number>0.0) 663 upCost *= sum / number; 664 else 665 upCost *= upDynamicPseudoCost_; 666 } else if (upShadowPrice_>0.0) { 667 upCost *= upShadowPrice_; 668 } else { 669 upCost *= (upDynamicPseudoCost_upShadowPrice_); 670 } 671 #else 672 if (upShadowPrice_<=0.0) { 673 if (number>0.0) 674 upCost *= sum / number; 675 else 676 upCost *= upDynamicPseudoCost_; 677 } else { 678 upCost *= upShadowPrice_; 679 } 680 #endif 702 681 if (downCost>=upCost) 703 682 preferredWay=1; … … 714 693 upCost *= ratio; 715 694 if ((lastUpDecrease_%100)==1) 716 printf("col %d total %d djtimes %d down %g up %g\n", 717 columnNumber_,lastDownDecrease_,lastUpDecrease_, 718 sumDownCostSquared_,sumUpCostSquared_); 695 printf("col %d total %d djtimes %d\n", 696 columnNumber_,lastDownDecrease_,lastUpDecrease_); 719 697 } 720 698 #endif 721 699 if (preferredWay_) 722 700 preferredWay=preferredWay_; 701 if (info>hotstartSolution_) { 702 double targetValue = info>hotstartSolution_[columnNumber_]; 703 if (value>targetValue) 704 preferredWay=1; 705 else 706 preferredWay=1; 707 } 723 708 // weight at 1.0 is max min 724 709 #define WEIGHT_AFTER 0.8 725 710 #define WEIGHT_BEFORE 0.1 711 //Stolen from Constraint Integer Programming book (with epsilon change) 712 #define WEIGHT_PRODUCT 726 713 if (fabs(valuenearest)<=integerTolerance) { 727 714 if (priority_!=999) … … 730 717 return 1.0e13; 731 718 } else { 732 #ifdef CBC_INSTRUMENT733 numberTimesInfeasible_++;734 #endif735 719 int stateOfSearch = model_>stateOfSearch()%10; 736 720 double returnValue=0.0; … … 770 754 // some solution 771 755 where='I'; 756 #ifndef WEIGHT_PRODUCT 772 757 returnValue = WEIGHT_AFTER*minValue + (1.0WEIGHT_AFTER)*maxValue; 758 #else 759 double minProductWeight = model_>getDblParam(CbcModel::CbcSmallChange); 760 returnValue = CoinMax(minValue,minProductWeight)*CoinMax(maxValue,minProductWeight); 761 //returnValue += minProductWeight*minValue; 762 #endif 773 763 } 774 764 if (numberTimesUp_<numberBeforeTrust_ … … 799 789 returnValue *= 1.0e3; 800 790 } 801 #if 0 //def CBC_INSTRUMENT802 int nn = numberTimesInfeasible_  CoinMax(numberTimesUp_,numberTimesDown_);803 if (nn<0) {804 // Something to do with parallel synchronization805 numberTimesInfeasible_ = CoinMax(numberTimesUp_,numberTimesDown_);806 } else if (nn) {807 returnValue *= sqrt(static_cast<double> (nn));808 }809 #endif810 791 #ifdef COIN_DEVELOP 811 792 History hist; … … 827 808 } 828 809 } 829 830 double831 CbcSimpleIntegerDynamicPseudoCost::infeasibility(const OsiSolverInterface * solver, const OsiBranchingInformation * info,832 int & preferredWay) const833 {834 double value = info>solution_[columnNumber_];835 value = CoinMax(value, info>lower_[columnNumber_]);836 value = CoinMin(value, info>upper_[columnNumber_]);837 if (info>upper_[columnNumber_]==info>lower_[columnNumber_]) {838 // fixed839 preferredWay=1;840 return 0.0;841 }842 assert (breakEven_>0.0&&breakEven_<1.0);843 double nearest = floor(value+0.5);844 double integerTolerance = info>integerTolerance_;845 double below = floor(value+integerTolerance);846 double above = below+1.0;847 if (above>info>upper_[columnNumber_]) {848 above=below;849 below = above 1;850 }851 #if INFEAS==1852 double objectiveValue = info>objectiveValue_;853 double distanceToCutoff = info>cutoff_  objectiveValue;854 if (distanceToCutoff<1.0e20)855 distanceToCutoff *= 10.0;856 else857 distanceToCutoff = 1.0e2 + fabs(objectiveValue);858 #endif859 distanceToCutoff = CoinMax(distanceToCutoff,1.0e12*(1.0+fabs(objectiveValue)));860 double sum;861 int number;862 double downCost = CoinMax(valuebelow,0.0);863 sum = sumDownCost_;864 number = numberTimesDown_;865 #if INFEAS==1866 sum += numberTimesDownInfeasible_*(distanceToCutoff/(downCost+1.0e12));867 #endif868 if (number>0)869 downCost *= sum / static_cast<double> (number);870 else871 downCost *= downDynamicPseudoCost_;872 double upCost = CoinMax((abovevalue),0.0);873 sum = sumUpCost_;874 number = numberTimesUp_;875 #if INFEAS==1876 sum += numberTimesUpInfeasible_*(distanceToCutoff/(upCost+1.0e12));877 #endif878 if (number>0)879 upCost *= sum / static_cast<double> (number);880 else881 upCost *= upDynamicPseudoCost_;882 if (downCost>=upCost)883 preferredWay=1;884 else885 preferredWay=1;886 // See if up down choice set887 if (upDownSeparator_>0.0) {888 preferredWay = (valuebelow>=upDownSeparator_) ? 1 : 1;889 }890 if (preferredWay_)891 preferredWay=preferredWay_;892 // weight at 1.0 is max min893 if (fabs(valuenearest)<=integerTolerance) {894 return 0.0;895 } else {896 double returnValue=0.0;897 double minValue = CoinMin(downCost,upCost);898 double maxValue = CoinMax(downCost,upCost);899 if (!info>numberBranchingSolutions_info>depth_<=10/* was maxValue>0.2*distanceToCutoff*/) {900 // no solution901 returnValue = WEIGHT_BEFORE*minValue + (1.0WEIGHT_BEFORE)*maxValue;902 } else {903 // some solution904 returnValue = WEIGHT_AFTER*minValue + (1.0WEIGHT_AFTER)*maxValue;905 }906 if (numberTimesUp_<numberBeforeTrust_907 numberTimesDown_<numberBeforeTrust_) {908 //if (returnValue<1.0e10)909 //returnValue += 1.0e12;910 //else911 returnValue *= 1.0e3;912 if (!numberTimesUp_&&!numberTimesDown_)913 returnValue=1.0e50;914 }915 //if (fabs(value0.5)<1.0e5) {916 //returnValue = 3.0*returnValue + 0.2;917 //} else if (value>0.9) {918 //returnValue = 2.0*returnValue + 0.1;919 //}920 if (method_==1) {921 // probing922 // average923 double up=1.0e15;924 double down=1.0e15;925 if (numberTimesProbingTotal_) {926 up += numberTimesUpTotalFixed_/static_cast<double> (numberTimesProbingTotal_);927 down += numberTimesDownTotalFixed_/static_cast<double> (numberTimesProbingTotal_);928 }929 returnValue = 1 + 10.0*CoinMin(numberTimesDownLocalFixed_,numberTimesUpLocalFixed_) +930 CoinMin(down,up);931 returnValue *= 1.0e3;932 }933 return CoinMax(returnValue,1.0e15);934 }935 }936 810 // Creates a branching object 937 811 CbcBranchingObject * 938 CbcSimpleIntegerDynamicPseudoCost::createBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) 812 CbcSimpleIntegerDynamicPseudoCost::createCbcBranch(OsiSolverInterface * /*solver*/, 813 const OsiBranchingInformation * info, int way) 939 814 { 940 815 double value = info>solution_[columnNumber_]; … … 1046 921 #endif 1047 922 } 923 // Modify down pseudo cost in a slightly different way 924 void 925 CbcSimpleIntegerDynamicPseudoCost::updateDownDynamicPseudoCost(double value) 926 { 927 sumDownCost_ += value; 928 numberTimesDown_++; 929 downDynamicPseudoCost_=sumDownCost_/static_cast<double>(numberTimesDown_); 930 } 1048 931 // Set up pseudo cost 1049 932 void … … 1064 947 } 1065 948 #endif 949 } 950 // Modify up pseudo cost in a slightly different way 951 void 952 CbcSimpleIntegerDynamicPseudoCost::updateUpDynamicPseudoCost(double value) 953 { 954 sumUpCost_ += value; 955 numberTimesUp_++; 956 upDynamicPseudoCost_=sumUpCost_/static_cast<double>(numberTimesUp_); 1066 957 } 1067 958 /* Pass in information on branch just done and create CbcObjectUpdateData instance. … … 1285 1176 //print(1,0.5); 1286 1177 assert (downDynamicPseudoCost_>1.0e40&&upDynamicPseudoCost_>1.0e40); 1178 #if MOD_SHADOW>1 1179 if (upShadowPrice_>0.0&&numberTimesDown_>=numberBeforeTrust_ 1180 &&numberTimesUp_>=numberBeforeTrust_) { 1181 // Set negative 1182 upShadowPrice_=upShadowPrice_; 1183 assert (downShadowPrice_>0.0); 1184 downShadowPrice_ =  downShadowPrice_; 1185 } 1186 #endif 1287 1187 } 1288 1188 // Updates stuff like pseudocosts after mini branch and bound … … 1292 1192 int numberUpInfeasible,double sumUp) 1293 1193 { 1294 #ifdef CBC_INSTRUMENT1295 int difference = numberDownnumberTimesDown_;1296 difference += numberUpnumberTimesUp_;1297 numberTimesInfeasible_ += 2*difference;1298 #endif1299 1194 numberTimesDown_ = numberDown; 1300 1195 numberTimesDownInfeasible_ = numberDownInfeasible; … … 1332 1227 if (numberTimesDown_) { 1333 1228 meanDown = sumDownCost_/static_cast<double> (numberTimesDown_); 1334 devDown = meanDown*meanDown + sumDownCostSquared_  1335 2.0*meanDown*sumDownCost_; 1229 devDown = meanDown*meanDown  2.0*meanDown*sumDownCost_; 1336 1230 if (devDown>=0.0) 1337 1231 devDown = sqrt(devDown); … … 1341 1235 if (numberTimesUp_) { 1342 1236 meanUp = sumUpCost_/static_cast<double> (numberTimesUp_); 1343 devUp = meanUp*meanUp + sumUpCostSquared_  1344 2.0*meanUp*sumUpCost_; 1237 devUp = meanUp*meanUp  2.0*meanUp*sumUpCost_; 1345 1238 if (devUp>=0.0) 1346 1239 devUp = sqrt(devUp); 1347 1240 } 1348 #if 01349 1241 printf("%d down %d times (%d inf) mean %g (dev %g) up %d times (%d inf) mean %g (dev %g)\n", 1350 1242 columnNumber_, 1351 1243 numberTimesDown_,numberTimesDownInfeasible_,meanDown,devDown, 1352 1244 numberTimesUp_,numberTimesUpInfeasible_,meanUp,devUp); 1353 #else1354 int n=0;1355 #ifdef CBC_INSTRUMENT1356 n=numberTimesInfeasible_;1357 #endif1358 printf("%d down %d times (%d inf) mean %g up %d times (%d inf) mean %g  pseudocosts %g %g  inftimes %d\n",1359 columnNumber_,1360 numberTimesDown_,numberTimesDownInfeasible_,meanDown,1361 numberTimesUp_,numberTimesUpInfeasible_,meanUp,downDynamicPseudoCost_,upDynamicPseudoCost_,n);1362 #endif1363 1245 } else { 1364 1246 const double * upper = model_>getCbcColUpper(); … … 1437 1319 int variable, int way, 1438 1320 double lowerValue, 1439 double upperValue)1321 double /*upperValue*/) 1440 1322 :CbcIntegerBranchingObject(model,variable,way,lowerValue) 1441 1323 { … … 1564 1446 // Initialize i.e. before start of choosing at a node 1565 1447 void 1566 CbcBranchDynamicDecision::initialize(CbcModel * model)1448 CbcBranchDynamicDecision::initialize(CbcModel * /*model*/) 1567 1449 { 1568 1450 bestCriterion_ = 0.0; … … 1774 1656 int 1775 1657 CbcBranchDynamicDecision::betterBranch(CbcBranchingObject * thisOne, 1776 CbcBranchingObject * bestSoFar,1658 CbcBranchingObject * /*bestSoFar*/, 1777 1659 double changeUp, int numInfUp, 1778 1660 double changeDown, int numInfDown) … … 1875 1757 #endif 1876 1758 } else { 1877 //#define TRY_STUFF 21759 #define TRY_STUFF 2 1878 1760 #if TRY_STUFF > 1 1879 1761 // Get current number of infeasibilities, cutoff and current objective … … 1892 1774 //maxValue = CoinMin(maxValue,minValue*2.0); 1893 1775 #endif 1776 #ifndef WEIGHT_PRODUCT 1894 1777 value = WEIGHT_AFTER*minValue + (1.0WEIGHT_AFTER)*maxValue; 1778 #else 1779 double minProductWeight = model>getDblParam(CbcModel::CbcSmallChange); 1780 value = CoinMax(minValue,minProductWeight)*CoinMax(maxValue,minProductWeight); 1781 //value += minProductWeight*minValue; 1782 #endif 1895 1783 double useValue = value; 1896 1784 double useBest = bestCriterion_; … … 1904 1792 // not much in it  look at unsatisfied 1905 1793 if (thisNumber<numberUnsatisfiedbestNumber<numberUnsatisfied) { 1906 double perInteger = distance/ ( (double) numberUnsatisfied);1794 double perInteger = distance/ (static_cast<double> (numberUnsatisfied)); 1907 1795 useValue += thisNumber*perInteger; 1908 1796 useBest += bestNumber*perInteger; … … 1989 1877 FILE * fp = fopen(file,"w"); 1990 1878 assert(fp); 1991 unsigned short numberIntegers=0;1879 int numberIntegers=0; 1992 1880 int i; 1993 1881 for (i=0;i<numberHistory;i++) {
Note: See TracChangeset
for help on using the changeset viewer.