
Содержание
Введение |
3 |
Теоретическая база. Методы решения |
4 |
Решения задач целочисленного программирования |
19 |
Теоретические выводы |
37 |
Заключение |
40 |
Список литературы |
41 |
Приложение |
42 |
Введение
Целочисленное программирование – раздел математического программирования, занимающийся решением задач в которых все или некоторые переменные принимают целочисленные значения.
В исследовании операций и в эконометрике довольно часто встречаются ситуации, когда управляемые переменные могут принимать лишь вполне определённые значения, по отношению к которым понятие бесконечно малой окрестности не имеет физического смысла. Таким образом, с точки зрения практического применения задач целочисленного программирования являются очень важным и имеют большое применение в таких задачах как распределение капиталовложения, задача коммивояжёра, задача о ранце, задача о назначениях и другие [1].
Целью данной курсовой работы является рассмотрение спектра задач целочисленного программирования, методов их решения и их экономического применения.
Основными задачами данной курсовой работы является:
Анализ и получение оптимальных решений;
Выявление проблем, связанных с получением оптимального решения;
Проработка всех направлений целочисленного программирования.
Используемые методы для анализа:
графический метод;
метод Гомори;
метод ветвей и границ;
методы динамического программирования;
и другие.
1 Теоретическая база. Методы решения
Целочисленное программирование – раздел математического программирования в котором все или некоторые переменные должны принимать целочисленное значение. Если на все переменные наложено условие целочисленности задача называется полностью целочисленной; когда это условие относится лишь к некоторым переменным, задача называется частично целочисленной. Если при этом целевая функция и функции, входящие в ограничения, линенейные, то говорят, что данная задача является задачей линейного целочисленного программирования.
Разделим задачи целочисленного программирования на классы:
Задачи которые сводятся к задачам целочисленного программирования, в которых переменные представляют собой физически не делимые единицы.
Другим важным классом таких задач являются экстремальные комбинаторные задачи, переменные которых носят логический характер (х=0 или х=1). Такие переменные называются булевыми. К таким задачам относятся, например, задача выбора некоторого подмножества, обладающего какими-либо экстремальными свойствами.
Задачи не требующие явного условия целочисленности, но сводящиеся к задачам целочисленного или частично целочисленного программирования.
Решение задачи целочисленного программирования сводится к следующим этапам:
Построение математической модели;
Решение математической модели выбранным методом;
Анализ полученных данных и принятие решения.
Первый этап решения задач целочисленного программирования – построение математической модели сводится к следующему алгоритму, который может быть модифицирован в зависимости от задачи, которая в свою очередь зависит от того к какому классу задач целочисленного программирования она относится:
Формализация целевой функции приведена в формуле (1.1)
Наложение ограничений показано в формулах (1.2).
В зависимости от условий конкретной задачи могут быть введены дополнительные ограничения на отдельные переменные, которые могут быть выражены, например, формулой (1.3)
где dj, Dj – свободные коэффициенты.
После определения класса задач, построения математической модели следует этап решения задачи, который реализуется с помощью методов, таких как:
графический метод решения задач;
метод Гомори;
метод ветвей и границ;
и другие методы в зависимости от класса решаемых задач.
Рассмотрим методы решения задач целочисленного программирования:
Графический метод решения задач
Пусть заданы некоторые данные, которые сводятся к следующей математической модели.
Целевая функция и ограничения приведены в формулах 1.1.1 и 1.1.2.
На основании ограничений, условия не отрицательности, находим выпуклую область допустимых решений. Полученная область не полностью удовлетворяет ограничениям, так как не является множеством целочисленных решений, поэтому накладываем ограничения целочисленности. В результате получим систему точек и выпуклая область сменится на многогранник.
Для получения оптимального решения можно воспользоваться градиентом методом или параллельным переносом линии целевой функции.
В результате получаем оптимальное решение, то есть значение переменных, которые при подстановке в целевую функцию будут максимально её выражать при заданных ограничениях.
Практически любой класс линейного программирования может быть решён практически. Однако данный метод решения не может быть реализован или реализован с большими временными затратами при количестве переменных равным 3 и более. Поэтому данный метод не будет рассмотрен в практической части.
Метод Гомори.
Данный метод основан на симплексном методе.
Исходные данные приведены в формулах (1.2.1) и (1.2.2).
На первом этапе данная задача решается симплекс-методом, если полученное решение не целочисленное, то вводим дополнительное ограничение, которые должны быть:
линейным;
отсекать найдённый оптимальный не целочисленный план;
не должно отсекать ни одного целочисленного плана.
Дополнительное ограничение обладающие этими свойствами называются правильным отсечением[2].
Ограничение накладывается на нецелочисленную переменную или на ту переменную, которая имеет большее дробное значение. Ограничение накладывается на не целочисленную переменную через не основные переменные. Ограничение составляется используя следующее правило: дробная часть свободного члена берётся с тем же знаком, который он имеет и в уравнении, а дробные части неосновных переменных – с противоположным знаком и выделяется положительная дробь. Например, {a}=a, {-a}={-A+a*}, где А – целая часть отрицательное число, а*-положительная дробь.
Получаем новое ограничение, вводим новую основную переменную, приведённое в формуле (1.2.3).
где xn+1 – нововведённая переменная,
xj – переменные не входящие в базис.
Новое ограничение следует вводить в последний этап симплекс метода, когда все переменные имеющиеся в целевой функции, так же входят в базис.
Полученное базисное решение всегда не допустимое, соответствующее правильному отсечению.
Для получения допустимого базисного решения необходимо перевести в основные переменную, входящую с положительным коэффициентом в уравнение, в котором свободный член отрицательный [2].
При выборе какую переменные ввести в базис взамен нововведённой, следует выразить эти переменные и следую логическому рассуждения, подставить в базис ту переменную которая даёт целочисленное решение на наложенное ограничение.
Введение новых ограничений следует производить, если не получено целочисленное решение, после решения на первом этапе симплекс-методом и после введения новых ограничений.
Если в процессе решения появится выражение с нецелым свободным членом и целыми остальными коэффициентами, то соответствующее уравнение не имеет решения в целых числах. В этом случае и данная задача не имеет целочисленного оптимального решения[2].