我是AMPL的新手,我想创建一个从集合A映射到集合B的param
C:
文件.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;
文件.dat:
data;
set A := AA, AB, AC;
set B := BA, BB, BC;
当我尝试编译此代码时,我得到BA is not defined
.如果我用字符串替换 set 元素(BA
变成"BA"
(,则会出现错误"无法将字符串转换为数字"。 有没有办法实现我想做的事情?
AMPL 中的参数默认为 number。如果要设置字符串参数,则必须将其声明为符号。(是的,您需要这些值上的引号。
这似乎可以满足您的需求:
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;
有关符号参数的更多信息,请参阅 AMPL 手册的第 7.8 节。