|
View:
New views
4 Messages
—
Rating Filter:
Alert me
|
|
|
5.5.0.15 Solver Non-Optimal SolutionIn 5.5.0.5 this mps file gave the optimal solution (using the default settings). In the latest 5.5.0.15 version, the optimal solution is not found (using the default settings). Could someone explain why?
(I have added the mps file and output from the programs below.) This is the mps file : NAME MCPCSolverFile ROWS N OBJ L YEAR001 L YEAR002 L YEAR003 L YEAR004 L YEAR005 L YEAR006 L MCP0000 L MCP0001 L MCP0002 E MCF0000 E MCF0001 E MCF0002 G GRP0005 G AUG0001 COLUMNS COL0000 OBJ -225 COL0000 YEAR001 1500 COL0000 YEAR002 1500 COL0000 YEAR003 1500 COL0000 YEAR004 1500 COL0000 YEAR005 1500 COL0000 YEAR006 1500 COL0000 MCP0000 1 MNF0000 MCP0000 1 MNF0000 MCF0000 1 MIF0000 MCF0000 1 MIF0000 GRP0005 1 MIF0000 AUG0001 1 COL0006 OBJ -375 COL0006 YEAR001 1500 COL0006 YEAR002 1500 COL0006 YEAR003 1500 COL0006 YEAR004 1500 COL0006 YEAR005 1500 COL0006 YEAR006 1500 COL0006 MCP0001 1 MNF0001 MCP0001 1 MNF0001 MCF0001 1 MIF0001 MCF0001 1 MIF0001 GRP0005 1 MIF0001 AUG0001 1 COL0012 OBJ -390 COL0012 YEAR001 1500 COL0012 YEAR002 1500 COL0012 YEAR003 1500 COL0012 YEAR004 1500 COL0012 YEAR005 1500 COL0012 YEAR006 1500 COL0012 MCP0002 1 MNF0002 MCP0002 1 MNF0002 MCF0002 1 MIF0002 MCF0002 1 MIF0002 AUG0001 12.5 GIF0005 GRP0005 11.5 GIF0005 AUG0001 1 GNF0005 GRP0005 13.5 ANF0001 AUG0001 13 RHS RHS1 YEAR001 3700 RHS1 YEAR002 4500 RHS1 YEAR003 4500 RHS1 YEAR004 4500 RHS1 YEAR005 4500 RHS1 YEAR006 4500 RHS1 MCP0000 1 RHS1 MCP0001 1 RHS1 MCP0002 1 RHS1 MCF0000 1 RHS1 MCF0001 1 RHS1 MCF0002 1 RHS1 GRP0005 13 RHS1 AUG0001 13 BOUNDS LO BND1 COL0000 0 UP BND1 COL0000 1 LI BND1 MIF0000 0 UI BND1 MIF0000 1 LI BND1 MNF0000 0 UI BND1 MNF0000 1 LO BND1 COL0006 0 UP BND1 COL0006 1 LI BND1 MIF0001 0 UI BND1 MIF0001 1 LI BND1 MNF0001 0 UI BND1 MNF0001 1 LO BND1 COL0012 0 UP BND1 COL0012 1 LI BND1 MIF0002 0 UI BND1 MIF0002 1 LI BND1 MNF0002 0 UI BND1 MNF0002 1 LI BND1 GIF0005 0 UI BND1 GIF0005 1 LI BND1 GNF0005 0 UI BND1 GNF0005 1 LI BND1 ANF0001 0 UI BND1 ANF0001 1 RANGES BND2 MCP0000 0 BND2 MCP0001 0.6 BND2 MCP0002 0 BND2 GRP0005 2 BND2 AUG0001 4 ENDATA The optimal solution should be (given by 5.5.0.5) : Value of objective function: -790 Actual values of the variables: COL0000 1 MNF0000 0 MIF0000 1 COL0006 0.466667 MNF0001 0 MIF0001 1 COL0012 1 MNF0002 0 MIF0002 1 GIF0005 1 GNF0005 0 ANF0001 0 The result given by 5.5.0.15 is : Value of objective function: -765.00000000 Actual values of the variables: COL0000 0 MNF0000 1 MIF0000 0 COL0006 1 MNF0001 0 MIF0001 1 COL0012 1 MNF0002 0 MIF0002 1 GIF0005 0 GNF0005 1 ANF0001 0 |
|
|
RE: 5.5.0.15 Solver Non-Optimal SolutionThis is definitely a mystery. Lets hope Kjell weighs in.
Here is an lp format a bit easier to paste. /* MCPCSolverFile */ // * zfirth sept 28 2009 soln should be -790 (5.5.0.5) get -765 (5.5.0.15) // try swapping the equivalent 2 objective lines below // definitely a mystery also in 5.5.0.14 /* Objective function */ min: -375 COL0006 -390 COL0012 -225 colzero; //min: -225 colzero -375 COL0006 -390 COL0012; //max: 225 colzero 375 COL0006 390 COL0012; //max: 375 COL0006 390 COL0012 225 colzero; /* Constraints */ YEAR001: +1500 colzero +1500 COL0006 +1500 COL0012 <= 3700; YEAR002: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; YEAR003: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; YEAR004: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; YEAR005: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; YEAR006: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; MCP0000: +colzero +MNF0000 = 1; MCP0001: +0.4 <= +COL0006 +MNF0001 <= 1; MCP0002: +COL0012 +MNF0002 = 1; MCF0000: +MNF0000 +MIF0000 = 1; MCF0001: +MNF0001 +MIF0001 = 1; MCF0002: +MNF0002 +MIF0002 = 1; GRP0005: +15 >= +MIF0000 +MIF0001 +11.5 GIF0005 +13.5 GNF0005 >= 13; AUG0001: +17 >= +MIF0000 +MIF0001 +12.5 MIF0002 +GIF0005 +13 ANF0001 >= 13; /* Variable bounds */ colzero <= 1.1; //COL0006 <= 1; COL0006 <= 1.9666667; COL0012 <= 1.3; // integers MNF0000 <= 1; MIF0000 <= 1; MNF0001 <= 1; MIF0001 <= 1; MNF0002 <= 1; MIF0002 <= 1; GIF0005 <= 1; GNF0005 <= 1; ANF0001 <= 1; /* Integer definitions */ int MNF0000,MIF0000,MNF0001,MIF0001,MNF0002,MIF0002,GIF0005,GNF0005,ANF0001; ________________________________________ From: lp_solve@... [mailto:lp_solve@...] On Behalf Of zfirth Sent: Tuesday, September 22, 2009 2:20 PM To: lp_solve@... Subject: [lp_solve] 5.5.0.15 Solver Non-Optimal Solution In 5.5.0.5 this mps file gave the optimal solution (using the default settings). In the latest 5.5.0.15 version, the optimal solution is not found (using the default settings). Could someone explain why? (I have added the mps file and output from the programs below.) This is the mps file : NAME MCPCSolverFile ROWS N OBJ L YEAR001 L YEAR002 L YEAR003 L YEAR004 L YEAR005 L YEAR006 L MCP0000 L MCP0001 L MCP0002 E MCF0000 E MCF0001 E MCF0002 G GRP0005 G AUG0001 COLUMNS COL0000 OBJ -225 COL0000 YEAR001 1500 COL0000 YEAR002 1500 COL0000 YEAR003 1500 COL0000 YEAR004 1500 COL0000 YEAR005 1500 COL0000 YEAR006 1500 COL0000 MCP0000 1 MNF0000 MCP0000 1 MNF0000 MCF0000 1 MIF0000 MCF0000 1 MIF0000 GRP0005 1 MIF0000 AUG0001 1 COL0006 OBJ -375 COL0006 YEAR001 1500 COL0006 YEAR002 1500 COL0006 YEAR003 1500 COL0006 YEAR004 1500 COL0006 YEAR005 1500 COL0006 YEAR006 1500 COL0006 MCP0001 1 MNF0001 MCP0001 1 MNF0001 MCF0001 1 MIF0001 MCF0001 1 MIF0001 GRP0005 1 MIF0001 AUG0001 1 COL0012 OBJ -390 COL0012 YEAR001 1500 COL0012 YEAR002 1500 COL0012 YEAR003 1500 COL0012 YEAR004 1500 COL0012 YEAR005 1500 COL0012 YEAR006 1500 COL0012 MCP0002 1 MNF0002 MCP0002 1 MNF0002 MCF0002 1 MIF0002 MCF0002 1 MIF0002 AUG0001 12.5 GIF0005 GRP0005 11.5 GIF0005 AUG0001 1 GNF0005 GRP0005 13.5 ANF0001 AUG0001 13 RHS RHS1 YEAR001 3700 RHS1 YEAR002 4500 RHS1 YEAR003 4500 RHS1 YEAR004 4500 RHS1 YEAR005 4500 RHS1 YEAR006 4500 RHS1 MCP0000 1 RHS1 MCP0001 1 RHS1 MCP0002 1 RHS1 MCF0000 1 RHS1 MCF0001 1 RHS1 MCF0002 1 RHS1 GRP0005 13 RHS1 AUG0001 13 BOUNDS LO BND1 COL0000 0 UP BND1 COL0000 1 LI BND1 MIF0000 0 UI BND1 MIF0000 1 LI BND1 MNF0000 0 UI BND1 MNF0000 1 LO BND1 COL0006 0 UP BND1 COL0006 1 LI BND1 MIF0001 0 UI BND1 MIF0001 1 LI BND1 MNF0001 0 UI BND1 MNF0001 1 LO BND1 COL0012 0 UP BND1 COL0012 1 LI BND1 MIF0002 0 UI BND1 MIF0002 1 LI BND1 MNF0002 0 UI BND1 MNF0002 1 LI BND1 GIF0005 0 UI BND1 GIF0005 1 LI BND1 GNF0005 0 UI BND1 GNF0005 1 LI BND1 ANF0001 0 UI BND1 ANF0001 1 RANGES BND2 MCP0000 0 BND2 MCP0001 0.6 BND2 MCP0002 0 BND2 GRP0005 2 BND2 AUG0001 4 ENDATA The optimal solution should be (given by 5.5.0.5) : Value of objective function: -790 Actual values of the variables: COL0000 1 MNF0000 0 MIF0000 1 COL0006 0.466667 MNF0001 0 MIF0001 1 COL0012 1 MNF0002 0 MIF0002 1 GIF0005 1 GNF0005 0 ANF0001 0 The result given by 5.5.0.15 is : Value of objective function: -765.00000000 Actual values of the variables: COL0000 0 MNF0000 1 MIF0000 0 COL0006 1 MNF0001 0 MIF0001 1 COL0012 1 MNF0002 0 MIF0002 1 GIF0005 0 GNF0005 1 ANF0001 0 |
|
|
Re: 5.5.0.15 Solver Non-Optimal SolutionThe error is in routine MIP_stepOF in lp_lib.c
Kjell already solved this problem in his version 6 development version. From that code, I extracted following new routine for version 5.5: REAL MIP_stepOF(lprec *lp) /* This function tries to find a non-zero minimum improvement if the OF contains all integer variables (logic only applies if we are looking for a single solution, not possibly several equal-valued ones). */ { MYBOOL OFgcd; int colnr, rownr, n, ib, ie, pluscount, intcount; int intval, maxndec; REAL value = 0, valOF, divOF, valGCD; MATrec *mat = lp->matA; if((lp->int_vars > 0) && (lp->solutionlimit == 1) && mat_validate(mat)) { /* Get statistics for integer OF variables and compute base stepsize */ n = row_intstats(lp, 0, 0, &maxndec, &pluscount, &intcount, &intval, &valGCD, &divOF); if((n == 0) || (maxndec < 0)) return( value ); OFgcd = (MYBOOL) (intval > 0); if(OFgcd) value = valGCD; /* Check non-ints in the OF to see if we can get more info */ if(n - intcount > 0) { int nrv = n - intcount; /* Number of real variables in the objective */ int niv = 0; /* Number of real variables identified as integer */ int nrows = lp->rows; /* See if we have equality constraints */ for(ib = 1; ib <= nrows; ib++) { if(is_constr_type(lp, ib, EQ)) break; } /* If so, there may be a chance to find an improved stepsize */ if(ib < nrows) for(colnr = 1; colnr <= lp->columns; colnr++) { /* Go directly to the next variable if this is an integer or there is no row candidate to explore for hidden bounds for real-valued variables (limit scan to one row/no recursion) */ if((lp->orig_obj[colnr] == 0) || is_int(lp, colnr)) continue; /* Scan equality constraints */ ib = mat->col_end[colnr-1]; ie = mat->col_end[colnr]; while(ib < ie) { if(is_constr_type(lp, (rownr = COL_MAT_ROWNR(ib)), EQ)) { /* Get "child" row statistics, but break out if we don't find enough information, i.e. no integers with coefficients of proper type */ n = row_intstats(lp, rownr, colnr, &maxndec, &pluscount, &intcount, &intval, &valGCD, &divOF); if((intval < n - 1) || (maxndec < 0)) { value = 0; break; } niv++; /* We can update */ valOF = unscaled_mat(lp, lp->orig_obj[colnr], 0, colnr); valOF = fabs( valOF * (valGCD / divOF) ); if(OFgcd) { SETMIN(value, valOF); } else { OFgcd = TRUE; value = valOF; } } ib++; } /* No point in continuing scan if we failed in current column */ if(value == 0) break; } /* Check if we found information for any real-valued variable; if not, then we must set the improvement delta to 0 */ if(nrv > niv) value = 0; } } return( value ); } There is another small error in routine check_solution, but it does not affect the calcultated result. It is only a wrong relative gap that can be shown by this: report(lp, NORMAL, "%s solution " RESULTVALUEMASK " after %10.0f iter, %9.0f nodes (gap %.1f%%).\n", my_if(lp->bb_break && !bb_better(lp, OF_DUALLIMIT, OF_TEST_BE) && bb_better(lp, OF_RELAXED, OF_TEST_NE), "Subopt.", "Optimal"), solution[0], (double) lp->total_iter, (double) lp->bb_totalnodes, 100.0*fabs(my_reldiff(lp->solution[0], lp->bb_limitOF))); Must be: report(lp, NORMAL, "%s solution " RESULTVALUEMASK " after %10.0f iter, %9.0f nodes (gap %.1f%%).\n", my_if(lp->bb_break && !bb_better(lp, OF_DUALLIMIT, OF_TEST_BE) && bb_better(lp, OF_RELAXED, OF_TEST_NE), "Subopt.", "Optimal"), solution[0], (double) lp->total_iter, (double) lp->bb_totalnodes, 100.0*fabs(my_reldiff(solution[0], lp->bb_limitOF))); Peter From: William H. Patton Sent: Tuesday, September 29, 2009 06:23 To: lp_solve@... Subject: RE: [lp_solve] 5.5.0.15 Solver Non-Optimal Solution This is definitely a mystery. Lets hope Kjell weighs in. Here is an lp format - a bit easier to paste. /* MCPCSolverFile */ // * zfirth sept 28 2009 soln should be -790 (5.5.0.5) get -765 (5.5.0.15) // try swapping the equivalent 2 objective lines below // definitely a mystery also in 5.5.0.14 /* Objective function */ min: -375 COL0006 -390 COL0012 -225 colzero; //min: -225 colzero -375 COL0006 -390 COL0012; //max: 225 colzero 375 COL0006 390 COL0012; //max: 375 COL0006 390 COL0012 225 colzero; /* Constraints */ YEAR001: +1500 colzero +1500 COL0006 +1500 COL0012 <= 3700; YEAR002: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; YEAR003: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; YEAR004: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; YEAR005: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; YEAR006: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; MCP0000: +colzero +MNF0000 = 1; MCP0001: +0.4 <= +COL0006 +MNF0001 <= 1; MCP0002: +COL0012 +MNF0002 = 1; MCF0000: +MNF0000 +MIF0000 = 1; MCF0001: +MNF0001 +MIF0001 = 1; MCF0002: +MNF0002 +MIF0002 = 1; GRP0005: +15 >= +MIF0000 +MIF0001 +11.5 GIF0005 +13.5 GNF0005 >= 13; AUG0001: +17 >= +MIF0000 +MIF0001 +12.5 MIF0002 +GIF0005 +13 ANF0001 >= 13; /* Variable bounds */ colzero <= 1.1; //COL0006 <= 1; COL0006 <= 1.9666667; COL0012 <= 1.3; // integers MNF0000 <= 1; MIF0000 <= 1; MNF0001 <= 1; MIF0001 <= 1; MNF0002 <= 1; MIF0002 <= 1; GIF0005 <= 1; GNF0005 <= 1; ANF0001 <= 1; /* Integer definitions */ int MNF0000,MIF0000,MNF0001,MIF0001,MNF0002,MIF0002,GIF0005,GNF0005,ANF0001; ________________________________________ From: lp_solve@... [mailto:lp_solve@...] On Behalf Of zfirth Sent: Tuesday, September 22, 2009 2:20 PM To: lp_solve@... Subject: [lp_solve] 5.5.0.15 Solver Non-Optimal Solution In 5.5.0.5 this mps file gave the optimal solution (using the default settings). In the latest 5.5.0.15 version, the optimal solution is not found (using the default settings). Could someone explain why? (I have added the mps file and output from the programs below.) This is the mps file : NAME MCPCSolverFile ROWS N OBJ L YEAR001 L YEAR002 L YEAR003 L YEAR004 L YEAR005 L YEAR006 L MCP0000 L MCP0001 L MCP0002 E MCF0000 E MCF0001 E MCF0002 G GRP0005 G AUG0001 COLUMNS COL0000 OBJ -225 COL0000 YEAR001 1500 COL0000 YEAR002 1500 COL0000 YEAR003 1500 COL0000 YEAR004 1500 COL0000 YEAR005 1500 COL0000 YEAR006 1500 COL0000 MCP0000 1 MNF0000 MCP0000 1 MNF0000 MCF0000 1 MIF0000 MCF0000 1 MIF0000 GRP0005 1 MIF0000 AUG0001 1 COL0006 OBJ -375 COL0006 YEAR001 1500 COL0006 YEAR002 1500 COL0006 YEAR003 1500 COL0006 YEAR004 1500 COL0006 YEAR005 1500 COL0006 YEAR006 1500 COL0006 MCP0001 1 MNF0001 MCP0001 1 MNF0001 MCF0001 1 MIF0001 MCF0001 1 MIF0001 GRP0005 1 MIF0001 AUG0001 1 COL0012 OBJ -390 COL0012 YEAR001 1500 COL0012 YEAR002 1500 COL0012 YEAR003 1500 COL0012 YEAR004 1500 COL0012 YEAR005 1500 COL0012 YEAR006 1500 COL0012 MCP0002 1 MNF0002 MCP0002 1 MNF0002 MCF0002 1 MIF0002 MCF0002 1 MIF0002 AUG0001 12.5 GIF0005 GRP0005 11.5 GIF0005 AUG0001 1 GNF0005 GRP0005 13.5 ANF0001 AUG0001 13 RHS RHS1 YEAR001 3700 RHS1 YEAR002 4500 RHS1 YEAR003 4500 RHS1 YEAR004 4500 RHS1 YEAR005 4500 RHS1 YEAR006 4500 RHS1 MCP0000 1 RHS1 MCP0001 1 RHS1 MCP0002 1 RHS1 MCF0000 1 RHS1 MCF0001 1 RHS1 MCF0002 1 RHS1 GRP0005 13 RHS1 AUG0001 13 BOUNDS LO BND1 COL0000 0 UP BND1 COL0000 1 LI BND1 MIF0000 0 UI BND1 MIF0000 1 LI BND1 MNF0000 0 UI BND1 MNF0000 1 LO BND1 COL0006 0 UP BND1 COL0006 1 LI BND1 MIF0001 0 UI BND1 MIF0001 1 LI BND1 MNF0001 0 UI BND1 MNF0001 1 LO BND1 COL0012 0 UP BND1 COL0012 1 LI BND1 MIF0002 0 UI BND1 MIF0002 1 LI BND1 MNF0002 0 UI BND1 MNF0002 1 LI BND1 GIF0005 0 UI BND1 GIF0005 1 LI BND1 GNF0005 0 UI BND1 GNF0005 1 LI BND1 ANF0001 0 UI BND1 ANF0001 1 RANGES BND2 MCP0000 0 BND2 MCP0001 0.6 BND2 MCP0002 0 BND2 GRP0005 2 BND2 AUG0001 4 ENDATA The optimal solution should be (given by 5.5.0.5) : Value of objective function: -790 Actual values of the variables: COL0000 1 MNF0000 0 MIF0000 1 COL0006 0.466667 MNF0001 0 MIF0001 1 COL0012 1 MNF0002 0 MIF0002 1 GIF0005 1 GNF0005 0 ANF0001 0 The result given by 5.5.0.15 is : Value of objective function: -765.00000000 Actual values of the variables: COL0000 0 MNF0000 1 MIF0000 0 COL0006 1 MNF0001 0 MIF0001 1 COL0012 1 MNF0002 0 MIF0002 1 GIF0005 0 GNF0005 1 ANF0001 0 |
|
|
RE: 5.5.0.15 Solver Non-Optimal SolutionThis code revision also fixes the similar difficulty in thread
http://tech.groups.yahoo.com/group/lp_solve/message/12156 William _____ From: lp_solve@... [mailto:lp_solve@...] On Behalf Of Peter Notebaert Sent: Monday, October 12, 2009 6:06 AM To: lp_solve@... Subject: Re: [lp_solve] 5.5.0.15 Solver Non-Optimal Solution The error is in routine MIP_stepOF in lp_lib.c Kjell already solved this problem in his version 6 development version. From that code, I extracted following new routine for version 5.5: REAL MIP_stepOF(lprec *lp) /* This function tries to find a non-zero minimum improvement if the OF contains all integer variables (logic only applies if we are looking for a single solution, not possibly several equal-valued ones). */ { MYBOOL OFgcd; int colnr, rownr, n, ib, ie, pluscount, intcount; int intval, maxndec; REAL value = 0, valOF, divOF, valGCD; MATrec *mat = lp->matA; if((lp->int_vars > 0) && (lp->solutionlimit == 1) && mat_validate(mat)) { /* Get statistics for integer OF variables and compute base stepsize */ n = row_intstats(lp, 0, 0, &maxndec, &pluscount, &intcount, &intval, &valGCD, &divOF); if((n == 0) || (maxndec < 0)) return( value ); OFgcd = (MYBOOL) (intval > 0); if(OFgcd) value = valGCD; /* Check non-ints in the OF to see if we can get more info */ if(n - intcount > 0) { int nrv = n - intcount; /* Number of real variables in the objective */ int niv = 0; /* Number of real variables identified as integer */ int nrows = lp->rows; /* See if we have equality constraints */ for(ib = 1; ib <= nrows; ib++) { if(is_constr_type(lp, ib, EQ)) break; } /* If so, there may be a chance to find an improved stepsize */ if(ib < nrows) for(colnr = 1; colnr <= lp->columns; colnr++) { /* Go directly to the next variable if this is an integer or there is no row candidate to explore for hidden bounds for real-valued variables (limit scan to one row/no recursion) */ if((lp->orig_obj[colnr] == 0) || is_int(lp, colnr)) continue; /* Scan equality constraints */ ib = mat->col_end[colnr-1]; ie = mat->col_end[colnr]; while(ib < ie) { if(is_constr_type(lp, (rownr = COL_MAT_ROWNR(ib)), EQ)) { /* Get "child" row statistics, but break out if we don't find enough information, i.e. no integers with coefficients of proper type */ n = row_intstats(lp, rownr, colnr, &maxndec, &pluscount, &intcount, &intval, &valGCD, &divOF); if((intval < n - 1) || (maxndec < 0)) { value = 0; break; } niv++; /* We can update */ valOF = unscaled_mat(lp, lp->orig_obj[colnr], 0, colnr); valOF = fabs( valOF * (valGCD / divOF) ); if(OFgcd) { SETMIN(value, valOF); } else { OFgcd = TRUE; value = valOF; } } ib++; } /* No point in continuing scan if we failed in current column */ if(value == 0) break; } /* Check if we found information for any real-valued variable; if not, then we must set the improvement delta to 0 */ if(nrv > niv) value = 0; } } return( value ); } There is another small error in routine check_solution, but it does not affect the calcultated result. It is only a wrong relative gap that can be shown by this: report(lp, NORMAL, "%s solution " RESULTVALUEMASK " after %10.0f iter, %9.0f nodes (gap %.1f%%).\n", my_if(lp->bb_break && !bb_better(lp, OF_DUALLIMIT, OF_TEST_BE) && bb_better(lp, OF_RELAXED, OF_TEST_NE), "Subopt.", "Optimal"), solution[0], (double) lp->total_iter, (double) lp->bb_totalnodes, 100.0*fabs(my_reldiff(lp->solution[0], lp->bb_limitOF))); Must be: report(lp, NORMAL, "%s solution " RESULTVALUEMASK " after %10.0f iter, %9.0f nodes (gap %.1f%%).\n", my_if(lp->bb_break && !bb_better(lp, OF_DUALLIMIT, OF_TEST_BE) && bb_better(lp, OF_RELAXED, OF_TEST_NE), "Subopt.", "Optimal"), solution[0], (double) lp->total_iter, (double) lp->bb_totalnodes, 100.0*fabs(my_reldiff(solution[0], lp->bb_limitOF))); Peter From: William H. Patton <mailto:pattonwh@...> Sent: Tuesday, September 29, 2009 06:23 To: lp_solve@yahoogroup <mailto:lp_solve@...> s.com Subject: RE: [lp_solve] 5.5.0.15 Solver Non-Optimal Solution This is definitely a mystery. Lets hope Kjell weighs in. Here is an lp format - a bit easier to paste. /* MCPCSolverFile */ // * zfirth sept 28 2009 soln should be -790 (5.5.0.5) get -765 (5.5.0.15) // try swapping the equivalent 2 objective lines below // definitely a mystery also in 5.5.0.14 /* Objective function */ min: -375 COL0006 -390 COL0012 -225 colzero; //min: -225 colzero -375 COL0006 -390 COL0012; //max: 225 colzero 375 COL0006 390 COL0012; //max: 375 COL0006 390 COL0012 225 colzero; /* Constraints */ YEAR001: +1500 colzero +1500 COL0006 +1500 COL0012 <= 3700; YEAR002: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; YEAR003: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; YEAR004: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; YEAR005: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; YEAR006: +1500 colzero +1500 COL0006 +1500 COL0012 <= 4500; MCP0000: +colzero +MNF0000 = 1; MCP0001: +0.4 <= +COL0006 +MNF0001 <= 1; MCP0002: +COL0012 +MNF0002 = 1; MCF0000: +MNF0000 +MIF0000 = 1; MCF0001: +MNF0001 +MIF0001 = 1; MCF0002: +MNF0002 +MIF0002 = 1; GRP0005: +15 >= +MIF0000 +MIF0001 +11.5 GIF0005 +13.5 GNF0005 >= 13; AUG0001: +17 >= +MIF0000 +MIF0001 +12.5 MIF0002 +GIF0005 +13 ANF0001 >= 13; /* Variable bounds */ colzero <= 1.1; //COL0006 <= 1; COL0006 <= 1.9666667; COL0012 <= 1.3; // integers MNF0000 <= 1; MIF0000 <= 1; MNF0001 <= 1; MIF0001 <= 1; MNF0002 <= 1; MIF0002 <= 1; GIF0005 <= 1; GNF0005 <= 1; ANF0001 <= 1; /* Integer definitions */ int MNF0000,MIF0000,MNF0001,MIF0001,MNF0002,MIF0002,GIF0005,GNF0005,ANF0001; ________________________________________ From: lp_solve@yahoogroup <mailto:lp_solve%40yahoogroups.com> s.com [mailto:lp_solve@yahoogroup <mailto:lp_solve%40yahoogroups.com> s.com] On Behalf Of zfirth Sent: Tuesday, September 22, 2009 2:20 PM To: lp_solve@yahoogroup <mailto:lp_solve%40yahoogroups.com> s.com Subject: [lp_solve] 5.5.0.15 Solver Non-Optimal Solution In 5.5.0.5 this mps file gave the optimal solution (using the default settings). In the latest 5.5.0.15 version, the optimal solution is not found (using the default settings). Could someone explain why? (I have added the mps file and output from the programs below.) This is the mps file : NAME MCPCSolverFile ROWS N OBJ L YEAR001 L YEAR002 L YEAR003 L YEAR004 L YEAR005 L YEAR006 L MCP0000 L MCP0001 L MCP0002 E MCF0000 E MCF0001 E MCF0002 G GRP0005 G AUG0001 COLUMNS COL0000 OBJ -225 COL0000 YEAR001 1500 COL0000 YEAR002 1500 COL0000 YEAR003 1500 COL0000 YEAR004 1500 COL0000 YEAR005 1500 COL0000 YEAR006 1500 COL0000 MCP0000 1 MNF0000 MCP0000 1 MNF0000 MCF0000 1 MIF0000 MCF0000 1 MIF0000 GRP0005 1 MIF0000 AUG0001 1 COL0006 OBJ -375 COL0006 YEAR001 1500 COL0006 YEAR002 1500 COL0006 YEAR003 1500 COL0006 YEAR004 1500 COL0006 YEAR005 1500 COL0006 YEAR006 1500 COL0006 MCP0001 1 MNF0001 MCP0001 1 MNF0001 MCF0001 1 MIF0001 MCF0001 1 MIF0001 GRP0005 1 MIF0001 AUG0001 1 COL0012 OBJ -390 COL0012 YEAR001 1500 COL0012 YEAR002 1500 COL0012 YEAR003 1500 COL0012 YEAR004 1500 COL0012 YEAR005 1500 COL0012 YEAR006 1500 COL0012 MCP0002 1 MNF0002 MCP0002 1 MNF0002 MCF0002 1 MIF0002 MCF0002 1 MIF0002 AUG0001 12.5 GIF0005 GRP0005 11.5 GIF0005 AUG0001 1 GNF0005 GRP0005 13.5 ANF0001 AUG0001 13 RHS RHS1 YEAR001 3700 RHS1 YEAR002 4500 RHS1 YEAR003 4500 RHS1 YEAR004 4500 RHS1 YEAR005 4500 RHS1 YEAR006 4500 RHS1 MCP0000 1 RHS1 MCP0001 1 RHS1 MCP0002 1 RHS1 MCF0000 1 RHS1 MCF0001 1 RHS1 MCF0002 1 RHS1 GRP0005 13 RHS1 AUG0001 13 BOUNDS LO BND1 COL0000 0 UP BND1 COL0000 1 LI BND1 MIF0000 0 UI BND1 MIF0000 1 LI BND1 MNF0000 0 UI BND1 MNF0000 1 LO BND1 COL0006 0 UP BND1 COL0006 1 LI BND1 MIF0001 0 UI BND1 MIF0001 1 LI BND1 MNF0001 0 UI BND1 MNF0001 1 LO BND1 COL0012 0 UP BND1 COL0012 1 LI BND1 MIF0002 0 UI BND1 MIF0002 1 LI BND1 MNF0002 0 UI BND1 MNF0002 1 LI BND1 GIF0005 0 UI BND1 GIF0005 1 LI BND1 GNF0005 0 UI BND1 GNF0005 1 LI BND1 ANF0001 0 UI BND1 ANF0001 1 RANGES BND2 MCP0000 0 BND2 MCP0001 0.6 BND2 MCP0002 0 BND2 GRP0005 2 BND2 AUG0001 4 ENDATA The optimal solution should be (given by 5.5.0.5) : Value of objective function: -790 Actual values of the variables: COL0000 1 MNF0000 0 MIF0000 1 COL0006 0.466667 MNF0001 0 MIF0001 1 COL0012 1 MNF0002 0 MIF0002 1 GIF0005 1 GNF0005 0 ANF0001 0 The result given by 5.5.0.15 is : Value of objective function: -765.00000000 Actual values of the variables: COL0000 0 MNF0000 1 MIF0000 0 COL0006 1 MNF0001 0 MIF0001 1 COL0012 1 MNF0002 0 MIF0002 1 GIF0005 0 GNF0005 1 ANF0001 0 |
| Free embeddable forum powered by Nabble | Forum Help |