【发布时间】:2018-09-21 14:25:18
【问题描述】:
我是 AMPL 的新手,我想创建一个从集合 A 映射到集合 B 的 param 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;
文件.dat:
data;
set A := AA, AB, AC;
set B := BA, BB, BC;
当我尝试编译这段代码时,我得到了BA is not defined。如果我用字符串替换集合元素(BA 变为 "BA"),则会出现错误“无法将字符串转换为数字。”。
有没有办法实现我想做的事情?
【问题讨论】:
-
我对 AMPL 了解不多,但我可以告诉你
BA is not defined错误是错误的修复。您应该在 BA、BB 和 BC 周围加上“”。您需要将它们转换为字符串的原因是数组中的其他值必须是相同的对象类型。我不明白您为什么会看到Cannot convert character string to a number,希望其他人能提供帮助。 -
我尝试将
" "放在 BA、BB 和 BC 周围,但我仍然收到Cannot convert character string to a number. context: "BA" >>> ; <<<错误。 -
data test.dat;是做什么的?有没有办法在else BA;之后打印 C? -
我弄错了:
test.dat实际上是file.dat。我试图将display C;放在C的声明之后,但在到达此指令之前引发了错误。 -
据我所知,
param相当于 python 中的 dictionary(或 Java 中的 HashMap)。在这里,我将C定义为键集为A的字典。但是,我不知道是否有可能在 AMPL 中有一个不是整数或实数的值集。
标签: ampl