AMPL - 从一组映射到另一组的参数
AMPL - param that maps from set to set
我是 AMPL 的新手,我想创建一个 param
从集合 A 映射到集合 B 的 C:
file.mod:
set A;
set B;
param C{i in A} =
if i == "AA"
then
BA
else if i == "AB"
then
BB
else if i == "AC"
then
BC
else
BA;
data file.dat;
file.dat:
data;
set A := AA, AB, AC;
set B := BA, BB, BC;
当我尝试编译这段代码时,我得到 BA is not defined
。如果我用字符串替换集合元素(BA
变为 "BA"
),则会出现错误“无法将字符串转换为数字。”。
有没有办法实现我想做的事情?
AMPL中的参数默认为数字。如果要设置字符串参数,则必须将其声明为符号。 (是的,您需要这些值的引号。)
这似乎符合您的要求:
set A;
set B;
param C{i in A} in B symbolic =
if i == "AA"
then
"BA"
else if i == "AB"
then
"BB"
else if i == "AC"
then
"BC"
else
"BA";
data;
set A := AA, AB, AC;
set B := BA, BB, BC;
有关符号参数的详细信息,请参阅 section 7.8 of the AMPL Book。
我是 AMPL 的新手,我想创建一个 param
从集合 A 映射到集合 B 的 C:
file.mod:
set A;
set B;
param C{i in A} =
if i == "AA"
then
BA
else if i == "AB"
then
BB
else if i == "AC"
then
BC
else
BA;
data file.dat;
file.dat:
data;
set A := AA, AB, AC;
set B := BA, BB, BC;
当我尝试编译这段代码时,我得到 BA is not defined
。如果我用字符串替换集合元素(BA
变为 "BA"
),则会出现错误“无法将字符串转换为数字。”。
有没有办法实现我想做的事情?
AMPL中的参数默认为数字。如果要设置字符串参数,则必须将其声明为符号。 (是的,您需要这些值的引号。)
这似乎符合您的要求:
set A;
set B;
param C{i in A} in B symbolic =
if i == "AA"
then
"BA"
else if i == "AB"
then
"BB"
else if i == "AC"
then
"BC"
else
"BA";
data;
set A := AA, AB, AC;
set B := BA, BB, BC;
有关符号参数的详细信息,请参阅 section 7.8 of the AMPL Book。