Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Решение оптимизационных задач в Maple_Рук Лаб Р...doc
Скачиваний:
7
Добавлен:
21.11.2019
Размер:
1.17 Mб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

Южно-Российский государственный университет экономики

и сервиса

(ЮРГУЭС)

РУКОВОДСТВО

к выполнению лабораторных работ по дисциплине

«Прикладные математические пакеты Maple»,

раздел «Решение оптимизационных задач в Maple»

для студентов всех специальностей и форм обучения

ШАХТЫ 2004

Составитель

ассистент кафедры математики ЮРГУЭС

О.В. Саакян

Рецензент

доцент кафедры математики ЮРГУЭС

к.т.н. Л.И. Син

Председатель редакционно-издательского совета ЮРГУЭС

д.ф.-м.н., проф. Фетисов В.Г.

Руководство предназначено для оказания помощи студентам при самостоятельном выполнении лабораторных работ по дисциплине «Прикладные математические пакеты Maple». Содержит описание необходимых операторов и функций, варианты индивидуальных заданий, примеры выполнения лабораторных работ по темам «Решение задач линейного программирования симплекс-методом», «Нахождение условного экстремума функции», «Решение оптимизационных задач в сетевой постановке». Используются версии Maple V R4 и старше.

Руководство может быть полезно студентам всех специальностей при выполнении лабораторных работ по дисциплинам «Математика» и «Экономико-математические методы и модели».

© Южно-Российский государственный

университет экономики и сервиса, 2004

© Саакян О.В., 2004

СОДЕРЖАНИЕ

1

РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ СИМПЛЕКС-МЕТОДОМ…………………………………………

1.1 Некоторые функции пакета расширения simplex…………...

4

1.2 Лабораторная работа «Решение задачи линейного программирования симплекс-методом»…………………………….

5

1.3 Лабораторная работа «Решение транспортной задачи симплекс-методом»…………………………………………………...

9

2

НАХОЖДЕНИЕ УСЛОВНОГО ЭКСТРЕМУМА ФУНКЦИИ...

2.1 Лабораторная работа «Нахождение условного экстремума функции двух переменных»………………………………………

15

3

РЕШЕНИЕ ОПТИМИЗАЦИОННЫХ ЗАДАЧ В СЕТЕВОЙ ПОСТАНОВКЕ……………………………………………………

3.1 Некоторые функции пакета расширения networks………….

17

3.2 Лабораторная работа «Нахождение кратчайшего пути»………………………………………………………………….

18

3.3 Лабораторная работа «Определение максимального потока

в сети»………………………………………………………………

21

БИБЛИОГРАФИЧЕСКИЙ СПИСОК……………………………

23

1 РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ

СИМПЛЕКС-МЕТОДОМ

1.1 Некоторые функции пакета расширения simplex

Пакет расширения simplex содержит набор функций, предназначенных для решения задач линейной оптимизации. Отметим назначение некоторых функций этого пакета:

NONNEGATIVE

ключевое слово, указывающее на неотрицательный тип переменных;

standardize

приведение заданной системы ограничений к системе неравенств со знаками .

dual

построение двойственной задачи для задачи линейного программирования следующего вида:

целевая функция максимизируется;

система ограничений записана в виде системы неравенств со знаками ;

переменные задачи не отрицательны;

feasible

выяснение возможности решения заданной задачи линейного программирования;

maximize

вычисление максимума целевой функции;

minimize

вычисление минимума целевой функции;

Кроме перечисленных выше функций, для решения задач линейного программирования может понадобиться специальная графическая функция inequal из пакета расширения plots, которая строит решение системы линейных неравенств и/или уравнений с двумя неизвестными. Некоторые полезные опции для этой функции:

optionsfeasible=(color=цвет)

задает цвет внутренней области, все точки которой удовлетворяют системе неравенств и/ или уравнений;

optionsclosed=(color=цвет)

задает цвет граничных прямых области решений системы, соответствующих нестрогим неравенствам;

optionsopen=(color=цвет)

задает цвет граничных прямых области решений системы, соответствующих строгим неравенствам;

optionsexcluded=(color=цвет)

задает цвет внешней области.

1.2 Лабораторная работа «Решение задачи линейного

программирования симплекс-методом»

Цель работы. Выработать у студентов практические навыки решения задач линейного программирования в среде Maple.

Задание. Построить на плоскости область решений системы линейных неравенств

и найти наименьшее (наибольшее) значение линейной функции в этой области. Построить и решить соответствующую двойственную задачу. Переменные задачи считать неотрицательными.

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

Пример выполнения лабораторной работы

Задача. Построить на плоскости область решений системы линейных неравенств

и найти наименьшее значение линейной функции в этой области. Построить и решить соответствующую двойственную задачу. Переменные задачи считать неотрицательными.

Решение. Введем систему неравенств и обозначим ее идентификатором sln:

> restart: sln:={4*x1-x2>=6, 9*x1+8*x2<=157, -3*x1+11*x2>=16};

На экране появится результат

Построим на координатной плоскости решение данной системы неравенств.

> plots[inequal](sln, x1=0..15,

x2=0..15,optionsfeasible=(color=red),optionsclosed=(color=black,

thickness=3),optionsexcluded=(color=yellow));

На экране появится графический объект. Из графика видно, что исходная задача имеет решение (объясните, почему)1.

Введем выражение для целевой функции и обозначим его идентификатором :

> f:=8*x1+5*x2;

На экране появится результат

Загрузим пакет simplex и преобразуем систему ограничений sln в систему неравенств со знаками . Обозначим полученную систему идентификатором slns:

> with(simplex):

> slns:=standardize(sln);

На экране появится результат

С помощью функции maximize определим значения переменных, для которых целевая функция при системе ограничений sln принимает наибольшее значение2. Так как переменные задачи неотрицательны, то при вызове функции maximize в списке параметров укажем ключевое слово NONNEGATIVE. Результат вычислений обозначим идентификатором varmax.

> varmax:=maximize(-f,slns,NONNEGATIVE);

Получим

Построим двойственную задачу. Обозначим ее идентификатором . Переменные двойственной задачи будем обозначать :

> d:=dual(-f,slns,y);

На экране появится результат

Полученное выражение для целевой функции двойственной задачи обозначим идентификатором :

> z:=157*y1-6*y2-16*y3;

Найдем решение задачи , учитывая неотрицательность ее переменных:

> varmin:=minimize(d,NONNEGATIVE);

Получим

Как видим, найденные нами решения varmax и varmin представляют собой множества простейших уравнений относительно неизвестных и соответственно, поэтому значения этих переменных по-прежнему остаются неопределенными. Чтобы определить их значения, необходимо воспользоваться функцией assign.

> assign(varmax); assign(varmin);

Теперь вычислить значение целевой функции для найденных значений неизвестных не составит труда. Для этого достаточно ввести идентификатор, обозначающий выражение для вычисления функций f и -z:

> f; -z;

Значения целевых функций f и -z прямой и двойственной задач совпадают, следовательно, задача в исходной постановке решена верно1.