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

📄 glplpx07.c

📁 著名的大规模线性规划求解器源码GLPK.C语言版本,可以修剪.内有详细帮助文档.
💻 C
📖 第 1 页 / 共 2 页
字号:
               xfprintf(fp, "        PRIMAL SOLUTION IS INFEASIBLE\n");               break;         }         xfprintf(fp, "\n");         xfprintf(fp, "KKT.DE: max.abs.err. = %.2e on column %d\n",            kkt.de_ae_max, kkt.de_ae_col);         xfprintf(fp, "        max.rel.err. = %.2e on column %d\n",            kkt.de_re_max, kkt.de_re_col);         switch (kkt.de_quality)         {  case 'H':               xfprintf(fp, "        High quality\n");               break;            case 'M':               xfprintf(fp, "        Medium quality\n");               break;            case 'L':               xfprintf(fp, "        Low quality\n");               break;            default:               xfprintf(fp, "        DUAL SOLUTION IS WRONG\n");               break;         }         xfprintf(fp, "\n");         xfprintf(fp, "KKT.DB: max.abs.err. = %.2e on %s %d\n",            kkt.db_ae_max, kkt.db_ae_ind <= m ? "row" : "column",            kkt.db_ae_ind <= m ? kkt.db_ae_ind : kkt.db_ae_ind - m);         xfprintf(fp, "        max.rel.err. = %.2e on %s %d\n",            kkt.db_re_max, kkt.db_re_ind <= m ? "row" : "column",            kkt.db_re_ind <= m ? kkt.db_re_ind : kkt.db_re_ind - m);         switch (kkt.db_quality)         {  case 'H':               xfprintf(fp, "        High quality\n");               break;            case 'M':               xfprintf(fp, "        Medium quality\n");               break;            case 'L':               xfprintf(fp, "        Low quality\n");               break;            default:               xfprintf(fp, "        DUAL SOLUTION IS INFEASIBLE\n");               break;         }         xfprintf(fp, "\n");      }#endif#if 1      if (lpx_get_status(lp) == LPX_UNBND)      {  int m = lpx_get_num_rows(lp);         int k = lpx_get_ray_info(lp);         xfprintf(fp, "Unbounded ray: %s %d\n",            k <= m ? "row" : "column", k <= m ? k : k - m);         xfprintf(fp, "\n");      }#endif      xfprintf(fp, "End of output\n");      xfflush(fp);      if (xferror(fp))      {  xprintf("lpx_print_sol: can't write to `%s' - %s\n", fname,            strerror(errno));         goto fail;      }      xfclose(fp);      return 0;fail: if (fp != NULL) xfclose(fp);      return 1;}/*------------------------------------------------------------------------ lpx_print_ips - write interior point solution in printable format.---- *Synopsis*---- #include "glplpx.h"-- int lpx_print_ips(LPX *lp, char *fname);---- *Description*---- The routine lpx_print_ips writes the current interior point solution-- of an LP problem, which the parameter lp points to, to a text file,-- whose name is the character string fname, in printable format.---- Information reported by the routine lpx_print_ips is intended mainly-- for visual analysis.---- *Returns*---- If the operation was successful, the routine returns zero. Otherwise-- the routine prints an error message and returns non-zero. */int lpx_print_ips(LPX *lp, const char *fname){     XFILE *fp;      int what, round;      xprintf("lpx_print_ips: writing LP problem solution to `%s'...\n",         fname);      fp = xfopen(fname, "w");      if (fp == NULL)      {  xprintf("lpx_print_ips: can't create `%s' - %s\n", fname,            strerror(errno));         goto fail;      }      /* problem name */      {  const char *name;         name = lpx_get_prob_name(lp);         if (name == NULL) name = "";         xfprintf(fp, "%-12s%s\n", "Problem:", name);      }      /* number of rows (auxiliary variables) */      {  int nr;         nr = lpx_get_num_rows(lp);         xfprintf(fp, "%-12s%d\n", "Rows:", nr);      }      /* number of columns (structural variables) */      {  int nc;         nc = lpx_get_num_cols(lp);         xfprintf(fp, "%-12s%d\n", "Columns:", nc);      }      /* number of non-zeros (constraint coefficients) */      {  int nz;         nz = lpx_get_num_nz(lp);         xfprintf(fp, "%-12s%d\n", "Non-zeros:", nz);      }      /* solution status */      {  int status;         status = lpx_ipt_status(lp);         xfprintf(fp, "%-12s%s\n", "Status:",            status == LPX_T_UNDEF  ? "INTERIOR UNDEFINED" :            status == LPX_T_OPT    ? "INTERIOR OPTIMAL" : "???");      }      /* objective function */      {  char *name;         int dir;         double obj;         name = (void *)lpx_get_obj_name(lp);         dir = lpx_get_obj_dir(lp);         obj = lpx_ipt_obj_val(lp);         xfprintf(fp, "%-12s%s%s%.10g %s\n", "Objective:",            name == NULL ? "" : name,            name == NULL ? "" : " = ", obj,            dir == LPX_MIN ? "(MINimum)" :            dir == LPX_MAX ? "(MAXimum)" : "(" "???" ")");      }      /* main sheet */      for (what = 1; what <= 2; what++)      {  int mn, ij;         xfprintf(fp, "\n");         xfprintf(fp, "   No. %-12s      Activity     Lower bound   Upp"            "er bound    Marginal\n",            what == 1 ? "  Row name" : "Column name");         xfprintf(fp, "------ ------------    ------------- -----------"            "-- ------------- -------------\n");         mn = (what == 1 ? lpx_get_num_rows(lp) : lpx_get_num_cols(lp));         for (ij = 1; ij <= mn; ij++)         {  const char *name;            int typx /*, tagx */;            double lb, ub, vx, dx;            if (what == 1)            {  name = lpx_get_row_name(lp, ij);               if (name == NULL) name = "";               lpx_get_row_bnds(lp, ij, &typx, &lb, &ub);               round = lpx_get_int_parm(lp, LPX_K_ROUND);               lpx_set_int_parm(lp, LPX_K_ROUND, 1);               vx = lpx_ipt_row_prim(lp, ij);               dx = lpx_ipt_row_dual(lp, ij);               lpx_set_int_parm(lp, LPX_K_ROUND, round);            }            else            {  name = lpx_get_col_name(lp, ij);               if (name == NULL) name = "";               lpx_get_col_bnds(lp, ij, &typx, &lb, &ub);               round = lpx_get_int_parm(lp, LPX_K_ROUND);               lpx_set_int_parm(lp, LPX_K_ROUND, 1);               vx = lpx_ipt_col_prim(lp, ij);               dx = lpx_ipt_col_dual(lp, ij);               lpx_set_int_parm(lp, LPX_K_ROUND, round);            }            /* row/column ordinal number */            xfprintf(fp, "%6d ", ij);            /* row column/name */            if (strlen(name) <= 12)               xfprintf(fp, "%-12s ", name);            else               xfprintf(fp, "%s\n%20s", name, "");            /* two positions are currently not used */            xfprintf(fp, "   ");            /* row/column primal activity */            xfprintf(fp, "%13.6g ", vx);            /* row/column lower bound */            if (typx == LPX_LO || typx == LPX_DB || typx == LPX_FX)               xfprintf(fp, "%13.6g ", lb);            else               xfprintf(fp, "%13s ", "");            /* row/column upper bound */            if (typx == LPX_UP || typx == LPX_DB)               xfprintf(fp, "%13.6g ", ub);            else if (typx == LPX_FX)               xfprintf(fp, "%13s ", "=");            else               xfprintf(fp, "%13s ", "");            /* row/column dual activity */            xfprintf(fp, "%13.6g", dx);            /* end of line */            xfprintf(fp, "\n");         }      }      xfprintf(fp, "\n");      xfprintf(fp, "End of output\n");      xfflush(fp);      if (xferror(fp))      {  xprintf("lpx_print_ips: can't write to `%s' - %s\n", fname,            strerror(errno));         goto fail;      }      xfclose(fp);      return 0;fail: if (fp != NULL) xfclose(fp);      return 1;}/*------------------------------------------------------------------------ lpx_print_mip - write MIP problem solution in printable format.---- *Synopsis*---- #include "glplpx.h"-- int lpx_print_mip(LPX *lp, char *fname);---- *Description*---- The routine lpx_print_mip writes a best known integer solution of-- a MIP problem, which is specified by the pointer lp, to a text file,-- whose name is the character string fname, in printable format.---- Information reported by the routine lpx_print_mip is intended mainly-- for visual analysis.---- *Returns*---- If the operation was successful, the routine returns zero. Otherwise-- the routine prints an error message and returns non-zero. */int lpx_print_mip(LPX *lp, const char *fname){     XFILE *fp;      int what, round;#if 0      if (lpx_get_class(lp) != LPX_MIP)         fault("lpx_print_mip: error -- not a MIP problem");#endif      xprintf(         "lpx_print_mip: writing MIP problem solution to `%s'...\n",         fname);      fp = xfopen(fname, "w");      if (fp == NULL)      {  xprintf("lpx_print_mip: can't create `%s' - %s\n", fname,            strerror(errno));         goto fail;      }      /* problem name */      {  const char *name;         name = lpx_get_prob_name(lp);         if (name == NULL) name = "";         xfprintf(fp, "%-12s%s\n", "Problem:", name);      }      /* number of rows (auxiliary variables) */      {  int nr;         nr = lpx_get_num_rows(lp);         xfprintf(fp, "%-12s%d\n", "Rows:", nr);      }      /* number of columns (structural variables) */      {  int nc, nc_int, nc_bin;         nc = lpx_get_num_cols(lp);         nc_int = lpx_get_num_int(lp);         nc_bin = lpx_get_num_bin(lp);         xfprintf(fp, "%-12s%d (%d integer, %d binary)\n", "Columns:",            nc, nc_int, nc_bin);      }      /* number of non-zeros (constraint coefficients) */      {  int nz;         nz = lpx_get_num_nz(lp);         xfprintf(fp, "%-12s%d\n", "Non-zeros:", nz);      }      /* solution status */      {  int status;         status = lpx_mip_status(lp);         xfprintf(fp, "%-12s%s\n", "Status:",            status == LPX_I_UNDEF  ? "INTEGER UNDEFINED" :            status == LPX_I_OPT    ? "INTEGER OPTIMAL" :            status == LPX_I_FEAS   ? "INTEGER NON-OPTIMAL" :            status == LPX_I_NOFEAS ? "INTEGER EMPTY" : "???");      }      /* objective function */      {  char *name;         int dir;         double mip_obj;         name = (void *)lpx_get_obj_name(lp);         dir = lpx_get_obj_dir(lp);         mip_obj = lpx_mip_obj_val(lp);         xfprintf(fp, "%-12s%s%s%.10g %s\n", "Objective:",            name == NULL ? "" : name,            name == NULL ? "" : " = ", mip_obj,            dir == LPX_MIN ? "(MINimum)" :            dir == LPX_MAX ? "(MAXimum)" : "(" "???" ")");      }      /* main sheet */      for (what = 1; what <= 2; what++)      {  int mn, ij;         xfprintf(fp, "\n");         xfprintf(fp, "   No. %-12s      Activity     Lower bound   Upp"            "er bound\n",            what == 1 ? "  Row name" : "Column name");         xfprintf(fp, "------ ------------    ------------- -----------"            "-- -------------\n");         mn = (what == 1 ? lpx_get_num_rows(lp) : lpx_get_num_cols(lp));         for (ij = 1; ij <= mn; ij++)         {  const char *name;            int kind, typx;            double lb, ub, vx;            if (what == 1)            {  name = lpx_get_row_name(lp, ij);               if (name == NULL) name = "";               kind = LPX_CV;               lpx_get_row_bnds(lp, ij, &typx, &lb, &ub);               round = lpx_get_int_parm(lp, LPX_K_ROUND);               lpx_set_int_parm(lp, LPX_K_ROUND, 1);               vx = lpx_mip_row_val(lp, ij);               lpx_set_int_parm(lp, LPX_K_ROUND, round);            }            else            {  name = lpx_get_col_name(lp, ij);               if (name == NULL) name = "";               kind = lpx_get_col_kind(lp, ij);               lpx_get_col_bnds(lp, ij, &typx, &lb, &ub);               round = lpx_get_int_parm(lp, LPX_K_ROUND);               lpx_set_int_parm(lp, LPX_K_ROUND, 1);               vx = lpx_mip_col_val(lp, ij);               lpx_set_int_parm(lp, LPX_K_ROUND, round);            }            /* row/column ordinal number */            xfprintf(fp, "%6d ", ij);            /* row column/name */            if (strlen(name) <= 12)               xfprintf(fp, "%-12s ", name);            else               xfprintf(fp, "%s\n%20s", name, "");            /* row/column kind */            xfprintf(fp, "%s  ",               kind == LPX_CV ? " " : kind == LPX_IV ? "*" : "?");            /* row/column primal activity */            xfprintf(fp, "%13.6g", vx);            /* row/column lower and upper bounds */            switch (typx)            {  case LPX_FR:                  break;               case LPX_LO:                  xfprintf(fp, " %13.6g", lb);                  break;               case LPX_UP:                  xfprintf(fp, " %13s %13.6g", "", ub);                  break;               case LPX_DB:                  xfprintf(fp, " %13.6g %13.6g", lb, ub);                  break;               case LPX_FX:                  xfprintf(fp, " %13.6g %13s", lb, "=");                  break;               default:                  xassert(typx != typx);            }            /* end of line */            xfprintf(fp, "\n");         }      }      xfprintf(fp, "\n");#if 1      if (lpx_mip_status(lp) != LPX_I_UNDEF)      {  int m = lpx_get_num_rows(lp);         LPXKKT kkt;         xfprintf(fp, "Integer feasibility conditions:\n\n");         lpx_check_int(lp, &kkt);         xfprintf(fp, "INT.PE: max.abs.err. = %.2e on row %d\n",            kkt.pe_ae_max, kkt.pe_ae_row);         xfprintf(fp, "        max.rel.err. = %.2e on row %d\n",            kkt.pe_re_max, kkt.pe_re_row);         switch (kkt.pe_quality)         {  case 'H':               xfprintf(fp, "        High quality\n");               break;            case 'M':               xfprintf(fp, "        Medium quality\n");               break;            case 'L':               xfprintf(fp, "        Low quality\n");               break;            default:               xfprintf(fp, "        SOLUTION IS WRONG\n");               break;         }         xfprintf(fp, "\n");         xfprintf(fp, "INT.PB: max.abs.err. = %.2e on %s %d\n",            kkt.pb_ae_max, kkt.pb_ae_ind <= m ? "row" : "column",            kkt.pb_ae_ind <= m ? kkt.pb_ae_ind : kkt.pb_ae_ind - m);         xfprintf(fp, "        max.rel.err. = %.2e on %s %d\n",            kkt.pb_re_max, kkt.pb_re_ind <= m ? "row" : "column",            kkt.pb_re_ind <= m ? kkt.pb_re_ind : kkt.pb_re_ind - m);         switch (kkt.pb_quality)         {  case 'H':               xfprintf(fp, "        High quality\n");               break;            case 'M':               xfprintf(fp, "        Medium quality\n");               break;            case 'L':               xfprintf(fp, "        Low quality\n");               break;            default:               xfprintf(fp, "        SOLUTION IS INFEASIBLE\n");               break;         }         xfprintf(fp, "\n");      }#endif      xfprintf(fp, "End of output\n");      xfflush(fp);      if (xferror(fp))      {  xprintf("lpx_print_mip: can't write to `%s' - %s\n", fname,            strerror(errno));         goto fail;      }      xfclose(fp);      return 0;fail: if (fp != NULL) xfclose(fp);      return 1;}/* eof */

⌨️ 快捷键说明

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