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