我是AMPL的新手,我想创建一个param
C,它从集合A映射到集合B:
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"
),则会出现错误``无法将字符串转换为数字''。
有什么方法可以实现我想做的事?
答案 0 :(得分:1)
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。