AMPL 语法错误 - N 已定义,但我没有定义它

问题描述 投票:0回答:1

这是.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 文件中是否有任何内容,这些内容会以某种方式相关,但我无法弄清楚。

syntax set ampl defined
1个回答
0
投票

您所拥有的只是集合和参数的数据。在能够加载数据之前,您需要首先在模型文件中声明它,以便 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
;
© www.soinside.com 2019 - 2024. All rights reserved.