Линейное программирование: решение задач графическим методомРефераты >> Программирование и компьютеры >> Линейное программирование: решение задач графическим методом
Сводя все вместе и добавляя условия
получим рисунок 5, где выделена область, в которой выполняются одновременно все ограничения (1.32). Обратите внимание на то, что получившаяся область имеет вид выпуклого многоугольника.
Этап 2.
Вернёмся теперь к исходной задаче линейного программирования. В ней, кроме системы неравенств, есть еще целевая функция
.
|
Рассмотрим прямую
. Будем увеличивать L. Что будет происходить с нашей прямой?
Легко догадаться, что прямая будет двигаться параллельно самой себе в том направлении, которое дается вектором
, так как это - вектор нормали к нашей прямой и одновременно вектор градиента функции
.
А теперь сведем всё вместе. Итак, надо решить задачу
Oграничения задачи вырезают на плоскости некоторый многоугольник. Пусть при некотором L прямая
пересекает допустимую область. Это пересечение дает какие-то значения переменных
, которые являются планами.
Этап 3
Увеличивая L мы начнем двигать нашу прямую и её пересечение с допустимой областью будет изменяться (см. рис. 7). В конце концов эта прямая выйдет награницу допустимой области - как правило, это будет одна из вершин многоугольника. Дальнейшее увеличение L приведёт к тому, что пересечение
|
прямой
с допустимой областью будет пустым. Поэтому то положение прямой
, при котором она вышла на граничную точку допустимой области, и даст решение задачи, а соответствующее значение L и будет оптимальным значением целевой функции.
1.4 Примеры задач, решаемых графическим методом.
Пример:
Решить задачу
|
|
(1.41) |
Решение
Допустимую область мы уже строили - она изображена на рис. 5.
Повторим еще раз этот рисунок, оставив только допустимую область и нарисовав дополнительно прямые
(см. рис. 8).
|
Пусть, например, L=2. Тогда прямая
проходит через точки (2,0) и (0,1) и изображена на рис. 8. Будем теперь увеличивать L. Тогда прямая начнёт двигаться параллельно самой себе в направлении, указанном стрелкой. Легко догадаться, что максимальное значение L получится тогда, когда прямая пройдет через вершину многоугольника, указанную на рисунке, и дальнейшее увеличение L приведет к тому, что прямая выйдет за пределы многоугольника и её пересечение с допустимой областью будет пустым.
Выделенная вершина лежит на пересечении прямых
и поэтому имеет координаты
. Это и есть решение нашей задачи, т.е.
есть оптимальный план задачи (1.41). При этом значение целевой функции
, что и дает её максимальное значение.
Обратите внимание на то, что оптимальный план, как правило, соответствует какой-то вершине многоугольника, изображающего допустимую область. И лишь в том случае, когда прямая
случиться так, что решение не будет единственным. Но и в этом случае вершины, соответствующие границам этой стороны, дают оптимальные планы нашей задачи линейного программирования. Таким образом, вершины допустимой области играют в решении задач линейного программирования особую роль.
|
Ну, а если допустимая область неограничена, то и значение целевой функции может быть неограниченным.
Подводя итог этим примерам, можно сформулировать следующие положения:
1. допустимая область - это выпуклый многоугольник;
2. оптимум достигается в вершине допустимой области (если допустимая область ограничена и не пуста);
3. ограниченность целевой функции в допустимой области является необходимым и достаточным условием разрешимости задачи.
Гл 2 Решение задач линейного программирования графическим способом на ЭВМ
2.1 Описание работы программы
Программа написана с использованием собственных функций и процедур и трех стандартных модулей System, Crt и Graph.
При запуске программы она проверяет возможно ли использование графического интерфейса. Если это возможно то программа переходит к следующему этапу.
Далее процедурой ShowXOY Рисуется на экран координатные оси. На этом работа этой процедуры заканчивается и пользователь в следующей процедуре (EnterNerav и в частности в подпроцедуре GetNerav) предлагается ввести коэффициенты неравенства a1x+a2y=b в следующем порядке: a1 пробел a2 пробел b. Сразу после ввода всех коэффициентов процедурой ShowLine рисуется нужная линия. После нажатия [Esc] процедура EnterNerav заканчивается и передает управление процедуре EnterMainF в которой пользователю предлагается ввести коэффициенты целевой функции. Далее работа переходит к процедуре GetResult где идет подсчет оконцательного товета с помощбю процедуры SolveOprtel где считаетя определитель т. е. точки пересечения целевой функции с каждой линией ограничения. Далее выводится ответ, если это возможно.
