Реферат: Работа с 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 varx1 >= 0, <= 3;# Задание нижней и верхней границ переменной x1 varx2 >= 0, <= 3;# Задание нижней и верхней границ переменной x2 minimizez:x1 + x2;# Целевая функция z s.t. con1:x1 * x2 >= 4; # Ограничение 1 – ему присвоено имя con1 data;# Задание начальной точки для решателя varx1:= 1; varx2:= 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:modelex1.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:

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

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

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

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

В окне 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/).

еще рефераты
Еще работы по информатике