lemon/lp_glpk.cc
changeset 1458 7a483c1d38b5
parent 1436 e0beb94d08bf
child 1460 7c58aabb9eea
equal deleted inserted replaced
1:421ecfb95fb7 2:0754518ac522
   394 //     }
   394 //     }
   395 //   }
   395 //   }
   396 
   396 
   397   LpGlpk::SolveExitStatus LpGlpk::_solve()
   397   LpGlpk::SolveExitStatus LpGlpk::_solve()
   398   {
   398   {
   399     int i=  lpx_simplex(lp);
   399     int i =  lpx_simplex(lp);
   400     switch (i) {
   400     switch (i) {
   401     case LPX_E_OK: 
   401     case LPX_E_OK: 
   402       return SOLVED;
   402       return SOLVED;
   403       break;
       
   404     default:
   403     default:
   405       return UNSOLVED;
   404       return UNSOLVED;
   406     }
   405     }
   407   }
   406   }
   408 
   407 
   418   
   417   
   419  
   418  
   420   LpGlpk::SolutionStatus LpGlpk::_getPrimalStatus()
   419   LpGlpk::SolutionStatus LpGlpk::_getPrimalStatus()
   421   {
   420   {
   422     int stat=  lpx_get_status(lp);
   421     int stat=  lpx_get_status(lp);
       
   422     switch (stat) {
       
   423     case LPX_UNDEF://Undefined (no solve has been run yet)
       
   424       return UNDEFINED;
       
   425     case LPX_NOFEAS://There is no feasible solution (primal, I guess)
       
   426     case LPX_INFEAS://Infeasible 
       
   427       return INFEASIBLE;
       
   428     case LPX_UNBND://Unbounded
       
   429       return INFINITE;
       
   430     case LPX_FEAS://Feasible
       
   431       return FEASIBLE;
       
   432     case LPX_OPT://Feasible
       
   433       return OPTIMAL;
       
   434     default:
       
   435       return UNDEFINED; //to avoid gcc warning
       
   436       //FIXME error
       
   437     }
       
   438   }
       
   439 
       
   440   LpGlpk::SolutionStatus LpGlpk::_getDualStatus()
       
   441   {
       
   442     int stat=  lpx_get_dual_stat(lp);
       
   443     switch (stat) {
       
   444     case LPX_D_UNDEF://Undefined (no solve has been run yet)
       
   445       return UNDEFINED;
       
   446     case LPX_D_NOFEAS://There is no feasible solution (primal, I guess)
       
   447     case LPX_D_INFEAS://Infeasible 
       
   448       return INFEASIBLE;
       
   449     case LPX_FEAS://Feasible    
       
   450       int stat2=  lpx_get_prim_stat(lp);
       
   451       switch (stat2){
       
   452       case LPX_P_NOFEAS:
       
   453 	return INFINITE;
       
   454       case LPX_OPT:
       
   455 	return OPTIMAL;
       
   456       default:
       
   457 	return FEASIBLE;
       
   458       }
       
   459     default:
       
   460       return UNDEFINED; //to avoid gcc warning
       
   461       //FIXME error
       
   462     }
       
   463   }
       
   464 
       
   465   LpGlpk::ProblemTypes LpGlpk::_problemType()
       
   466   {
       
   467     int stat=  lpx_get_status(lp);
       
   468     int statp=  lpx_get_prim_stat(lp);
       
   469     int statd=  lpx_get_dual_stat(lp);
   423     switch (stat) {
   470     switch (stat) {
   424     case LPX_UNDEF://Undefined (no solve has been run yet)
   471     case LPX_UNDEF://Undefined (no solve has been run yet)
   425       return UNDEFINED;
   472       return UNDEFINED;
   426       break;
   473       break;
   427     case LPX_NOFEAS://There is no feasible solution (primal, I guess)
   474     case LPX_NOFEAS://There is no feasible solution (primal, I guess)
   441       return UNDEFINED; //to avoid gcc warning
   488       return UNDEFINED; //to avoid gcc warning
   442       //FIXME error
   489       //FIXME error
   443     }
   490     }
   444   }
   491   }
   445 
   492 
   446 
       
   447   void LpGlpk::_setMax()
   493   void LpGlpk::_setMax()
   448   {
   494   {
   449     lpx_set_obj_dir(lp, LPX_MAX);
   495     lpx_set_obj_dir(lp, LPX_MAX);
   450   }
   496   }
   451 
   497