Файл: Н.Ю. Коломарова Решение задач линейного целочисленного программирования методом гомори.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 01.06.2024
Просмотров: 41
Скачиваний: 0
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
КУЗБАССКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра вычислительной техники и информационных технологий
РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОГО ЦЕЛОЧИСЛЕННОГО ПРОГРАММИРОВАНИЯ МЕТОДОМ ГОМОРИ
Методические указания и задания к практическим занятиям по курсу
«Экономико-математические методы» для студентов экономических специальностей
Составитель Н.Ю.Коломарова
Утверждены на заседании кафедры Протокол № 5 от 30.11.99
Рекомендованы к печати учебнометодической комиссией по специальности 071900 Протокол № 2 от 30.11.99
Электронная копия находится в библиотеке главного корпуса КузГТУ
Кемерово 2000
1
1. ПОСТАНОВКА ЗАДАЧИ
Существует ряд задач оптимального планирования, в которых переменные могут принимать лишь целочисленные значения. Такие задачи связаны с определением количества единиц неделимой продукции, числа станков при загрузке оборудования, численности работников в структурных подразделениях предприятия и т.д. Достаточно часто возникают задачи с так называемыми булевыми переменными, решениями которых являются суждения типа «да-нет». Если функция и ограничения в таких задачах линейны, то мы говорим о задаче линейного целочисленного программирования.
Задача линейного целочисленного программирования формулиру-
ется следующим образом: найти такое решение (план)
Х = (x1, x2, ..., xn),
при котором линейная функция |
|
L = ∑n |
c j x j |
j = 1 |
|
принимает максимальное или минимальное значение при ограничениях
∑n |
aij x j = bi , i = 1, 2, ..., m |
j = |
1 |
|
x j ≥ 0 , j = 1, 2, ... n |
|
x j - целые числа. |
2. МЕТОД ГОМОРИ
Одним из методов решения задач линейного целочисленного программирования является метод Гомори. Сущность метода заключается в построении ограничений, отсекающих нецелочисленные решения задачи линейного программирования, но не отсекающих ни одного целочисленного плана.
2
Рассмотрим алгоритм решения задачи линейного целочисленного программирования этим методом.
1.Решаем задачу симплексным методом без учета условия целочисленности. Если все компоненты оптимального плана целые, то он является оптимальным и для задачи целочисленного программирования. Если обнаруживается неразрешимость задачи, то и неразрешима задача целочисленного программирования.
2.Если среди компонент оптимального решения есть нецелые, то к ограничениям задачи добавляем новое ограничение, обладающее следующими свойствами:
- оно должно быть линейным; - должно отсекать найденный оптимальный нецелочисленный
план; - не должно отсекать ни одного целочисленного плана.
Для построения ограничения выбираем компоненту оптимального плана с наибольшей дробной частью и по соответствующей этой компоненте k-й строке симплексной таблицы записываем ограничение Гомори.
|
|
f k = ∑ |
f kj x j − S* , S* ≥ 0 , |
|
|
j |
Б |
где fk |
= xj - [xj]; |
|
|
fkj |
= zkj - [zkj]; |
|
|
S* |
- новая переменная; |
|
|
[xj], [zkj] - ближайшее целое, не превосходящее xj и zkj соответст- |
|||
венно. |
|
|
|
3. |
Составленное ограничение добавляем к имеющимся в сим- |
плексной таблице, тем самым получаем расширенную задачу. Чтобы получить опорный план этой задачи, необходимо ввести в базис тот
вектор, для которого величина |
|
∆ j |
|
минимальна. И если для этого век- |
|||
f kj |
|||||||
|
|
|
|
|
|||
тора величина θ = min |
x j |
получается по дополнительной строке, то в |
|||||
zij |
|||||||
zij > 0 |
|
|
|
|
|
следующей симплексной таблице будет получен опорный план. Если же величина θ не соответствует дополнительной строке, то необходимо
3
переходить к М-задаче (вводить искусственную переменную в ограничение Гомори).
4. Решаем при помощи обычных симплексных преобразований полученную задачу. Если решение этой задачи приводит к целочисленному оптимальному плану, то искомая задача решена. Если мы получили нецелочисленное решение, то снова добавляем одно дополнительное ограничение, и процесс вычислений повторяется. Проделав конечное число итераций, либо получаем оптимальный план задачи целочисленного программирования, либо устанавливаем ее неразрешимость.
Замечания:
1.Если дополнительная переменная S* вошла в базис, то после пересчета какого-либо последующего плана соответствующие ей строку и столбец можно удалить (тем самым сокращается размерность задачи).
2.Если для дробного xj обнаружится целочисленность всех коэффициентов соответствующего уравнения (строки), то задача не имеет целочисленного решения.
3. ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ МЕТОДОМ ГОМОРИ
Задача: Для приобретения нового оборудования предприятие выделяет 19 ден.ед. Оборудование должно быть размещено на площади, не превышающей 16 кв.м. Предприятие может заказать оборудование двух видов: машины типа «А» стоимостью 2 ден.ед., требующие производственную площадь 4 кв.м и обеспечивающие производительность за смену 8 т продукции, и машины типа «В» стоимостью 5 ден.ед., занимающие площадь 1 кв.м и обеспечивающие производительность за смену 6 т продукции.
Требуется составить оптимальный план приобретения оборудования, обеспечивающий максимальную общую производительность.
Решение: Обозначим через x1, x2 количество машин соответственно типа «А» и «В», через L - их общую производительность. Тогда математическая модель задачи:
max L = 8x1 + 6x2
при ограничениях:
|
|
4 |
|
|
2x1 |
+ 5x2 |
≤ |
19 |
|
4x1 |
+ |
x2 |
≤ |
16 |
x1 ≥ |
0, x2 ≥ 0 |
x1, x2 - целые числа
Решаем задачу симплексным методом без учета целочисленности.
С0 |
Б0 |
Х0 |
8 |
6 |
|
|
|
|
|
|
|
|
|
|
х1 |
х2 |
х3 |
|
х4 |
|
|
|
х3 |
19 |
2 |
5 |
1 |
|
|
|
|
|
|
х4 |
16 |
4 |
1 |
|
1 |
|
|
||
|
zj |
0 |
|
|
|
|
|
|
|
|
|
∆ j |
-8 |
-6 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
С1 |
Б1 |
Х1 |
8 |
6 |
|
|
|
|
|
|
|
|
|
|
х1 |
х2 |
х3 |
|
х4 |
|
|
|
х3 |
11 |
|
|
9/2 |
1 |
-1/2 |
|
|
|
8 |
х1 |
4 |
1 |
1/4 |
|
1/4 |
|
|
||
|
zj |
32 |
8 |
2 |
|
2 |
|
|
||
|
∆ j |
|
|
-4 |
|
2 |
|
|
||
|
|
|
|
|
|
|
|
|
|
|
С2 |
Б2 |
Х2 |
|
8 |
6 |
|
|
|
|
|
|
|
|
|
х1 |
х2 |
х3 |
|
х4 |
|
S1 |
6 |
х2 |
22/9 |
|
|
1 |
2/9 |
|
-1/9 |
|
|
8 |
х1 |
61/18 |
|
1 |
|
-1/18 |
|
5/18 |
|
|
|
zj |
376/9 |
|
8 |
6 |
8/9 |
|
14/9 |
|
|
|
∆ j |
|
|
|
8/9 |
|
14/9 |
|
|
|
|
|
4/9 |
|
|
|
2/9 |
|
8/9 |
|
-1 |
Получен оптимальный нецелочисленный план Хопт = (61/18;22/9).
Lmax = 376/9.
Т.к. у компоненты плана х2 максимальная дробная часть: max(4/9;7/18) = 4/9, то дополнительное ограничение записываем по первой строке.
22/9 - [22/9] = (2/9 - [2/9])x3 + (-1/9 - [-1/9])x4 - S1, S1 ≥ 0 22/9 - 2 = (2/9 - 0)x3 + (-1/9 - (-1))x4 - S1, S1 ≥ 0
5
4/9 = 2/9x3 + 8/9x4 - S1, S1 ≥ 0 - первое ограничение Гомори
Составленное ограничение дописываем к имеющимся в симплексной таблице.
После построения дополнительного ограничения имеем новую задачу линейного программирования, в которой 3 ограничения. Для получения опорного плана этой задачи необходимо найти третий базис-
|
∆ |
j |
|
8 / 9 |
|
14 / 9 |
|
= 7 / 4 в |
|
ный вектор. Для этого определяем: min |
|
|
= min |
|
; |
|
|
|
|
f kj |
|
|
|
||||||
|
|
2 / 9 |
|
8 / 9 |
|
|
базис вводим вектор х4. |
|
x j |
|
|
61/18 |
|
4 / 9 |
|
|
Рассчитываем величину θ = |
|
− ; |
|
= 1/ 2 . |
|||||
min |
|
= min |
|
; |
|
|
|||
|
|
|
|||||||
|
zij > 0 |
zij |
|
|
5 /18 |
|
8 / 9 |
|
Минимальное значение θ получено по дополнительной строке, значит, не прибегая к искусственной переменной, получаем опорный план расширенной задачи.
С3 |
Б3 |
Х3 |
8 |
6 |
|
|
|
|
|
|
|
х1 |
х2 |
х3 |
х4 |
S1 |
S2 |
6 |
х2 |
5/2 |
|
1 |
1/4 |
|
-1/8 |
|
8 |
х1 |
13/4 |
1 |
|
-1/8 |
|
5/16 |
|
|
х4 |
1/2 |
|
|
1/4 |
1 |
-9/8 |
|
|
zj |
41 |
8 |
6 |
1/2 |
|
7/4 |
|
|
∆ j |
|
|
1/2 |
|
7/4 |
|
|
|
|
1/2 |
|
|
1/4 |
|
7/8 |
-1 |
Найденный план оптимален, но нецелочисленный. Строим новое ограничение Гомори.
Т.к. максимальная дробная часть среди компонент плана равна 1/2, записываем дополнительное ограничение по первой строке (можно и по третьей).
5/2 - [5/2] = (1/4 - [1/4])x3 + (-1/8 - [-1/8])S1 - S2, S2 ≥ 0
1/2 = 1/4x3 + 7/8S1 - S2, S2 ≥ 0 - второе ограничение Гомори
Это ограничение добавляем в последнюю симплексную таблицу.
6
Получили задачу, в которой 4 ограничения, следовательно, в базисе должно быть 4 единичных вектора.
|
|
1/ 2 |
|
7 / 4 |
|
= 2 . Можно |
||
Определяем вектор, вводимый в базис: |
min |
|
|
; |
|
|
||
1/ 4 |
7 / 8 |
|||||||
|
|
|
|
|
ввести либо x3, либо S1. Введем вектор S1. |
|
|
|
|
||||||||||||||
|
|
|
|
|
13 / 4 |
|
1/ 2 |
|
|
|
|
|
|
|
||||
θ |
= min |
− ; |
|
|
|
;− ; |
|
|
|
= |
4 / 7 |
соответствует дополнительному |
||||||
5 /16 |
|
|
||||||||||||||||
|
|
|
|
|
|
7 / 8 |
|
|
|
|
|
|
|
|||||
ограничению. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
С4 |
|
Б4 |
|
Х4 |
|
8 |
|
6 |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
х1 |
|
х2 |
|
х3 |
х4 |
S1 |
S2 |
S3 |
|
||
6 |
|
х2 |
18/7 |
|
|
|
1 |
|
2/7 |
|
|
-1/7 |
|
|
||||
8 |
|
х1 |
43/14 |
|
1 |
|
|
|
-3/14 |
|
|
5/14 |
|
|
||||
|
|
х4 |
|
8/7 |
|
|
|
|
|
4/7 |
1 |
|
-9/7 |
|
|
|||
|
|
S1 |
|
4/7 |
|
|
|
|
|
2/7 |
|
1 |
-8/7 |
|
|
|||
|
|
zj |
|
40 |
|
8 |
|
6 |
|
|
|
|
2 |
|
|
|||
|
|
∆ j |
|
|
|
|
|
|
|
|
|
2 |
|
|
||||
|
|
|
|
4/7 |
|
|
|
|
|
2/7 |
|
|
6/7 |
-1 |
|
Получаем новый оптимальный нецелочисленный план. Учитывая замечание 1, вычеркиваем строку и столбец, соответствующие пере-
менной S1.
В полученном плане максимальную дробную часть имеет компонента х2, поэтому записываем дополнительное ограничение по первой строке.
4/7 = 2/7x3 + 6/7S2 - S3, S3 ≥ 0 |
- третье ограничение Гомори. |
|||||||
Определяем вектор, вводимый в базис: |
|
0 |
|
2 |
|
= 0. Это |
||
min |
|
; |
|
|
||||
2 / 7 |
6 / 7 |
|||||||
|
|
|
|
|
|
вектор х3. Минимальное значение θ = 2, что соответствует дополнительной строке.
После проведения очередных симплексных преобразований получили: