AMPL - 从一个集合映射到另一个集合的参数



我是AMPL的新手,我想创建一个从集合A映射到集合B的paramC:

文件.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 节。

最新更新