AMPL-从一组映射到一组的参数

时间:2018-09-21 14:25:18

标签: ampl

我是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"),则会出现错误``无法将字符串转换为数字''。 有什么方法可以实现我想做的事?

1 个答案:

答案 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