Компания ALT Linux
Опубликован: 12.03.2015 | Доступ: свободный | Студентов: 576 / 64 | Длительность: 20:55:00
Лекция 10:

Решение оптимизационных задач

10.2 Решение задач линейного программирования

Эти задачи встречаются во многих отраслях знаний. Алгоритмы их решения хорошо известны. Эти алгоритмы реализованы во многих, как проприетарных, так и свободных, математических пакетах. Не является исключением и Octave. Но перед тем, как рассмотреть решение задач линейного программирования в Octave, давайте вспомним, что такое задача линейного программирования.

10.2.1 Задача линейного программирования

Знакомство с задачами линейного программирования начнём на примере задачи об оптимальном рационе.

Задача об оптимальном рационе. Имеется четыре вида продуктов питания: П1, П2, П3, П4. Известна стоимость единицы каждого продукта c_{1},c_{2},c_{3},c_{4}. Из этих продуктов необходимо составить пищевой рацион, который должен содержать не болееb_{1} единиц белков, не более b_{2} единиц углеводов, не более b_{3} единиц жиров. Причём известно, в единице продукта П1 содержится a_{11} единиц белков, a_{12} единиц углеводов и a_{13} единиц жиров и т.д. (см. таблицу 10.1).

Требуется составить пищевой рацион, чтобы обеспечить заданные условия при минимальной стоимости.

Пусть x_{1},x_{2},x_{3},x_{4}— количества продуктов П1, П2, П3, П4. Общая стоимость рациона равна

L=c_{1}x_{1}+c_{2}x_{2}+c_{3}x_{3}+c_{4}x_{4}=\sum _{i=1}^{4}c_{i}x_{i} ( 10.1)

Сформулируем ограничение на количество белков, углеводов и жиров в виде неравенств. В одной единице продукта П1 содержится a_{11} единиц белков, в x_{1} единицах — a_{11}x_{1}, в x_{2} единицах продукта П2 содержится a_{21}x_{2} единиц белка и т.д. Следовательно общее количество белков во всех четырёх типов продукта равно \sum _{j=1}^{4}a_{j1}x_{j} и должно быть не больше b_{1}. Получаем первое ограничение

a_{11}x_{1}+a_{21}x_{2}+a_{31}x_{3}+a_{41}x_{4}\le b_{1} ( 10.2)

Аналогичные ограничения для жиров и углеводов имеют вид:

a_{12}x_{1}+a_{22}x_{2}+a_{32}x_{3}+a_{42}x_{4}\le b_{2}\\
					a_{13}x_{1}+a_{23}x_{2}+a_{33}x_{3}+a_{43}x_{4}\le b_{3} ( 10.3)

Принимаем во внимание, что x_{1},x_{2},x_{3},x_{4} положительные значения, получим ещё четыре ограничения

x_{1}\ge 0,\ x_{2}\ge 0,\ x_{3}\ge 0,\ x_{4}\ge 0 ( 10.3)

Таким образом задачу о оптимальном рационе можно сформулировать следующим образом: найти значения переменных x_{1},x_{2},x_{3},x_{4} удовлетворяющие системе ограничений (10.2) — (10.4), при которых линейная функция (10.1) принимала бы минимальное значение.

Задача об оптимальном рационе является задачей линейного программирования, функция (10.1) называется функцией цели, а ограничения (10.2) — (10.4) системой ограничений задачи линейного программирования.

В задачах линейного программирования функция цели L и система ограничений являются линейными.

В общем случае задачу линейного программирования можно сформулировать следующим образом. Найти такие положительные значения x_{1},x_{2},\ldots,x_{n}, при которых функция цели L (10.5) достигает своего минимального значения и удовлетворяет системе линейных ограничений (10.6).

L=c_{1}x_{1}+c_{2}x_{2}+\ldots +c_{n}x_{n}=\sum _{i=1}^{n}c_{i}x_{i} ( 10.5)
\sum _{j=1}^{n}a_{\mathit{ij}}x_{j}\le b_{i},\quad i=1,2,\ldots m. ( 10.6)

Если в задачу линейного программирования добавляется ограничение целочисленности значений x, то мы получаем задачу целочисленного программирования.

Octave позволяет решать задачи линейной оптимизации с ограничениями в более общей формулировке.

Найти такие положительные значения x_{1},x_{2},\ldots,x_{n}, при которых функция цели L (10.5) достигает своего минимального (максимального) значения и удовлетворяет системе линейных ограничений. Система ограничений может быть представлена неравенствами (10.7) или (10.8). При этом значения x могут быть, как вещественными, так и целочисленными, как положительными, так и отрицательными.

\sum _{j=1}^{n}a_{\mathit{ij}}x_{j}\le b_{i}, \quad i=1,2,\ldots,m ( 10.7)
\sum _{j=1}^{n}a_{\mathit{ij}}x_{j}\ge b_{i}, \quad i=1,2,\ldots,m ( 10.8)

Рассмотрим решение задач линейного программирования в Octave.

Алексей Игнатьев
Алексей Игнатьев

Возможна ли разработка приложения на Octave с GUI?

Евгений Ветчанин
Евгений Ветчанин

Добрый день. Я самостоятельно изучил курс "Введение в Octave" и хочу получить сертификат. Что нужно сднлать для этого? Нужно ли записаться на персональное обучение с тьютором или достаточно перевести деньги?