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

1.1 Постановка задачи целочисленного программирования

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

Задача линейного целочисленного программирования формируется следующим образом: найти такое решение (план) X = (x1,x2. xn), при котором линейная функция

принимает максимальное или минимальное значение при ограничениях

=bi, i=1, 2…, m. (2)

хj ³ 0, j=1, 2. п. (3)

xj целые числа (4)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В моей курсовой мы с вами рассмотрим такие методы как : метод ветвей и границ, метод Гомори, циклический алгоритм целочисленного программирования, полностью целочисленный алгоритм.

Источник

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

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

Задача о назначении: имеется n исполнителей, которые могут выполнять n различных работ. Известна полезность cij, связанная с выполнением i-м исполнителем j-ой работы j=1..n, i=1..n. Необходимо назначить исполнителей на работы так, чтобы добиться максимальной полезности, при условии, что каждый исполнитель может быть назначен только на одну работу и за каждой работой должен быть закреплен только один исполнитель.
Математическая модель задачи имеет вид:
F=∑∑cijxij → max
Каждый исполнитель назначается только на одну работу: ∑xij = 1
На каждую работу назначается только один исполнитель: ∑xij = 1
Условие неотрицательности и целочисленности:
xij ≥ 0, xij = , i=1..n, j=1..n
Для решения задачи о назначении используется сервис Задача о назначении.

Задача коммивояжера: коммивояжер должен посетить один и только один раз каждый из n городов и вернуться в исходный пункт. Его маршрут должен минимизировать суммарное пройденное расстояние.
F=∑∑cijxij → min
∑xij = 1
∑xij = 1
Условие неотрицательности и целочисленности:
xij ≥ 0, xij = , i=1..n, j=1..n
Добавляется условие прохождения маршрута через все города, т.е. так называемое условие цикличности. Иначе, маршрут должен представлять собой замкнутую ломаную, без пересечений в городах-точках.
Для решения задачи коммивояжёра используется сервис Задача коммивояжёра.

Экстремальная задача линейного программирования, в которой на решение налагается целочисленность компонент, является задачей целочисленного программирования и называется целочисленной задачей.

Методы решения целочисленных задач

Графический метод
При наличии в задаче линейного программирования двух переменных, задача может быть решена графическим методом.
В системе координат X10X2 находят область допустимых решений, строят вектор С и линию уровня. перемещая линию уровня по направлению С для задач на максимум, определяют наиболее удаленную от начала координат точку и ее координаты.
В случае, когда координаты этой точки нецелочисленные, в области допустимых решений строят целочисленную решетку и находят на ней такие целые числа x1 и x2, которые удовлетворяют системе ограничений и при которых значение целевой функции наиболее близко к экстремальному нецелочисленному решению. Координаты такой вершины являются целочисленным решением.
Аналогично решается задача на минимум. Целочисленному минимуму целевой функции будет соответствовать координаты вершины целочисленной решетки, лежащей в области допустимых решений, наиболее близкой к началу координат в направлении вектора С.
Для решения задачи графическим методом используется сервис Графический метод. Целочисленное программирование.

Решение.
Составим экономико-математическую модель задачи.
x1 – количество станков типа №1, выделенным для производства деталей A1
x2 – количество станков типа №1, выделенным для производства деталей A2
x3 – количество станков типа №2, выделенным для производства деталей A1
x4 – количество станков типа №2, выделенным для производства деталей A2
x1, x2, x3, x4 ≥ 0, x1, x2, x3, x4 целые числа,

Ограничения по плану
20x1 + 15x3 ≥ 1510
35x2 + 30x4 ≥ 4500

Методы отсечений

  1. полученное нецелочисленное решение ему не удовлетворяет;
  2. все целочисленные точки допустимого множества исходной задачи ему удовлетворяют.

Источник

Читайте также:  Сигнализация апс 2900 программирование
Оцените статью