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

📄 glplpx08.c

📁 著名的大规模线性规划求解器源码GLPK.C语言版本,可以修剪.内有详细帮助文档.
💻 C
📖 第 1 页 / 共 2 页
字号:
                  "------- ------------- \n");               mn = what==1 ? m : n;               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);                  else                     name = lpx_get_col_name(lp, ij);                  if (name == NULL) name = "";#if 0 /* 21/XII-2003 by mao */                  if (what==1)                  {  lpx_get_row_bnds(lp, ij, &typx, &lb, &ub);                     round = lp->round, lp->round = 1;                     lpx_get_row_info(lp, ij, &tagx, &vx, &dx);                     lp->round = round;                  }                  else                  {  lpx_get_col_bnds(lp, ij, &typx, &lb, &ub);                     round = lp->round, lp->round = 1;                     lpx_get_col_info(lp, ij, &tagx, &vx, &dx);                     lp->round = round;                  }#else                  round = lpx_get_int_parm(lp, LPX_K_ROUND);                  lpx_set_int_parm(lp, LPX_K_ROUND, 1);                  if (what==1)                  {  lpx_get_row_bnds(lp, ij, &typx, &lb, &ub);                     lpx_get_row_info(lp, ij, &tagx, &vx, &dx);                  }                  else                  {  lpx_get_col_bnds(lp, ij, &typx, &lb, &ub);                     lpx_get_col_info(lp, ij, &tagx, &vx, &dx);                  }                  lpx_set_int_parm(lp, LPX_K_ROUND, round);#endif                  /* row/column ordinal number */                  fprintf(fp, "%6d ", ij);                  /* row column/name */                  if (strlen(name) <= 12)                     fprintf(fp, "%-12s ", name);                  else                     fprintf(fp, "%s\n%20s", name, "");                  /* row/column status */                  fprintf(fp, "%s ",                     tagx == LPX_BS ? "B " :                     tagx == LPX_NL ? "NL" :                     tagx == LPX_NU ? "NU" :                     tagx == LPX_NF ? "NF" :                     tagx == LPX_NS ? "NS" : "??");                  fprintf(fp, "\n");                  /* first check lower bound */                  if (typx == LPX_LO || typx == LPX_DB ||                      typx == LPX_FX)                  {  int at_lower;                     at_lower = 0;                     if (tagx == LPX_BS || tagx == LPX_NU)                     {  max_inc = vx - lb;                        max_dec = DBL_MAX;                     }                     if (tagx == LPX_NS)                     {  max_inc = 0.0;                        max_dec = 0.0;                        if (dir == LPX_MIN && dx > 0) at_lower = 1;                        if (dir == LPX_MAX && dx < 0) at_lower = 1;                     }                     if (tagx == LPX_NL || at_lower == 1)                     {  int len;                        /* we have to see how it affects basic                           variables */                        len = lpx_eval_tab_col(lp, what==1?ij:ij+m,                           index, val);                        k = lpx_prim_ratio_test(lp, len, index, val, 1,                           10e-7);                        max_inc = DBL_MAX;                        if (k != 0)                        {  /*int stat;*/                           int tagx2, typx2;                           double vx2, dx2, lb2, ub2;                           /*double delta;*/                           double alpha;                           int l;                           for (l = 1; l <= len; l++)                              if (index[l] == k) alpha = val[l];                           if (k>m)                           {  lpx_get_col_info(lp, k-m, &tagx2, &vx2,                                 &dx2);                              lpx_get_col_bnds(lp, k-m, &typx2, &lb2,                                 &ub2);                           }                           else                           {  lpx_get_row_info(lp, k, &tagx2, &vx2,                                 &dx2);                              lpx_get_row_bnds(lp, k, &typx2, &lb2,                                 &ub2);                           }                           /* Check which direction;                              remember this is upper bound */                           if (alpha > 0)                              max_inc = (ub2 - vx2)/ alpha;                           else                              max_inc = (lb2 - vx2)/ alpha;                        }                        /* now check lower bound */                        k = lpx_prim_ratio_test(lp, len, index, val, -1,                           10e-7);                        max_dec = DBL_MAX;                        if (k != 0)                        {  /*int stat;*/                           int tagx2, typx2;                           double vx2, dx2, lb2, ub2;                           /*double delta;*/                           double alpha;                           int l;                           for (l = 1; l <= len; l++)                              if (index[l] == k) alpha = val[l];                           if (k>m)                           {  lpx_get_col_info(lp, k-m, &tagx2, &vx2,                                 &dx2);                              lpx_get_col_bnds(lp, k-m, &typx2, &lb2,                                 &ub2);                           }                           else                           {  lpx_get_row_info(lp, k, &tagx2, &vx2,                                 &dx2);                              lpx_get_row_bnds(lp, k, &typx2, &lb2,                                 &ub2);                           }                           /* Check which direction;                              remember this is lower bound */                           if (alpha > 0)                              max_dec = (vx2 - lb2)/ alpha;                           else                              max_dec = (vx2 - ub2)/ alpha;                        }                     }                     /* bound */                     if (typx == LPX_DB || typx == LPX_FX)                     {  if (max_inc > ub - lb)                           max_inc = ub - lb;                     }                     fprintf(fp, "         LOWER         %13.6g ", lb);                     if (max_inc == -0.0) max_inc = 0.0;                     if (max_dec == -0.0) max_dec = 0.0;                     if (max_inc == DBL_MAX)                        fprintf(fp, "%13s ", "infinity");                     else if (max_inc < 1.0e-12 && max_inc > 0)                        fprintf(fp, "%13s ", "< eps");                     else                        fprintf(fp, "%13.6g ", max_inc);                     if (max_dec == DBL_MAX)                        fprintf(fp, "%13s ", "infinity");                     else if (max_dec < 1.0e-12 && max_dec > 0)                        fprintf(fp, "%13s ", "< eps");                     else                        fprintf(fp, "%13.6g ", max_dec);                     fprintf(fp, "\n");                  }                  /* now check upper bound */                  if (typx == LPX_UP || typx == LPX_DB ||                     typx == LPX_FX)                  {  int at_upper;                     at_upper = 0;                     if (tagx == LPX_BS || tagx == LPX_NL)                     {  max_inc = DBL_MAX;                        max_dec = ub - vx;                     }                     if (tagx == LPX_NS)                     {  max_inc = 0.0;                        max_dec = 0.0;                        if (dir == LPX_MIN && dx < 0) at_upper = 1;                        if (dir == LPX_MAX && dx > 0) at_upper = 1;                     }                     if (tagx == LPX_NU || at_upper == 1)                     {  int len;                        /* we have to see how it affects basic                           variables */                        len = lpx_eval_tab_col(lp, what==1?ij:ij+m,                           index, val);                        k = lpx_prim_ratio_test(lp, len, index, val, 1,                           10e-7);                        max_inc = DBL_MAX;                        if (k != 0)                        {  /*int stat;*/                           int tagx2, typx2;                           double vx2, dx2, lb2, ub2;                           /*double delta;*/                           double alpha;                           int l;                           for (l = 1; l <= len; l++)                              if (index[l] == k) alpha = val[l];                           if (k>m)                           {  lpx_get_col_info(lp, k-m, &tagx2, &vx2,                                 &dx2);                              lpx_get_col_bnds(lp, k-m, &typx2, &lb2,                                 &ub2);                           }                           else                           {  lpx_get_row_info(lp, k, &tagx2, &vx2,                                 &dx2);                              lpx_get_row_bnds(lp, k, &typx2, &lb2,                                 &ub2);                           }                           /* Check which direction;                              remember this is upper bound */                           if (alpha > 0)                              max_inc = (ub2 - vx2)/ alpha;                           else                              max_inc = (lb2 - vx2)/ alpha;                        }                        /* now check lower bound */                        k = lpx_prim_ratio_test(lp, len, index, val, -1,                           10e-7);                        max_dec = DBL_MAX;                        if (k != 0)                        {  /*int stat;*/                           int tagx2, typx2;                           double vx2, dx2, lb2, ub2;                           /*double delta;*/                           double alpha;                           int l;                           for (l = 1; l <= len; l++)                              if (index[l] == k) alpha = val[l];                           if (k>m)                           {  lpx_get_col_info(lp, k-m, &tagx2, &vx2,                                 &dx2);                              lpx_get_col_bnds(lp, k-m, &typx2, &lb2,                                 &ub2);                           }                           else                           {  lpx_get_row_info(lp, k, &tagx2, &vx2,                                 &dx2);                              lpx_get_row_bnds(lp, k, &typx2, &lb2,                                 &ub2);                           }                           /* Check which direction;                              remember this is lower bound */                           if (alpha > 0)                              max_dec = (vx2 - lb2)/ alpha;                           else                              max_dec = (vx2 - ub2)/ alpha;                        }                     }                     if (typx == LPX_DB || typx == LPX_FX)                     {  if (max_dec > ub - lb)                           max_dec = ub - lb;                     }                     /* bound */                     fprintf(fp, "         UPPER         %13.6g ", ub);                     if (max_inc == -0.0) max_inc = 0.0;                     if (max_dec == -0.0) max_dec = 0.0;                     if (max_inc == DBL_MAX)                        fprintf(fp, "%13s ", "infinity");                     else if (max_inc < 1.0e-12 && max_inc > 0)                        fprintf(fp, "%13s ", "< eps");                     else                        fprintf(fp, "%13.6g ", max_inc);                     if (max_dec == DBL_MAX)                        fprintf(fp, "%13s ", "infinity");                     else if (max_dec < 1.0e-12 && max_dec > 0)                        fprintf(fp, "%13s ", "< eps");                     else                        fprintf(fp, "%13.6g ", max_dec);                     fprintf(fp, "\n");                  }               }            }            /* free the memory we used */            xfree(index);            xfree(val);         }         else fprintf(fp, "No range information since solution is not o"            "ptimal.\n");      }      fprintf(fp, "\n");      fprintf(fp, "End of output\n");      fflush(fp);      if (ferror(fp))      {  xprintf("lpx_print_sens_bnds: can't write to `%s' - %s\n",            fname, strerror(errno));         goto fail;      }      fclose(fp);      return 0;fail: if (fp != NULL) fclose(fp);      return 1;}/* eof */

⌨️ 快捷键说明

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