В этом разделе мы представляем различные служебные команды и другие функции для отображения информации о моделях.
Две команды позволяют просматривать модель AMPL из командной строки: show показывает имена компонентов модели и отображает ее отдельные компоненты, а xref перечисляет все компоненты, которые зависят от данного компонента. Команда expand отображает цели и ограничения, которые AMPL сгенерировал из модели и данных, или аналогичную информацию для переменных. «Универсальные» имена AMPL для переменных, ограничений или целей разрешают указывать списки или тесты, которые применяются ко всем переменным, ограничениям или целям.
Команда show
Команда show перечисляет имена всех компонентов текущей модели:
model multmip3.mod; show; parameters: demand fcost limit maxserve minload supply vcost sets: DEST ORIG PROD variables: Trans Use constraints: Demand Max_Serve Min_Ship Multi Supply objective: Total_Cost checks: one, called check 1.
Это отображение может быть ограничено компонентами одного или нескольких объектов:
show vars; variables: Trans Use show obj, constr; objective: Total_Cost constraints: Demand Max_Serve Min_Ship Multi Supply
Команда show также может отображать объявления отдельных компонентов, избавляя пользователя от необходимости искать их в файле модели:
show Total_Cost; minimize Total_Cost: sum{i in ORIG, j in DEST, p in PROD} vcost[i,j,p]*Trans[i,j,p] + sum{i in ORIG, j in DEST} fcost[i,j]*Use[i,j]; show vcost, fcost, Trans; param vcost{ORIG, DEST, PROD} >= 0; param fcost{ORIG, DEST} >= 0; var Trans{ORIG, DEST, PROD} >= 0;
show checks
Если элемент, следующий за show, является именем компонента текущей модели, отображается объявление этого компонента. В противном случае этот элемент интерпретируется как тип компонента в соответствии с его одной или двумя буквами. (Отображаемые объявления могут незначительно отличаться от их появления в файле модели из-за преобразований, которые выполняет AMPL при анализе и преобразовании модели.) Поскольку операторы check в модели не имеют имен, AMPL нумерует их в порядке их появления. Таким образом, чтобы увидеть третий оператор check, необходимо указать:
show check 3; check{p in PROD} : sum{i in ORIG} supply[i,p] == sum{j in DEST} demand[j,p];
show checks указывает количество check заявлений в модели.
Отображение зависимостей модели: команда xref
Команда xref выводит список всех компонентов модели, которые зависят от указанного компонента, либо напрямую (ссылаясь на него), либо косвенно (ссылаясь на его зависимости). Если задано более одного компонента, то для каждого из них перечисляются иждивенцы. Например:
xref demand, Trans; # 2 entities depend on demand: check 1 Demand # 5 entities depend on Trans: Total_Cost Supply Demand Multi Min_Ship
В общем случае, команда xref состоит из ключевого слова xref, за которым следует разделенный запятыми список любой комбинации имен набора, параметров, переменных, целей и ограничений.
Разворачивание модели: команда expand
Команда expand показывает канонические формы ограничений.
Проверяя правильность модели и ее данных, можно рассмотреть ограничения, которые генерирует AMPL. Команда expand отображает все ограничения в заданной индексированной коллекции или определенные ограничения, которые пользователь желает идентифицировать отдельно:
model nltrans.mod; data nltrans.dat; expand Supply; subject to Supply[’GARY’]: Trans[’GARY’,’FRA’] + Trans[’GARY’,’DET’] + Trans[’GARY’,’LAN’] + Trans[’GARY’,’WIN’] + Trans[’GARY’,’STL’] + Trans[’GARY’,’FRE’] + Trans[’GARY’,’LAF’] = 1400; subject to Supply[’CLEV’]: Trans[’CLEV’,’FRA’] + Trans[’CLEV’,’DET’] + Trans[’CLEV’,’LAN’] + Trans[’CLEV’,’WIN’] + Trans[’CLEV’,’STL’] + Trans[’CLEV’,’FRE’] + Trans[’CLEV’,’LAF’] = 2600; subject to Supply[’PITT’]: Trans[’PITT’,’FRA’] + Trans[’PITT’,’DET’] + Trans[’PITT’,’LAN’] + Trans[’PITT’,’WIN’] + Trans[’PITT’,’STL’] + Trans[’PITT’,’FRE’] + Trans[’PITT’,’LAF’] = 2900;
Порядок терминов при отображении расширенного ограничения не обязательно соответствует порядку терминов в объявлении ограничения.
Целевая функция может быть раскрыта таким же образом:
expand Total_Cost; minimize Total_Cost: 39*Trans[’GARY’,’FRA’]/(1 - Trans[’GARY’,’FRA’]/500) + 14* Trans[’GARY’,’DET’]/(1 - Trans[’GARY’,’DET’]/1000) + 11* Trans[’GARY’,’LAN’]/(1 - Trans[’GARY’,’LAN’]/1000) + 14* Trans[’GARY’,’WIN’]/(1 - Trans[’GARY’,’WIN’]/1000) + 16* ... 15 lines omitted Trans[’PITT’,’FRE’]/(1 - Trans[’PITT’,’FRE’]/500) + 20* Trans[’PITT’,’LAF’]/(1 - Trans[’PITT’,’LAF’]/900);
Когда expand применяется к переменной, - перечисляются все ненулевые коэффициенты этой переменной в линейных терминах целей и ограничений:
ampl: expand Trans;
Coefficients of Trans[’GARY’,’FRA’]: Supply[’GARY’] 1 Demand[’FRA’] 1 Total_Cost 0 + nonlinear Coefficients of Trans[’GARY’,’DET’]: Supply[’GARY’] 1 Demand[’DET’] 1 Total_Cost 0 + nonlinear |
Coefficients of Trans[’GARY’,’LAN’]: Supply[’GARY’] 1 Demand[’LAN’] 1 Total_Cost 0 + nonlinear Coefficients of Trans[’GARY’,’WIN’]: Supply[’GARY’] 1 Demand[’WIN’] 1 Total_Cost 0 + nonlinear ... 17 terms omitted |
Когда переменная также появляется в нелинейных выражениях в цели или ограничении, термин + nonlinear добавляется для представления таких выражений. Использование только записи expand производит раскрытие всех переменных, целей и ограничений в модели. Поскольку общая команда expand может создать очень длинный вывод, можно перенаправить ее вывод в файл, поместив >filename в конце записи. Форматирование чисел в расширенном выводе регулируется опциями expand_precision и expand_round, которые работают как команда display_precision и display_round. Результат expand отражает «взгляд моделиста» на проблему. Вывод expand отражает модель и данные, поскольку они были первоначально прочитаны и переведены. Вместе с этим, этап предварительного разрешения presolve AMPL может значительно упростить проблему до того, как она будет отправлена решателю. Чтобы увидеть информацию направляемую AMPL решателю после presolve, нужно использовать ключевое слово solexpand вместо expand.
Списки ресурсов: option show_stats
Изменение параметра show_stats со значения по умолчанию 0 на ненулевое значение запрашивает сводную статистику о размере проблемы оптимизации, которую генерирует AMPL:
model steelT.mod; data steelT.dat; option show_stats 1; solve; Presolve eliminates 2 constraints and 2 variables. Adjusted problem: 24 variables, all linear 12 constraints, all linear; 38 nonzeros 1 linear objective; 24 nonzeros. MINOS 5.5: optimal solution found. 15 iterations, objective 515033
log_file
Информацию о решении получаемую option show_stats 1 можно перенаправить в файл, только если начать запись всего сеанса с помощью команды вроде:
option log_file "yourfile.out";
Однако большая часть информации show_stats доступна в отдельных встроенных переменных. Следующие определения относятся к количеству переменных и ограничений в текущей модели перед разрешением:
_nvars: переменные в текущей модели
_ncons: ограничения в текущей модели
Есть также другие определения, которые относятся к номерам различных объектов, видимых решателем (после предварительного решения), как отражено в статистике show_stats:
_snvars, _sncons: переменные и ограничения
_snbvars, _snivars: двоичные и общие целочисленные переменные
_snzcons, _snzobjs: ограничения и объективные не нули (для линейных задач)
_snnlv, _snnlcons _snnlobjs: нелинейные переменные, ограничения, цели