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可以从文件读取单个参数吗?
答案 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