【问题标题】:How to display only the binary variables that are equal to 1 in console of AMPL如何在 AMPL 的控制台中仅显示等于 1 的二进制变量
【发布时间】:2019-07-19 03:21:04
【问题描述】:

我正在为一个集装箱码头创建一个优化模型,我需要将卸货集装箱分配到堆场的不同位置,其中一个位置由扇区、海湾、行、层(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 的值,因此我可以轻松读取容器将使用哪些位置。

感谢您的帮助!

【问题讨论】:

    标签: optimization ampl


    【解决方案1】:

    但我不明白它说的部分:“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;
    

    将在没有前导空格的情况下打印它,并且在索引之间使用逗号而不是空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      相关资源
      最近更新 更多