Работа с AMPL из командной строки


Модели записываются в виде текстового файла <имя файла>.mod. При написании модели на языке AMPL можно использовать любой текстовый редактор.

При написании моделей используются основные команды AMPL. AMPL‑модель содержит описания объектов модели, т.е. множеств, переменных, параметров, целевой функции и ограничений. Для описания объектов используются служебные слова set,var,param,minimize/maximize,subjectto (или кратко s.t.). При этом AMPL-модель содержит несколько типов элементов, подробнее описываемых ниже: декларации с ключевыми словами: set(множество индексов)param(параметр), var(переменная), arc(дуга – для описания сетевых моделей);из целевых функций вида maximize minimize ограничений subject to (при ограничениях), node (вершина – для описания сетевых моделей).

Во многом синтаксис команд AMPL очень подобен C. AMPL поддерживает такие функции, как abs(), cos(), sin(), log(), sqrt(), exp() с использованием основных операций +, -, *, /, ^ или **. Все команды оканчиваются точкой с запятой «;». К командам вывода относятся display, а также команды write и print. К другим полезным элементам option – для изменения опций AMPL или решателя, include – чтение из отдельного файла, а также quit – для выхода из AMPL.

Имена (идентификаторы) состоят из латинских букв (прописных и строчных), цифр и знаков подчеркивания. Символ # означает начало комментария. Все, что находится за этим символом, игнорируется AMPL. Комментарии могут быть также ограничены символами /* и */, причем они могут отделены друг от друга несколькими строками.

Команды AMPL используют простой синтаксис:

Переменные описываются с использованием служебного слова var.

Параметры описываются с использованием служебного слова param.

Суммирование записывается так: sum{i in 1..n}.

Служебные слова AMPL (такие как var, param, solve, maximizeи др.), а также имена функций (например, sum,log, sin) зарезервированы и не могут использоваться для имен объектов. К служебным зарезервированным словам относятся также for, if, elseif, else, while, file, system.

Индексы переменных и ограничений заключаются в квадратные скобки (например, a[i]).

Числа могут записываться в разных форматах. Так, 0.0123, 1.23D-2, 1.23e-2, 1.23E-2 ‑ это эквивалентные записи одного и того же числа 0,0123.

Литералы – это строки, заключенные в кавычки (одинарные или двойные). Например, ‘abc’, ‘x’, ‘y’, “ABC”.

Команда вида

include <имя файла>

вставляет указанный файл.

Команды

model; include < имя файла >

data; include < имя файла >

могут быть сокращены до следующих:

model < имя_файла >;

data < имя_файла >;

Команда commandsаналогична команде include, но это оператор и должен оканчиваться точкой с запятой.

В AMPL модель и данные разделены. Множества, описанные в модели, не имеют размеров или заданных элементов. Использование в модели множества индексов означает лишь то, что используются элементы этого множества, причем неважно, сколько их имеется. Задание величин делается только в файле данных, который имеет вид <имя файла>.dat. Здесь элементы множеств и параметры определяются явно, повторно записывая служебное слово, имя объекта и перечисляя значения после ":=".

Рис.2.1. Схема работы системы моделирования AMPL.

Пример создания моделиAMPL

Решить следующую задачу, используя решатель MINOS[9] при ограничениях

Создадим следующий текстовый файл с именем ex1.mod

# ex1.mod - Model var x1 >= 0, <= 3; # Задание нижней и верхней границ переменной x1 var x2 >= 0, <= 3; # Задание нижней и верхней границ переменной x2 minimize z: x1 + x2; # Целевая функция z s.t. con1: x1 * x2 >= 4; # Ограничение 1 – ему присвоено имя con1 data; # Задание начальной точки для решателя var x1 := 1; var x2 := 1;

Далее наберите >ampl (находясь в папке, где есть исполнимый файл ampl). Появится командное окно AMPL с подсказкой ampl:

В окне AMPL наберите следующие команды для решения этой задачи (не забудьте о точке с запятой ";" в конце каждой команды) для решения этой задачи с помощью решателя MINOS (по умолчанию).

ampl: include ex1.mod; ampl: solve; ampl: display x1, x2, z;

AMPL выдает следующую информацию о решении x1 = 2, x2 = 2 с оптимальным значением целевой функции z = 4.

MINOS 5.5: optimal solution found. 15 iterations, objective 4 Nonlin evals: constrs = 38, Jac = 37. x1 = 2 x2 = 2 z = 4

Для редактирования текстового файла (в связи с обнаруженными ошибками или необходимостью изменения модели), внесите необходимые изменения в текстовом файле модели и сохраните его. Затем в окне AMPL наберите следующие команды для ввода измененной модели:

ampl: reset;
ampl: model ex1.mod;

 

Запишем на AMPL модель целочисленного линейного программирования (ЦЛП) вида:

при ограничениях

,

Описание параметра m в AMPL выглядит так:

param m;

Аналогично опишем параметр n:

param n;

Опишем множества индексов и :

set I=1..m;

set J=1..n;

param c{J}; param b{I}; param a{I, J};
Для описания параметров используем запись:

var x {J} binary;
Для описания переменных используем запись:

 

которая означает, что ‑ бинарная переменная, принимающая только значения 0 или 1.

Описание целевой функции выглядит следующим образом:

maximize z: sum {j in 1..n} c[j] * x[j];

Ограничения запишутся так:

con{i in 1..m}: sum {j in 1..n} a[i,j] * x[j] <= b[i];

Таким образом, модель ЦЛП записывается на AMPL в виде ip.mod:

param m;param n;set I:=1..m;set J:=1..n;param c {J};param b {I};param a {I, J}; var x {J} binary;maximize obj: sum{j in J}c[j]*x[j];subject to res {i in I}:

sum{j in J}a[i,j]*x[j]<= b[i];

Для решения конкретной задачи ЦЛП вида

при ограничениях

можно использовать описанный выше файл модели ip.mod вместе с файлом данных ip.dat следующего вида

param m:=2;param n:=3;param c [1] 2 [2] 3 [3] 1;param b [1] 2 [2] 4;param a: 1 2 3:= 1 1 2 1 2 2 3 2;

В окне AMPL набираем операторы:

model ip.mod;

data ip.mod;

option solver lpsolve;

solve;

display x, obj;

В результате получим:

LP_SOLVE 4.0.1.0: optimal, objective 3

5 simplex iterations

3 branch & bound nodes: depth 2

x [*] :=

1 1

2 0

3 1

;

 

obj = 3

Замечание.Записьoption solver lpsolve; означает явное задание решателя задач смешанного целочисленного линейного программирования lp_solve (http:// lpsolve.sourceforge.net/).



Дата добавления: 2016-06-05; просмотров: 1630;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.014 сек.