setof в данных модели и файлах сценариев для сервера NEOS
При отправке моей формулировки AMPL на сервер NEOS, почему приведенная ниже кодовая строка с использованием оператора `setof'прекрасно работает в файле модели, но не в файле данных?
set X := setof {indices in Y} subsetofindices
Сервер NEOS требует, чтобы код был разделен на.mod, .dat и файл сценария отдельно. Я видел ссылки на использование let
X := ...
в файле скрипта. В чем разница между этими файлами и что ставить куда?
Пример Используя файлы AMPL steelT.x, этот первый блок из 2 файлов работает
# steelT.mod
set DUMMYPROD;
set PROD := setof {i in DUMMYPROD} i; # products
# steelT.dat
data;
set DUMMYPROD := bands coils;
Тогда как следующее не работает:
# steelT.mod
set DUMMYPROD;
set PROD; # products
# steelT.dat
data;
set DUMMYPROD := bands coils;
set PROD := setof {i in DUMMYPROD} i;
Возвращает ошибку
ожидается; (: или контекст символа: set PROD:= setof >>> { <<< i in DUMMYPROD} i;
Более широкий вопрос Вообще, что принадлежит файлу модели, файлу данных и файлу скрипта? (Также для param
и другие определения) В каком порядке они обрабатываются? Возможно, мне не хватает некоторых основ, поскольку я читал руководство AMPL, где я не нашел этого (я никогда не проходил курс по оптимизации).
Дополнительный вопрос о сервере NEOS "Новая" Логика программирования Contraint в AMPL включает в себя условные и логические операторы для целых ограничений. Я не думаю, что они доступны в NEOS. Или они (потому что они не работали на меня)? Есть ли простой обходной путь?
Спасибо!
1 ответ
Формат данных AMPL не поддерживает выражения, поэтому вы должны либо использовать setof {i in DUMMYPROD} i
в объявлении (как в первом примере) или в скрипте AMPL:
let PROD := setof {i in DUMMYPROD} i;
См. Также главу 9. Указание данных книги AMPL для получения более подробной информации о формате данных AMPL.
Что касается функций программирования ограничений (CP), я не думаю, что есть какие-либо решатели CP в NEOS. Вы можете попробовать связаться со службой поддержки NEOS по этому поводу.