Вы можете объявить параметр так, как вы предлагали:
param X{E,M,A};
Теперь, если вы хотите указать значение по умолчанию (которое, как я полагаю, то, что вы спрашиваете), вы можете сделать это обычным способом.way:
param X{E,M,A} default 0;
Затем укажите некоторые нестандартные значения в файле .dat
, например:
param: X :=
1 1 1 2 5
2 3 2 1 6;
Обратите внимание, что AMPL не заполняет значения по умолчанию в параметрепока вы не позвоните solve
.Из книги AMPL , стр.120:
Выражение, которое дает значение параметра по умолчанию, оценивается только тогда, когда значение параметра требуется в первый раз, например, когда цель или ограничение, использующее параметр, обрабатывается solve
команда.
Поэтому, если вы введете display X;
после того, как вы введете команды model
и data
, но до того, как вы введете команду solve
, вы получите только не-значения по умолчанию, например:
X :=
1 1 1 2 5
2 3 2 1 6
;
Но если вы используете display X;
после вызова solve
, вы получите полный список:
X [1,*,*,1] (tr)
: 1 2 :=
1 0 0
2 0 0
3 0 0
[1,*,*,2] (tr)
: 1 2 :=
1 5 0
2 0 0
3 0 0
[2,*,*,1] (tr)
: 3 4 :=
1 0 0
2 6 0
3 0 0
[2,*,*,2] (tr)
: 3 4 :=
1 0 0
2 0 0
3 0 0
;
Для полнотывот файлы .mod
и .dat
, которые я использовал для ответа:
.mod:
param m; #number of modes
param n; #number of individual
param a; #number of alternatives
param f; #number of household
set M, default{1..m}; #set of modes
set N, default{1..n}; #set of individuals
set A, default{1..a}; #set of alternatives
set F, default{1..f}; #set of family
set E, within F cross N;
param X{E,M,A} default 0;
var myVar{E,M,A} >= 0;
minimize Obj: sum {(i,j) in E, mm in M, aa in A} X[i,j,mm,aa] * myVar[i,j,mm,aa];
.dat:
param a:=2;
param m:=3;
param n:= 4;
param f:=2;
set E:= 1 1 1 2 2 3 2 4 ;
param: X :=
1 1 1 2 5
2 3 2 1 6;