我正在为集装箱码头创建一个优化模型,在这里我需要将卸货集装箱分配到堆场中的不同位置,该位置由扇形,海湾,行,层级(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的值,因此我可以轻松地读取容器将使用的位置。
感谢您的帮助!
答案 0 :(得分:0)
但是我不明白这句话的意思:“ printf“ \ n%s%s”,o,s;“。 什么是“ \ n%s%s”?
\ n是换行符。
如果您在%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;
将打印时不带前导空格,并且用逗号代替索引之间的空格。