⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 glplpx01.c

📁 著名的大规模线性规划求解器源码GLPK.C语言版本,可以修剪.内有详细帮助文档.
💻 C
📖 第 1 页 / 共 2 页
字号:
         default:          xassert(ret != ret);      }      return ret;}int lpx_exact(LPX *lp){     /* easy-to-use driver to the exact simplex method */      glp_smcp parm;      int ret;      fill_smcp(lp, &parm);      ret = glp_exact(lp, &parm);      switch (ret)      {  case 0:           ret = LPX_E_OK;      break;         case GLP_EBADB:         case GLP_ESING:         case GLP_EBOUND:         case GLP_EFAIL:   ret = LPX_E_FAULT;   break;         case GLP_EITLIM:  ret = LPX_E_ITLIM;   break;         case GLP_ETMLIM:  ret = LPX_E_TMLIM;   break;         default:          xassert(ret != ret);      }      return ret;}int lpx_get_status(glp_prob *lp){     /* retrieve generic status of basic solution */      int status;      switch (glp_get_status(lp))      {  case GLP_OPT:    status = LPX_OPT;    break;         case GLP_FEAS:   status = LPX_FEAS;   break;         case GLP_INFEAS: status = LPX_INFEAS; break;         case GLP_NOFEAS: status = LPX_NOFEAS; break;         case GLP_UNBND:  status = LPX_UNBND;  break;         case GLP_UNDEF:  status = LPX_UNDEF;  break;         default:         xassert(lp != lp);      }      return status;}int lpx_get_prim_stat(glp_prob *lp){     /* retrieve status of primal basic solution */      return glp_get_prim_stat(lp) - GLP_UNDEF + LPX_P_UNDEF;}int lpx_get_dual_stat(glp_prob *lp){     /* retrieve status of dual basic solution */      return glp_get_dual_stat(lp) - GLP_UNDEF + LPX_D_UNDEF;}double lpx_get_obj_val(LPX *lp){     /* retrieve objective value (basic solution) */      return glp_get_obj_val(lp);}int lpx_get_row_stat(LPX *lp, int i){     /* retrieve row status (basic solution) */      return glp_get_row_stat(lp, i) - GLP_BS + LPX_BS;}double lpx_get_row_prim(LPX *lp, int i){     /* retrieve row primal value (basic solution) */      return glp_get_row_prim(lp, i);}double lpx_get_row_dual(LPX *lp, int i){     /* retrieve row dual value (basic solution) */      return glp_get_row_dual(lp, i);}void lpx_get_row_info(glp_prob *lp, int i, int *tagx, double *vx,      double *dx){     /* obtain row solution information */      if (tagx != NULL) *tagx = lpx_get_row_stat(lp, i);      if (vx != NULL) *vx = lpx_get_row_prim(lp, i);      if (dx != NULL) *dx = lpx_get_row_dual(lp, i);      return;}int lpx_get_col_stat(LPX *lp, int j){     /* retrieve column status (basic solution) */      return glp_get_col_stat(lp, j) - GLP_BS + LPX_BS;}double lpx_get_col_prim(LPX *lp, int j){     /* retrieve column primal value (basic solution) */      return glp_get_col_prim(lp, j);}double lpx_get_col_dual(glp_prob *lp, int j){     /* retrieve column dual value (basic solution) */      return glp_get_col_dual(lp, j);}void lpx_get_col_info(glp_prob *lp, int j, int *tagx, double *vx,      double *dx){     /* obtain column solution information */      if (tagx != NULL) *tagx = lpx_get_col_stat(lp, j);      if (vx != NULL) *vx = lpx_get_col_prim(lp, j);      if (dx != NULL) *dx = lpx_get_col_dual(lp, j);      return;}int lpx_get_ray_info(LPX *lp){     /* determine what causes primal unboundness */      return glp_get_unbnd_ray(lp);}int lpx_eval_tab_row(LPX *lp, int k, int ind[], double val[]){     /* compute row of the simplex tableau */      return glp_eval_tab_row(lp, k, ind, val);}int lpx_eval_tab_col(LPX *lp, int k, int ind[], double val[]){     /* compute column of the simplex tableau */      return glp_eval_tab_col(lp, k, ind, val);}int lpx_interior(LPX *lp){     /* easy-to-use driver to the interior-point method */      int ret;      ret = glp_interior(lp, NULL);      switch (ret)      {  case 0:           ret = LPX_E_OK;      break;         case GLP_EFAIL:   ret = LPX_E_FAULT;   break;         case GLP_ENOFEAS: ret = LPX_E_NOFEAS;  break;         case GLP_ENOCVG:  ret = LPX_E_NOCONV;  break;         case GLP_EITLIM:  ret = LPX_E_ITLIM;   break;         case GLP_EINSTAB: ret = LPX_E_INSTAB;  break;         default:          xassert(ret != ret);      }      return ret;}int lpx_ipt_status(glp_prob *lp){     /* retrieve status of interior-point solution */      int status;      switch (glp_ipt_status(lp))      {  case GLP_UNDEF:  status = LPX_T_UNDEF;  break;         case GLP_OPT:    status = LPX_T_OPT;    break;         default:         xassert(lp != lp);      }      return status;}double lpx_ipt_obj_val(LPX *lp){     /* retrieve objective value (interior point) */      return glp_ipt_obj_val(lp);}double lpx_ipt_row_prim(LPX *lp, int i){     /* retrieve row primal value (interior point) */      return glp_ipt_row_prim(lp, i);}double lpx_ipt_row_dual(LPX *lp, int i){     /* retrieve row dual value (interior point) */      return glp_ipt_row_dual(lp, i);}double lpx_ipt_col_prim(LPX *lp, int j){     /* retrieve column primal value (interior point) */      return glp_ipt_col_prim(lp, j);}double lpx_ipt_col_dual(LPX *lp, int j){     /* retrieve column dual value (interior point) */      return glp_ipt_col_dual(lp, j);}void lpx_set_class(LPX *lp, int klass){     /* set problem class */      xassert(lp == lp);      if (!(klass == LPX_LP || klass == LPX_MIP))         xfault("lpx_set_class: invalid problem class\n");      return;}int lpx_get_class(LPX *lp){     /* determine problem klass */      return glp_get_num_int(lp) == 0 ? LPX_LP : LPX_MIP;}void lpx_set_col_kind(LPX *lp, int j, int kind){     /* set (change) column kind */      glp_set_col_kind(lp, j, kind - LPX_CV + GLP_CV);      return;}int lpx_get_col_kind(LPX *lp, int j){     /* retrieve column kind */      return glp_get_col_kind(lp, j) == GLP_CV ? LPX_CV : LPX_IV;}int lpx_get_num_int(LPX *lp){     /* retrieve number of integer columns */      return glp_get_num_int(lp);}int lpx_get_num_bin(LPX *lp){     /* retrieve number of binary columns */      return glp_get_num_bin(lp);}static int solve_mip(LPX *lp, int presolve){     glp_iocp parm;      int ret;      glp_init_iocp(&parm);      switch (lpx_get_int_parm(lp, LPX_K_MSGLEV))      {  case 0:  parm.msg_lev = GLP_MSG_OFF;   break;         case 1:  parm.msg_lev = GLP_MSG_ERR;   break;         case 2:  parm.msg_lev = GLP_MSG_ON;    break;         case 3:  parm.msg_lev = GLP_MSG_ALL;   break;         default: xassert(lp != lp);      }      switch (lpx_get_int_parm(lp, LPX_K_BRANCH))      {  case 0:  parm.br_tech = GLP_BR_FFV;    break;         case 1:  parm.br_tech = GLP_BR_LFV;    break;         case 2:  parm.br_tech = GLP_BR_DTH;    break;         case 3:  parm.br_tech = GLP_BR_MFV;    break;         default: xassert(lp != lp);      }      switch (lpx_get_int_parm(lp, LPX_K_BTRACK))      {  case 0:  parm.bt_tech = GLP_BT_DFS;    break;         case 1:  parm.bt_tech = GLP_BT_BFS;    break;         case 2:  parm.bt_tech = GLP_BT_BPH;    break;         case 3:  parm.bt_tech = GLP_BT_BLB;    break;         default: xassert(lp != lp);      }      parm.tol_int = lpx_get_real_parm(lp, LPX_K_TOLINT);      parm.tol_obj = lpx_get_real_parm(lp, LPX_K_TOLOBJ);      if (lpx_get_real_parm(lp, LPX_K_TMLIM) < 0.0 ||          lpx_get_real_parm(lp, LPX_K_TMLIM) > 1e6)         parm.tm_lim = INT_MAX;      else         parm.tm_lim =            (int)(1000.0 * lpx_get_real_parm(lp, LPX_K_TMLIM));      parm.mip_gap = lpx_get_real_parm(lp, LPX_K_MIPGAP);      if (lpx_get_int_parm(lp, LPX_K_USECUTS) & LPX_C_GOMORY)         parm.gmi_cuts = GLP_ON;      else         parm.gmi_cuts = GLP_OFF;      if (lpx_get_int_parm(lp, LPX_K_USECUTS) & LPX_C_MIR)         parm.mir_cuts = GLP_ON;      else         parm.mir_cuts = GLP_OFF;      if (lpx_get_int_parm(lp, LPX_K_USECUTS) & LPX_C_COVER)         parm.cov_cuts = GLP_ON;      else         parm.cov_cuts = GLP_OFF;      if (lpx_get_int_parm(lp, LPX_K_USECUTS) & LPX_C_CLIQUE)         parm.clq_cuts = GLP_ON;      else         parm.clq_cuts = GLP_OFF;      parm.presolve = presolve;      if (lpx_get_int_parm(lp, LPX_K_BINARIZE))         parm.binarize = GLP_ON;      ret = glp_intopt(lp, &parm);      switch (ret)      {  case 0:           ret = LPX_E_OK;      break;         case GLP_ENOPFS:  ret = LPX_E_NOPFS;   break;         case GLP_ENODFS:  ret = LPX_E_NODFS;   break;         case GLP_EBOUND:         case GLP_EROOT:   ret = LPX_E_FAULT;   break;         case GLP_EFAIL:   ret = LPX_E_SING;    break;         case GLP_EMIPGAP: ret = LPX_E_MIPGAP;  break;         case GLP_ETMLIM:  ret = LPX_E_TMLIM;   break;         default:          xassert(ret != ret);      }      return ret;}int lpx_integer(LPX *lp){     /* easy-to-use driver to the branch-and-bound method */      return solve_mip(lp, GLP_OFF);}int lpx_intopt(LPX *lp){     /* easy-to-use driver to the branch-and-bound method */      return solve_mip(lp, GLP_ON);}int lpx_mip_status(glp_prob *lp){     /* retrieve status of MIP solution */      int status;      switch (glp_mip_status(lp))      {  case GLP_UNDEF:  status = LPX_I_UNDEF;  break;         case GLP_OPT:    status = LPX_I_OPT;    break;         case GLP_FEAS:   status = LPX_I_FEAS;   break;         case GLP_NOFEAS: status = LPX_I_NOFEAS; break;         default:         xassert(lp != lp);      }      return status;}double lpx_mip_obj_val(LPX *lp){     /* retrieve objective value (MIP solution) */      return glp_mip_obj_val(lp);}double lpx_mip_row_val(LPX *lp, int i){     /* retrieve row value (MIP solution) */      return glp_mip_row_val(lp, i);}double lpx_mip_col_val(LPX *lp, int j){     /* retrieve column value (MIP solution) */      return glp_mip_col_val(lp, j);}LPX *lpx_read_mps(const char *fname){     /* read problem data in fixed MPS format */      LPX *lp = lpx_create_prob();      if (glp_read_mps(lp, GLP_MPS_DECK, NULL, fname))         lpx_delete_prob(lp), lp = NULL;      return lp;}int lpx_write_mps(LPX *lp, const char *fname){     /* write problem data in fixed MPS format */      return glp_write_mps(lp, GLP_MPS_DECK, NULL, fname);}int lpx_read_bas(LPX *lp, const char *fname){     /* read LP basis in fixed MPS format */      return read_bas(lp, fname);}int lpx_write_bas(LPX *lp, const char *fname){     /* write LP basis in fixed MPS format */      return write_bas(lp, fname);}LPX *lpx_read_freemps(const char *fname){     /* read problem data in free MPS format */      LPX *lp = lpx_create_prob();      if (glp_read_mps(lp, GLP_MPS_FILE, NULL, fname))         lpx_delete_prob(lp), lp = NULL;      return lp;}int lpx_write_freemps(LPX *lp, const char *fname){     /* write problem data in free MPS format */      return glp_write_mps(lp, GLP_MPS_FILE, NULL, fname);}LPX *lpx_read_cpxlp(const char *fname){     /* read problem data in CPLEX LP format */      LPX *lp;      lp = lpx_create_prob();      if (glp_read_lp(lp, NULL, fname))         lpx_delete_prob(lp), lp = NULL;      return lp;}int lpx_write_cpxlp(LPX *lp, const char *fname){     /* write problem data in CPLEX LP format */      return glp_write_lp(lp, NULL, fname);}LPX *lpx_read_model(const char *model, const char *data, const char      *output){     /* read LP/MIP model written in GNU MathProg language */      LPX *lp = NULL;      glp_tran *tran;      /* allocate the translator workspace */      tran = glp_mpl_alloc_wksp();      /* read model section and optional data section */      if (glp_mpl_read_model(tran, model, data != NULL)) goto done;      /* read separate data section, if required */      if (data != NULL)         if (glp_mpl_read_data(tran, data)) goto done;      /* generate the model */      if (glp_mpl_generate(tran, output)) goto done;      /* build the problem instance from the model */      lp = glp_create_prob();      glp_mpl_build_prob(tran, lp);done: /* free the translator workspace */      glp_mpl_free_wksp(tran);      /* bring the problem object to the calling program */      return lp;}int lpx_is_b_avail(glp_prob *lp){     /* check if LP basis is available */      return glp_bf_exists(lp);}int lpx_main(int argc, const char *argv[]){     /* stand-alone LP/MIP solver */      return glp_main(argc, argv);}/* eof */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -