Как отобразить в консоли AMPL только двоичные переменные, равные 1

Я создаю модель оптимизации для контейнерного терминала, где мне нужно распределить разгрузочные контейнеры в разные позиции во дворе, где позиция представлена ​​сектором, отсеком, строкой, уровнем (s, b, r, t). В AMPL я создал набор позиций, которые включают (s, b, r, t), так что они представляют конкретный контейнер.

Что я хочу сделать, так это то, что в результатах в консоли я хочу, чтобы моя двоичная переменная X [i, p, s, b, r, t] показывала только значения, равные 1, поэтому, если у меня много данных, я не увижу на нем много сертификатов. Переменная указывает, находится ли контейнер i, взятый краном p, в позицию (s, b, r, t).

Я уже пробовал команду, отображаемую в этом потоке: переменная отображения amp в зависимости от условия

Который:

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, поэтому я могу легко прочитать, какие позиции будут использоваться контейнерами.

Спасибо за помощь!


person Martiniano    schedule 19.07.2019    source источник


Ответы (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;

напечатал бы его без начального пробела и с запятыми вместо пробелов между индексами.

person Geoffrey Brent    schedule 20.07.2019