442 int stat= lpx_get_dual_stat(lp); |
442 int stat= lpx_get_dual_stat(lp); |
443 switch (stat) { |
443 switch (stat) { |
444 case LPX_D_UNDEF://Undefined (no solve has been run yet) |
444 case LPX_D_UNDEF://Undefined (no solve has been run yet) |
445 return UNDEFINED; |
445 return UNDEFINED; |
446 case LPX_D_NOFEAS://There is no feasible solution (primal, I guess) |
446 case LPX_D_NOFEAS://There is no feasible solution (primal, I guess) |
447 case LPX_D_INFEAS://Infeasible |
447 // case LPX_D_INFEAS://Infeasible |
448 return INFEASIBLE; |
448 return INFEASIBLE; |
449 case LPX_FEAS://Feasible |
449 case LPX_FEAS://Feasible |
450 int stat2= lpx_get_prim_stat(lp); |
450 int stat2= lpx_get_prim_stat(lp); |
451 switch (stat2){ |
451 switch (stat2){ |
452 case LPX_P_NOFEAS: |
452 case LPX_P_NOFEAS: |
462 } |
462 } |
463 } |
463 } |
464 |
464 |
465 LpGlpk::ProblemTypes LpGlpk::_problemType() |
465 LpGlpk::ProblemTypes LpGlpk::_problemType() |
466 { |
466 { |
467 int stat= lpx_get_status(lp); |
467 //int stat= lpx_get_status(lp); |
468 int statp= lpx_get_prim_stat(lp); |
468 int statp= lpx_get_prim_stat(lp); |
469 int statd= lpx_get_dual_stat(lp); |
469 int statd= lpx_get_dual_stat(lp); |
470 switch (stat) { |
470 if (statp==LP_P_FEAS && statd==LP_D_FEAS) |
471 case LPX_UNDEF://Undefined (no solve has been run yet) |
471 return PRIMAL_DUAL_FEASIBLE; |
472 return UNDEFINED; |
472 if (statp==LP_P_FEAS && statd==LP_D_NOFEAS) |
473 break; |
473 return PRIMAL_FEASIBLE_DUAL_INFEASIBLE; |
474 case LPX_NOFEAS://There is no feasible solution (primal, I guess) |
474 if (statp==LP_P_NOFEAS && statd==LP_D_FEAS) |
475 case LPX_INFEAS://Infeasible |
475 return PRIMAL_INFEASIBLE_DUAL_FEASIBLE; |
476 return INFEASIBLE; |
476 if (statp==LP_P_NOFEAS && statd==LP_D_NOFEAS) |
477 break; |
477 return PRIMAL_DUAL_INFEASIBLE; |
478 case LPX_UNBND://Unbounded |
478 //In all other cases |
479 return INFINITE; |
479 return UNKNOWN; |
480 break; |
|
481 case LPX_FEAS://Feasible |
|
482 return FEASIBLE; |
|
483 break; |
|
484 case LPX_OPT://Feasible |
|
485 return OPTIMAL; |
|
486 break; |
|
487 default: |
|
488 return UNDEFINED; //to avoid gcc warning |
|
489 //FIXME error |
|
490 } |
|
491 } |
480 } |
492 |
481 |
493 void LpGlpk::_setMax() |
482 void LpGlpk::_setMax() |
494 { |
483 { |
495 lpx_set_obj_dir(lp, LPX_MAX); |
484 lpx_set_obj_dir(lp, LPX_MAX); |