如何从文件中读取单个参数?

时间:2018-07-10 16:01:47

标签: glpk

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

  

例如,如果您想阅读星期数和   我们的简单生产模型每周都有几个小时的工作时间(图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可以从文件读取单个参数吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

AMPL和GMPL是相关的功能语言。 GMPL包含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