如何在AMPL控制台中仅显示等于1的二进制变量

时间:2019-07-19 03:21:04

标签: optimization ampl

我正在为集装箱码头创建一个优化模型,在这里我需要将卸货集装箱分配到堆场中的不同位置,该位置由扇形,海湾,行,层级(s,b,r,t )。在AMPL中,我创建了一组涉及(s,b,r,t)的职位,以便代表一个特定的容器。

我想要做的是,在结果中,在控制台中,我希望我的二进制变量X [i,p,s,b,r,t]仅显示等于1的值,所以如果我有很多数据,我不会看到很多ceros。该变量表示起重机p占用的集装箱i是否分配到位置(s,b,r,t)。

我已经尝试过此线程中显示的命令:ampl display variable depending on a condition

哪个是

for{o in objects, s in sacks: Take[o,s] = 1} {
    printf "\n %s %s", o,s; 
}

但是我不明白这句话的意思:“ printf“ \ n%s%s”,o,s;“。什么是“ \ n%s%s”?

我希望在控制台中只能看到等于1的值,因此我可以轻松地读取容器将使用的位置。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

  

但是我不明白这句话的意思:“ printf“ \ n%s%s”,o,s;“。   什么是“ \ n%s%s”?

\ n是换行符。

如果您在%s内加上引号,则将其替换为带引号的文本后的参数,并按给出顺序将其替换。

所以在这里,这意味着:

  • 开始新一行
  • 打印空格
  • 打印引号后出现的第一个参数(即o的值)
  • 打印另一个空格
  • 在带引号的文本(即s的值)之后打印第二个参数

在您的情况下,您将需要以下内容:

printf "\n %s %s %s %s %s %s", i,p,s,b,r,t;

您需要输出的六个索引中的每个索引都有一个%s。

您可以修改此格式,例如:

printf "\n%s,%s,%s,%s,%s,%s", i,p,s,b,r,t;

将打印时不带前导空格,并且用逗号代替索引之间的空格。