Печатайте только ненулевые результаты, используя сервер AMPL + Neos

Я делаю модель оптимизации относительно большой модели. Я буду использовать 15 временных шагов в этой модели, но теперь, когда я тестирую ее, я использую только 4. Однако, даже с 11 временными шагами меньше желаемого, модель все равно печатает 22 000 строк переменных, где, возможно, всего сто отличается от 0.

Кто-нибудь видит выход из этого? Т.е. способ с помощью NEOS-сервера печатать только имя переменной и соответствующее значение, если оно больше 0.

То, что я проверял, это:

 solve; 
 option omit_zero_rows 0; (also tried 1;)
 display _varname, _var;

Используя оба omit_zero_rows 0; или omit_zero_rows 1; по-прежнему печатает каждый результат, а не те, которые выше 0.

Я также попробовал:

solve;
if _var > 0 then {
      display _varname, _var;
}

но это дало мне синтаксическую ошибку. Оба (или действительно три) варианта были протестированы в файле.run, который я использую для сервера NEOS.

1 ответ

Решение

Я выкладываю решение этой проблемы, так как считаю, что это проблема, с которой столкнется больше людей. По сути, чтобы печатать только ненулевые значения с помощью NEOS Server, запишите ваш командный файл (файл.run) как:

solve;
display {j in 1.._nvars: _var[j] > 0} (_varname[j], _var[j]); 
Другие вопросы по тегам