Целочисленное программирование

Автор: Пользователь скрыл имя, 13 Октября 2011 в 17:34, контрольная работа

Краткое описание

Понятие целочисленного программирования, метод ветвей и границ

Файлы: 1 файл

Курсач.docx

— 71.70 Кб (Скачать)

     Соблазнительность использования метода округления понятна, особенно если погрешность округления невелика по сравнению со значениями округляемых переменных. Однако практическая реализация метода округления может  привести к допустимому решению, значимо отличающемуся от оптимального решения исходной задачи целочисленного программирования.

     Несостоятельность метода округления как общего метода решения задач целочисленного программирования обусловлена не только возможностью получения неоптимального решения. Дело заключается в том, что многие задачи математического программирования, не имеющие на первый взгляд никакого отношения к полностью или  частично целочисленным задачам, могут  быть сформулированы как задачи целочисленного программирования, в которых переменные модели принимают значения из множества {0, 1}. В этой ситуации процедура округления является логически неприемлемой.

     Для иллюстрации основной идеи методов  решения задач целочисленного программирования, известных как методы отсечений, рассмотрим полностью целочисленную  задачу, множество допустимых решений  которой изображено на рисунке 1. Допустимым решениям этой задачи соответствуют  не все точки множества G допустимых решений, а лишь те, координаты которых удовлетворяют требованию целочисленности. Теоретически из множества G всегда можно выделить такое подмножество G*, что (см. рис. 1):

     а) оно содержит все точки множества  G, координаты которых удовлетворяют требованию целочисленности;

     б) оно является выпуклым множеством;

     в) координаты всех его крайних точек  удовлетворяют требованию целочисленности. 

     

     Рис. 1 

     Если  в рассматриваемой полностью  целочисленной задаче множество  G допустимых решений заменить множеством G*, то это не может привести к изменению ее оптимального решения, так как G* получено из G путем отсечения от него подмножества, заведомо не содержащего допустимых решений, удовлетворяющих требованию целочисленности. Но в этом случае оптимальное решение задачи линейного программирования с ослабленными ограничениями и множеством G* допустимых решений соответствует крайней точке множества G*. Как следствие, оно удовлетворяет требованию целочисленности и обеспечивает экстремальное значение целевой функции не только на G*, но и на G, т.е. является оптимальным решением исходной полностью целочисленной задачи. Основные различия в методах отсечений связаны с процедурами выделения подмножества G* множества допустимых решений задачи целочисленного программирования.

     В основе комбинаторных методов решения  задач целочисленного программирования лежит идея перебора всех элементов  G множества допустимых решений, удовлетворяющих требованию целочисленности, с целью нахождения оптимального решения. При этом за счет использования различных специальных процедур, как правило, непосредственно рассматривают лишь часть элементов G, удовлетворяющих требованию целочисленности, а оставшиеся элементы учитывают некоторым косвенным образом.

     Наиболее  известным комбинаторным методом  является метод ветвей и границ, использующий процедуру решения  задачи линейного программирования с ослабленными ограничениями, соответствующей  исходной задаче целочисленного программирования. Если оптимальное решение X* задачи линейного программирования с ослабленными ограничениями не удовлетворяет требованию целочисленности (на рисунке 2 этому решению соответствует точка В), то из множества G допустимых решений выделяют два непересекающихся выпуклых подмножества К1 и К2, содержащих все допустимые решения из G, удовлетворяющих требованию целочисленности и не содержащих X* (см. рис. 2). Это позволяет заменить рассматриваемую задачу целочисленного программирования совокупностью двух эквивалентных ей задач с множествами допустимых решений К1 и К2 соответственно, так как или .  

     

     Рис. 2 

     Комбинаторные методы широко используют для решения  полностью целочисленных задач, переменные которых принимают значения из множества {0, 1}. Эти переменные называют булевыми переменными. Свойства булевых  переменных позволяют существенно  упростить процедуры поиска оптимального решения.

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

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

     Элемент 2. Каждой задаче, порожденной исходной задачей, ставится в соответствие так называемая ослабленная задача (задача с ослабленными ограничениями), оптимальное решение которой может быть найдено с гораздо меньшими затратами, чем оптимальное решение соответствующей ей задачи-истока. Специфика ослабленной задачи чаще всего заключается в том, что ее система ограничений является менее жесткой по сравнению с системой ограничений задачи-истока и определяет множество допустимых решений, содержащее все допустимые решения задачи-истока. Как правило, в целочисленном программировании ослабленная задача представляет собой задачу линейного программирования с ограничениями, более слабыми, чем в соответствующей целочисленной задаче-истоке. Очевидно, что если ослабленная задача не имеет допустимых решений, то их не имеет и задача-исток. В некоторых модификациях методов целочисленного программирования целевая функция ослабленной задачи также может отличаться от целевой функции задачи-истока. В этом случае оптимальное значение целевой функции ослабленной задачи (т.е. значение, соответствующее оптимальному решению) должно быть не меньше оптимального значения целевой функции задачи-истока, если речь идет о задаче максимизации. Кроме того, оптимальное значение целевой функции ослабленной задачи определяет (для задачи максимизации) верхнюю границу для оптимального значения целевой функции задачи-истока.

     Элемент 3. В результате анализа решения ослабленной задачи в зависимости от специфики метода, как правило, принимается решение, относящееся к задаче-истоку:

     а) исключить ее из рассмотрения;

     б) заменить одной порожденной задачей, выбранной по специальному правилу  из определенной совокупности;

     в) заменить системой порожденных задач.

     Следует отметить, что существуют и другие подходы к решению задач целочисленного программирования, которые в общем  случае не гарантируют нахождения оптимального решения, но приводят к допустимому  решению, близкому (в смысле значения целевой функции) к оптимальному, а иногда и совпадающему с ним. В основе одного из таких подходов лежит идея использования случайной выборки допустимых решений с последующим улучшением (в смысле значения целевой функции) каждого из них, когда возможность улучшения допустимого решения достаточно просто обнаружить [2]. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

     2.1 Алгоритм решения задач методом ветвей и границ 

     Метод ветвей и границ - один из комбинаторных  методов. Его суть заключается в  упорядоченном переборе вариантов  и рассмотрении лишь тех из них, которые  оказываются по определенным признакам  перспективными, и отбрасывании бесперспективных вариантов.

     Метод ветвей и границ состоит в следующем: множество допустимых решений (планов) некоторым способом разбивается  на подмножества, каждое из которых  этим же способом снова разбивается  на подмножества. Процесс продолжается до тех пор, пока не получено оптимальное  целочисленное решение исходной задачи [5].

     Алгоритм  решения:

     Первоначально находим симплексным методом  или методом искусственного базиса оптимальный план задачи без учета  целочисленности переменных. Пусть им является план X0. Если среди компонент этого плана нет дробных чисел, то тем самым найдено искомое решение данной задачи и

Fmax = F(Xo).

     Если  же среди компонент плана X0 имеются дробные числа, то X0 не удовлетворяет условию целочисленности и необходимо осуществить упорядоченный переход к новым планам, пока не будет найдено решение задачи. Покажем, как это можно сделать, предварительно отметив, что

F(X0) ³ F(X) для всякого последующего плана X.

     Предполагая, что найденный оптимальный план X0 не удовлетворяет условию целочисленности переменных, тем самым считаем, что среди его компонент есть дробные числа. Пусть, например, переменная приняла в плане X0 дробное значение. Тогда в оптимальном целочисленном плане ее значение будет по крайней мере либо меньше или равно ближайшему меньшему целому числу , либо больше или равно ближайшему большему целому числу + 1. Определяя эти числа, находим симплексным методом решение двух задач линейного программирования:

       

     Найдем  решение задач линейного программирования (I) и (II). Очевидно, здесь возможен один из следующих четырех случаев:

     1. Одна из задач неразрешима,  а другая имеет целочисленный  оптимальный план. Тогда этот  план и значение целевой функции  на нем и дают решение исходной  задачи.

     2. Одна из задач неразрешима,  а другая имеет оптимальный  план, среди компонент которого  есть дробные числа. Тогда рассматриваем  вторую задачу и в ее оптимальном  плане выбираем одну из компонент,  значение которой равно дробному  числу, и строим две задачи, аналогичные задачам (I) и (II).

     3. Обе задачи разрешимы. Одна  из задач имеет оптимальный  целочисленный план, а в оптимальном  плане другой задачи есть дробные  числа. Тогда вычисляем значения  целевой функции на этих планах  и сравниваем их между собой.  Если на целочисленном оптимальном  плане значение целевой функции  больше или равно ее значению  на плане, среди компонент которого  есть дробные числа, то данный  целочисленный план является  оптимальным для исходной задачи и он вместе со значением целевой функции на нем дает искомое решение.

     Если  же значение целевой функции больше на плане, среди компонент которого есть дробные числа, то следует взять  одно из таких чисел и для задачи, план которой рассматривается, необходимо построить две задачи, аналогичные (I) и (II).

     4. Обе задачи разрешимы, и среди  оптимальных планов обеих задач  есть дробные числа. Тогда вычисляем  значение целевой функции на  данных оптимальных планах и  рассматриваем ту из задач,  для которой значение целевой  функции является наибольшим. В  оптимальном плане этой задачи  выбираем один из компонентов, значение, которого является дробным числом, и строим две задачи, аналогичные (I) и (II).

     Таким образом, описанный выше итерационный процесс может быть представлен  в виде некоторого дерева, на котором  исходная вершина отвечает оптимальному плану Х0 задачи (1)-(3), а каждая соединенная с ней ветвью вершина отвечает оптимальным планам задач (I) и (II). Каждая из этих вершин имеет свои ветвления. При этом на каждом шаге выбирается та вершина, для которой значение функции является наибольшим. Если на некотором шаге будет получен план, имеющий целочисленные компоненты, и значение функции на нем окажется больше или равно, чем значение функции в других возможных для ветвления вершинах, то данный план является оптимальным планом исходной задачи целочисленного программирования и значение целевой функции на нем является максимальным.

     Итак, процесс нахождения решения задачи целочисленного программирования (1)-(4) методом ветвей и границ включает следующие основные этапы:

     1. Находят решение задачи линейного  программирования (1)-(3).

     2. Составляют дополнительные ограничения  для одной из переменных, значение  которой в оптимальном плане  задачи (1)-(3) является дробным числом.

     3. Находят решение задач (I) и (II), которые получаются из задачи (1)-(3) в результате присоединения дополнительных ограничений.

     4. В случае необходимости составляют  дополнительные ограничения для  переменной, значение которой является  дробным, формулируют задачи, аналогичные  задачам (I) и (II), и находят их решение. Итерационный процесс продолжают до тех пор, пока не будет найдена вершина, соответствующая целочисленному плану задачи (1)-(3) и такая, что значение функции в этой вершине больше или равно значению функции в других возможных для ветвления вершинах.

     Описанный выше метод ветвей и границ имеет  более простую логическую схему  расчетов, чем метод Гомори. Поэтому  в большинстве случаев для нахождения решения конкретных задач целочисленного программирования с использованием ЭВМ применяется именно этот метод [2].  

Информация о работе Целочисленное программирование