【问题标题】:How to read single parameter from a file?如何从文件中读取单个参数?
【发布时间】:2018-08-20 16:08:08
【问题描述】:

AMPL book 的第 9 章第 163 页给出了从文件中读取单个参数的示例:

例如,如果您想读取周数和 我们的简单生产模型每周可用的小时数(图 4-4),

param T > 0;

param avail {1..T} >= 0;

来自一个文件week_data.txt,包含

4

40 40 32 40

那你就可以下命令了

read T, avail[1], avail[2], avail[3], avail[4] <week_data.txt;

此命令在 GLPK 中失败,错误为 colon missing where expected。建模语言 GNU MathProg 语言参考仅包含 table data IN,用于读取表格数据。 GLPK 可以从文件中读取单个参数吗?

【问题讨论】:

    标签: glpk


    【解决方案1】:

    您可以使用 table 语句从 CSV 文件或 SQL 表中读取参数。

    您可以使用数据文件来传递参数,例如见this example of writing data files in AWK and Visual Basic

    【讨论】:

      【解决方案2】:

      AMPL 和 GPL 是相关的函数式语言。 GPL 包含 AMPL 语法的子集,但在 table 语句等几个方面有所不同。

      读取单个参数的一种方法是将数据写入具有特定语法的文件,例如下面的内容展示了一个参数和一个表格:

      param T := 4;
      
      param avail :=
            1 0
            2 1
            3 1
            4 0;
      
      end;
      

      要验证语法,请考虑文件 problem.mod 中的以下代码:

      param T > 0;
      
      param avail {1..T} >= 0;
      
      var use {1..T} >= 0;
      
      maximize usage: sum {t in 1..T} avail[t];
      
      subject to constraint {t in 1..T}: use[t] <= avail[t];
      
      solve;
      
      end;
      

      结果表明它有效:

      > glpsol -m problem.mod -d problem.dat
      GLPSOL: GLPK LP/MIP Solver, v4.65
      Parameter(s) specified in the command line:
       -m problem.mod -d problem.dat
      Reading model section from problem.mod...
      13 lines were read
      Reading data section from problem.dat...
      9 lines were read
      Generating usage...
      Generating constraint...
      Model has been successfully generated
      glp_mpl_build_prob: row usage; constant term 2 ignored
      GLPK Simplex Optimizer, v4.65
      5 rows, 4 columns, 4 non-zeros
      Preprocessing...
      ~     0: obj =   2.000000000e+00  infeas =  0.000e+00
      OPTIMAL SOLUTION FOUND BY LP PREPROCESSOR
      Time used:   0.0 secs
      Memory used: 0.1 Mb (110236 bytes)
      Model has been successfully processed
      

      【讨论】:

      • GLPK 不是 AMPL 的子集。例如。表语句显着不同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2023-01-26
      • 2020-03-18
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多