这是.dat代码:
# ---------- Sets ----------
set N := 1 2 3 4 5 6 7 8 9 10;
set L := 1 2 3;
set N_l[1] := 1 7 8;
set N_l[2] := 2 4 5 6;
set N_l[3] := 3 9 10;
# ---------- Parameters ----------
param c := 1 2 2 1 3 3 4 2 5 2 6 3 7 3 8 2 9 1 10 2;
param p := 1 7 2 6 3 3 4 4 5 5 6 5 7 8 8 7 9 6 10 3;
param r := 1 3 2 4 3 5 4 3 5 2 6 2 7 4 8 5 9 3 10 3;
param budget := 20;
param budget_risk := 30;
param budget_risk_l :=
1 15
2 10
3 3;
如果我将它包含在 ampl 控制台中,就会发生这种情况。
ampl: include investment.dat;
investment.dat, line 2 (offset 34):
N is already defined
context: set >>> N <<< := 1 2 3 4 5 6 7 8 9 10;
我尝试重写集合N,看看我是否在那里犯了任何错误。无论我做什么都没有改变结果。还尝试查看我的 .mod 文件中是否有任何内容,这些内容会以某种方式相关,但我无法弄清楚。
您所拥有的只是集合和参数的数据。在能够加载数据之前,您需要首先在模型文件中声明它,以便 AMPL 知道索引集。
对于该数据文件,您可以在模型文件中包含以下内容:
set N;
set L;
set N_l{L};
param c{N};
param p{N};
param r{N};
param budget;
param budget_risk;
param budget_risk_l{L};
以下 AMPL 脚本:
set N;
set L;
set N_l{L};
param c{N};
param p{N};
param r{N};
param budget;
param budget_risk;
param budget_risk_l{L};
data;
# ---------- Sets ----------
set N := 1 2 3 4 5 6 7 8 9 10;
set L := 1 2 3;
set N_l[1] := 1 7 8;
set N_l[2] := 2 4 5 6;
set N_l[3] := 3 9 10;
# ---------- Parameters ----------
param c := 1 2 2 1 3 3 4 2 5 2 6 3 7 3 8 2 9 1 10 2;
param p := 1 7 2 6 3 3 4 4 5 5 6 5 7 8 8 7 9 6 10 3;
param r := 1 3 2 4 3 5 4 3 5 2 6 2 7 4 8 5 9 3 10 3;
param budget := 20;
param budget_risk := 30;
param budget_risk_l :=
1 15
2 10
3 3;
model;
display N, L, N_l, c, p, r, budget, budget_risk, budget_risk_l;
产生输出:
set N := 1 2 3 4 5 6 7 8 9 10;
set L := 1 2 3;
set N_l[1] := 1 7 8;
set N_l[2] := 2 4 5 6;
set N_l[3] := 3 9 10;
: c p r :=
1 2 7 3
2 1 6 4
3 3 3 5
4 2 4 3
5 2 5 2
6 3 5 2
7 3 8 4
8 2 7 5
9 1 6 3
10 2 3 3
;
budget = 20
budget_risk = 30
budget_risk_l [*] :=
1 15
2 10
3 3
;