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

Автор работы: Пользователь скрыл имя, 08 Ноября 2017 в 14:33, реферат

Описание работы

Целочисленное программирование возникло в 50-60-е годы нашего века из нужд практики - главным образом в работах американских математиков Дж. Данцига и Р. Гомори. Первоначально целочисленное программирование развивалось независимо от геометрии чисел на основе теории и методов математической оптимизации, прежде всего линейного программирования. Однако, в последние время исследования в этом направлении все чаще проводятся средствами математики целых чисел.

Содержание работы

Введение.
1.Целочисленное программирование. Основные понятия
2.Методы решения задач целочисленного программирования
2.1Метод Гомори.
2.1.1 Первый алгоритм Гомори
2.2.2 Второй алгоритм Гомори
2.2.Метод ветвей и границ.
3.Задача о рюкзаке.
4.Задача коммивояжера.
Заключение.
Список используемой литературы.

Файлы: 1 файл

целочисленное программирование.docx

— 346.54 Кб (Скачать файл)

   МИНИСТЕРСТВО  ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ  ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение

высшего образования

НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ НИЖЕГОРОДСКИЙ     ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ им. И.ЛОБАЧЕВСКОГО

 

ДЗЕРЖИНСКИЙ ФИЛИАЛ

 

 

Направление подготовки «Экономика»

 

Реферат на тему: «Целочисленное программирование»

Дисциплина: Методы оптимальных решений

 

 

 

                                                                                                                                  

 

 

                                                                                                                          Выполнил студент

                                                                                                                 группы № 27 16 Б2 ЭК-2

                                                                                                                 Юкаева Д.С.

                                                                                                                 Проверил:  

                                                                                                                 Павленков М.Н. 

 

 

 

Дзержинск, 2017

СОДЕРЖАНИЕ

Введение.

1.Целочисленное программирование. Основные понятия

2.Методы решения задач целочисленного программирования

    2.1Метод Гомори.

        2.1.1 Первый алгоритм Гомори

        2.2.2 Второй алгоритм Гомори

    2.2.Метод ветвей  и границ.

3.Задача о рюкзаке.

4.Задача коммивояжера.

Заключение.

Список используемой литературы.

 

Введение.

      При рассмотрении целого ряда задач финансового менеджмента и бизнеса необходимо учитывать требование целочисленности используемых переменных. Такие задачи называются задачами целочисленного программирования.

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

       Целочисленное программирование возникло в 50-60-е годы нашего века из нужд практики - главным образом в работах американских математиков Дж. Данцига и Р. Гомори. Первоначально целочисленное программирование развивалось независимо от геометрии чисел на основе теории и методов математической оптимизации, прежде всего линейного программирования. Однако, в последние время исследования в этом направлении все чаще проводятся средствами математики целых чисел.

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

 

 

Целочисленное программирование. Основные понятия.

        Целочисленное программирование – один из наиболее молодых, перспективных и быстро развивающихся разделов математического программирования. Можно перечислить большое количество разнообразных задач планирования экономики, организации производства, исследования конфликтных ситуаций, синтеза схем автоматического регулирования, которые формально сводятся к выбору лучших, в некотором смысле, значений параметров из определенной дискретной совокупности заданных величин. К ним можно отнести и экстремальные комбинаторные задачи, возникающие в различных разделах дискретной математики. 
       Целочисленное программирование ориентировано на решение задач математического программирования, в которых все или некоторые переменные должны принимать только целочисленные значения. 
       Несмотря на то, что к настоящему времени разработан ряд методов решения целочисленных задач, ни один из них не обеспечивает желаемой эффективности соответствующих вычислительных процедур, что особенно проявляется при увеличении размерности задачи. Таким образом, в отличие от задач линейного программирования, время решения которых относительно невелико, реализация целочисленных алгоритмов в ряде случаев весьма затруднительна. 
       Одна из основных трудностей в целочисленном программировании связана с эффектом ошибки округления, возникающим при использовании цифровых ЭВМ. Даже наличие алгоритмов, применимых для решения задач с целочисленными коэффициентами и позволяющих обойтись без оперирования дробями (и, следовательно, избежать влияния ошибок округления), не упрощает ситуации, поскольку такие алгоритмы (в ряде случаев) сходятся чрезвычайно медленно. 
        Задачи и методы, относящиеся к перечисленному кругу вопросов, в литературе именуются по-разному. Наибольшее распространение получил термин «целочисленное программирование», однако встречаются и такие как «дискретное программирование», реже «комбинаторное программирование». 
       Наиболее изученными задачами этого класса являются целочисленные задачи линейного программирования, в которых на все переменные (или на их часть) наложено дополнительное требование целочисленности. От них принято отличать так называемые дискретные задачи линейного программирования, в которых область допустимого изменения каждой переменной – не множество целых неотрицательных чисел, а некоторое заданное конечное множество. 
       Целочисленные задачи математического программирования могут возникать различными путями:

     1. Существуют задачи линейного программирования, которые формально к целочисленным не относятся, но при соответствующих исходных данных всегда обладают целочисленным планом. Примеры таких задач – транспортная задача и ее модификации (задачи о назначениях, о потоках в сетях). 
     2. Толчком к изучению целочисленных задач в собственном смысле слова явилось рассмотрение задач линейного программирования, в которых переменные представляли физически неделимые величины. Они были названы задачами с неделимостью. Например, задачи об оптимизации комплекса средств доставки грузов, об определении оптимального машинного парка и его оптимального распределения по указанным работам, при условии минимизации суммарной стоимости (машинного парка и производимых работ), о нахождении минимального количества судов для осуществления данного графика перевозок и т. п. 
     3. Другим важным толчком к построению теории целочисленного программирования стал новый подход к некоторым экстремальным комбинаторным задачам. В них требуется найти экстремум целочисленной линейной функции, заданной на конечном множестве элементов. Такие задачи принято называть задачами с альтернативными переменными. В качестве примеров можно назвать задачи коммивояжера (бродячего торговца), об оптимальном назначении, теории расписания, или календарного планирования, и задачи с дополнительными логическими условиями (например, типа «или – или», «если – то» и т. п.). 

 

Методы решения задач целочисленного программирования

       Методы решения задач целочисленного программирования можно классифицировать как методы округлений (отсечений) и комбинаторные методы. 
       Исходной задачей для демонстрации возможностей методов округления, используемых при решении линейных целочисленных задач, является задача с ослабленными ограничениями, которая возникает в результате исключения требования целочисленности переменных. По мере введения специальных дополнительных ограничений, учитывающих требование целочисленности, многогранник допустимых решений округленной задачи постепенно деформируется, до тех пор, пока координаты оптимального решения не станут целочисленными. Название «методы округлений» связано с тем обстоятельством, что вводимые дополнительные ограничения округляют некоторые области многогранника допустимых решений, в которых отсутствуют точки с целочисленными координатами. 
       Соблазнительность использования метода понятна, особенно если погрешность округления невелика по сравнению со значениями округляемых переменных. Однако практическая реализация метода округления может привести к допустимому решению, значимо отличающемуся от оптимального решения исходной задачи целочисленного программирования. 
        Несостоятельность метода округления как общего метода решения задач целочисленного программирования обусловлена не только возможностью получения неоптимального решения. Дело заключается в том, что многие задачи математического программирования, не имеющие на первый взгляд никакого отношения к полностью или частично целочисленным задачам, могут быть сформулированы как задачи целочисленного программирования, в которых переменные модели принимают значения из множества {0, 1}. В этой ситуации процедура округления является логически неприемлемой. 
       В основе комбинаторных методов лежит идея перебора всех допустимых целочисленных решений. Разумеется, на первый план здесь выдвигается проблема разработки тестовых процедур, позволяющих непосредственно рассматривать лишь (относительно небольшую) часть указанных решений, а остальные допустимые решения учитывать некоторым косвенным образом. 
       Комбинаторные методы широко используют для решения задач булева программирования, т.е. для решения полностью целочисленных задач, переменные которых принимают значения из множества {0, 1}. Эти переменные называют булевыми переменными. Свойства булевых переменных позволяют существенно упростить процедуры поиска оптимального решения. 
     При решении многих экономических задач приходится рассматривать величины, которые в силу своего экономического содержания могут принимать только целые значения (количество человек, работающих на предприятии, выпуск продукции, которая оценивается поштучно и т.д.). Соответствующие математические модели принято называть моделями дискретного программирования. Различают три основные формы задач линейного программирования в зависимости от ограничений разного типа.             -Стандартная задача линейного программирования имеет вид:

(1.1)

В матричной форме задача (1.1) имеет вид:

где         - матрица коэффициентов. Вектор  называют вектором коэффициентов линейной формы, вектор   – вектором ограничений.

-Каноническая задача линейного программирования имеет вид:

(1.2)

или, в матричной форме (1.2):             

-Общая задача линейного программирования – часть ограничений выражается в виде неравенств, часть – в виде уравнений. Кроме того, не ко всем переменным относится условие неотрицательности:

Теорема. Стандартная, каноническая и общая задачи линейного программирования эквивалентны.

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

Рис.1

 

       Может показаться, что при решении подобной задачи достаточно сначала найти оптимальный план x* ее непрерывного аналога (то есть снять условие x ∈ Z), а затем искать ответ среди целочисленных векторов x, ближайших к x*. Однако, как показывает пример, изображенный на рис. 1, этот способ далеко не всегда приводит нас к правильному ответу. Действительно, ни одна из четырех точек (4;2), (4;3), (5;2) и (5;3), ближайших к x*, не принадлежит области D. Конечно, легко догадаться, что в задаче, изображенной на рисунке, следует рассмотреть точки с координатами (3;2) и (3;3), но если мы столкнемся с многомерной задачей, уже не допускающей геометрического представления, то выбор «ближайших» точек и их проверка на оптимальность будут связаны с громоздкими и зачастую ненужными вычислениями. Кроме того, целевая функция f(x) может вести себя так, что ее значение на найденной «ближайшей» точке будет намного меньше, чем на настоящем оптимальном плане целочисленной задачи. А если f(x) достигает максимума не на одной, а на нескольких точках из множества D, то, округляя x*, мы найдем только одно из нескольких возможных решений.

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

 

Метод Гомори

        Данный метод основан на применении симплекс – метода, с помощью которого первоначально находится оптимальное решение задачи ЛП без учета ограничений на целочисленности переменных. Метод Гомори, по сути, предполагает построение ограничений, которые отсекают решения, не являющиеся нецелочисленными. При этом не происходит отсечения ни одного решения целочисленного плана. Алгоритм решения задачи включает в себя нахождение подходящих вариантов симплексным методом, не принимая во внимание условий целочисленности. Если во всех компонентах оптимального плана присутствуют решения, относящиеся к целым числам, то можно считать, что цель целочисленного программирования достигнута. Возможно, что обнаружится неразрешимость задачи, так мы получаем доказательство того, что задача целочисленного программирования не имеет решения. Возможен вариант, когда в компонентах оптимального решения присутствуют числа нецелые. В таком случае ко всем ограничениям задачи добавляется новое ограничение. Для нового ограничения характерно наличие ряда свойств. Прежде всего, оно должно быть линейным, должно отсекать из найденного оптимального множества нецелочисленный план. Ни одно целочисленное решение не должно быть потеряно, отсечено. При построении ограничения следует выбирать компоненту оптимального плана с наибольшей дробной частью. Именно это ограничение будет добавлено к уже имеющейся симплексной таблице. Находим решение полученной задачи, используя обычные симплексные преобразования. Проверяем решение задачи на наличие целочисленного оптимального плана, если условие выполняется, то задача решена. Если опять был получен результат с наличием нецелочисленных решений, то вводим дополнительное ограничение, и повторяем процесс вычислений. Осуществив конечное число итераций, добиваемся получения оптимального плана задачи, поставленной перед целочисленным программированием, либо доказываем неразрешимость задачи.

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

 

Первый алгоритм Гомори

     Первый алгоритм Гомори используется для решения полностью целочисленных линейных задач. Рассмотрим задачу целочисленного линейного программирования (ЗЦЛП):

                            (1.3)                   

                  (1.4)

где xj – целые числа,       

      В соответствии с общей идеей методов отсечения, сначала решаем задачу (1.3) -(1.4) без учета целочисленности переменных. Если она неразрешима, то неразрешима и задача целочисленного линейного программирования. 

      Пусть x = (x1, ,..xn ) – оптимальный план задачи (1.3)-(1.4). Если компоненты вектора x являются целыми числами, то этот план является и решением ЗЦЛП. В противном случае необходимо построить первое отсечение, которое удовлетворяет условиям правильности и отсечения. Для этого напомним некоторые понятия.

Определение. Целой частью [a] числа a называется ближайшее целое число, не превосходящее данное число a. Дробной частью {a} числа a называется разность между самим числом и его целой частью, {a} = a −[a].

     Для любого числа a дробная часть {a}∈[0,1), для целого числа {a} = 0. Например, для числа a = 7/4 целая часть [7/4] = 1, дробная часть {7/4} = 3/4, для числа a = -7/4 целая часть [-7/4] = -2, дробная часть {-7/4} = 1/4.

     Без ограничения общности будем обозначать элементы оптимальной симплекс-таблицы ЗЛП также через aij , а элементы столбца b – bi .

    Пусть в оптимальном плане задачи (1.3) -(1.4) значение переменной xi не является целым. Построим отсечение для этой переменной. Условия правильности и отсечения для нее выражаются в виде неравенства:

 

которое записывается в виде равносильного ограничения-равенства:

 

и включается в систему ограничений задачи (1.3) -(1.4). Здесь s1 – неотрицательная базисная дополнительная переменная. Полученную расширенную задачу решают двойственным симплекс-методом. При необходимости строят новое отсечение, вводя переменную s2, и т. д.

 Примечания.

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

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

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

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