Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Математические методы принятия решений

..pdf
Скачиваний:
2
Добавлен:
13.11.2023
Размер:
22.94 Mб
Скачать

3)дополнительные ограничения (гиперплоскости) проходят по крайней мере через одну целочисленную точку, хотя и не обязатель­ но находящуюся внутри выпуклой оболочки;

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

Заметим, что оптимальное решение исходной задачи может быть получено прежде, чем допустимая область будет сокраще­ на до области O EF G H . Оптимальное целочисленное решение определяется пересечением п гиперплоскостей, что обеспечивается процедурой отсечения; некоторые гиперплоскости могут соответ­ ствовать ограничениям исходной задачи.

Задачу целочисленного программирования можно записать в виде табл. 2.17.

 

 

 

Таблица 2.17

Запись задачи целочисленного программирования

Переменные

1

-XI

Хп

Х\

0

-1

0

хп

0

0

- i

Хп+1

0-71+1,0

Оп+1,1

О-п+1,п

Яп+тп

Оп+771, 0

ûn+m, 1

О-П+ТП,71

Ооо

aoi

ООп

Обычно в ограничения задачи (2.9) включают тривиальные соотношения Xj = —(—Xj), j = 1,2, ... , п. Запись переменных в ви­

де

х\, —Х2, ..., —х п исторические используется в целочислен­

ном

программировании. Будем через ûj, j = 0 , 1 , ... ,п , обозна­

чать j -й столбец текущей таблицы и через ay , i = 0 ,1 , ... , п + тп, j = 0 ,1 , ... , п, — элемент г-й строки и j-ro столбца таблицы. Пред­ полагается, что все a,ij в исходной таблице целые. Следовательно, все слабые переменные х п+\ , ..., хп+гп должны быть также неот­ рицательными целыми числами.

Сначала задачу целочисленного программирования рассматри­ вают как задачу ЛП и решают ее с помощью прямого или двой­ ственного симплекс-метода. Используя двойственный симплексметод (см. § 2.5), в первую очередь получают переменную, которую исключают из базиса. Она определяется наибольшим по модулю

отрицательным элементом столбца сводных членов, поэтому не на­ до решать вспомогательную задачу ЛП. Чтобы определить пере­ менную, вводимую в базис, рассматривают отношение элементов строки для целевой функции и соответствующих отрицательных элементов разрешающей строки. Наименьшее по значению отно­ шение (в задаче максимизации) определяет переменную, вводи­ мую в базис. Операция замещения проводится методом Жордана. В конце алгоритма получаем а,о ^ 0, г = 1,2,..., п + т, и aoj^O , j = 1,2,..., п. Если Oio^O целые для всех г, то найдено опти­ мальное решение целочисленной задачи. В этом случае решение получается сразу, без использования ограничений целочисленности. Если элементы а*о ^ 0, но они не все целые, то к ограничениям (2.9) добавляют еще одно. Новое ограничение записывают внизу табли­ цы так, чтобы задача перестала быть прямо допустимой, т. е. а»о < 0 для г = п + т + 1. Затем используют двойственный симплекс-ме­ тод, чтобы получить все що ^ 0. Если що являются нецелыми, в таблицу добавляют новые ограничения до тех пор, пока все йго^О, i = 1,2, ... , п + т, станут целыми и по-прежнему неотри­ цательными.

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

Каждый раз после проведения итерации симплекс-метода про­ исходит изменение множества небазисных переменных. Изменяется и таблица.

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

Ш аг 1. Решить задачу целочисленного программирования как задачу линейного программирования с помощью прямого или двой­ ственного симплекс-метода. Если получено оптимальное решение

задачи линейного

программирования, то все що ^ 0, г = 1 , 2 , . . .

..., п + т, и aoj ^

0, j = 1,2, ... , п.

Ш а г 2. Если все сцо целые, то задача решена и решение по­ лучено без использования дополнительных ограничений. В против­ ном случае пусть од — первая нецелочисленная компонента в столб­ це оо. Тогда г-я строка называется производящей. Записать внизу таблицы коэффициенты уравнения, используя данные производя­

щей строки:

 

 

 

S = - fi o

- 2 fij( - X j),

(2.10)

 

з

 

 

где fio = Oio - [oi0], fio > 0, fa

= a*,- -

[o^-]; [a] — ближайшее к чис­

лу a целое.

 

 

 

Например, некоторая базисная переменная имеет нецелочислен­

ное значение, а уравнение для нее имеет вид

 

, 1

1

7

 

Х 2 + 2 Хз ~ 2 Х 4 = 2 ‘

Дополнительное ограничение (2.10) в данном случае будет иметь следующий вид:

/ 0 ) ® 2 + / ( у ) * 3 + / ( - у ) * 4 ^ / ( у )

ИЛИ

1

1

1

 

 

 

 

 

— хг + у

ха ^

у ,

т.е.

х3 + х 4 ^ 1 .

В симплекс-таблицу вносим х3 + х4 -

xs = 1, х 5 ^ 0 — свобод­

ная переменная. Для уравнения

 

 

 

 

 

1

 

 

1

 

4

 

 

2

Х \

Х2 “Ь

^ Х4

^

ограничение (2.10) имеет вид

 

 

 

 

 

/ ( у)®1

+ fO )X 2 + / ( у ) х4 ^ / ( у )

или

i

l

l

 

т.е.

x i + x 4 ^ l .

 

y x i + y x 4 ^ y ,

Переменную s называют слабой переменной Гоморщ а уравне­ ние (2.10) —отсечением Гомори. Выполнить одну итерацию (двой­ ственного) симплекс-метода, используя в качестве ведущей строки

отсечение Гомори (2.10). При этом таблица останется двойственно допустимой. Повторять шаг 2 до тех пор, пока все ÛÎO, г = 1,2,...

..., п + т, не станут целыми неотрицательными. Если що на неко­ тором шаге остаются отрицательными, следующий шаг (двойствен­ ного) симплекс-метода производится без введения отсечения Гомо­ ри. (Если элемент ооо становится отрицательным, нулевую строку не выбирают в качестве производящей. Если а<ю становится неце­ лым, следует выбрать нулевую строку в качестве производящей.)

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

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

Приведем пример, иллюстрирующий изложенный алгоритм. Пример. Рассмотрим задачу целочисленного программирова­

ния: максимизировать функцию

/(ж) = Лх\ + 5X2 + жз

при условиях

Зж] + 2жг < 10,

Ж1 + 4 Ж 2 ^ И ,

ЗЖ1+ ЗЖ2 + Жз ^ 13,

жь жг, жз ^ 0 (целые).

Вводя слабые переменные хц, xs, Хб, получаем значения, запи­ санные в табл. 2.18.

 

 

Исходные данные задачи

 

Таблица 2 .1 8

 

 

 

 

Переменные

1

- Х\

-Х2

-Хз

Х\

0

- 1

0

0

Х2

0

0

- 1

0

х 3

0

0

0

- 1

Х4

10

3

2

0

Х5

11

1

а

0

х 6

13

3

3

1

f i x )

0

- 4

- 5

- 1

Решая задачу линейного программирования (ведущий элемент отмечен), получаем новые значения, записанные в табл. 2.19-2.21.

 

Первая итерация

Таблица 2 .1 9

 

 

Переменные

1

 

-Х$

—ХЗ

Х\

0

- 1

0

0

х г

11/4

1 /4

1 /4

0

Хз

0

0

0

- 1

Х4

18/4

(TÔ73]

- 2 / 4

0

Х5

0

0

- 1

0

Хб

19/4

9 /4

- 3 / 4

1

f i x )

55/4

- 1 1 / 4

5 /4

- 1

Получено оптимальное решение задачи линейного программи­

рования:

 

 

 

 

и ч

194

18

23

 

 

 

Х| = 10’

Х2 = Ю'

 

Данное решение не целочисленное. Согласно шагу 2 дописыва­

ем в табл. 2.21

строку si

из коэффициентов уравнения отсечения

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

целочисленное решение (табл. 2.22).

Оптимальным целочисленным решением является

2, Х2 —2, Ж3 —1, fm a x ix ) —19.

Переменные

Х\

х2

х3

T4

Х5

Х6

f(x)

Переменные

Х\

х2

х3

Х4

Х5

Хб

S1

/(*)

 

 

 

 

 

Таблица 2.20

 

Вторая итерация

 

 

1

 

 

—ха

-Х5

-хъ

18/10

 

 

4/10

- 2/10

0

23/10

 

-

1/10

3/10

0

0

 

 

0

0

- 1

0

 

 

- 1

0

0

0

 

 

0

- 1

0

7/10

 

- 9 /1 0

- 3 /1 0

ш

187/10

 

11/10

- 7 /1 0

- 1

 

 

 

 

 

Таблица 2.21

Оптимальное решение задачи ЛП

 

 

 

 

Ведущий

 

 

 

 

 

I столбец

 

 

1

 

ха

-Х5

- х 6

 

18/10

 

4/10

- 2/10

0

 

23/10

-

1/10

3/10

0

 

7/10

- 9 /1 0

- 3 /1 0

1

 

0

 

- 1

0

0

Производящая

0

 

0

- 1

0

строка

0

 

0

0

- 1

 

- 7 /1 0

-

1/10

1 -7 /1 0

0

 

194/10

 

2/10

4/10

1

 

Выразив Х4, х$ и хв через исходные небазисные переменные х \, Х2 и хз, получим неравенство s i ^ 0 с целыми коэффициентами:

Si = — + 1 ^( 1 0 — Зж] - 2 х 2) + j ^ ( l l - X I - 4 х 2 ) ^ 0 ,

или Х\ + Зх2 ^ 8.

Чтобы получить матрицу, полностью целочисленную, продол­ жим введение отсечений и решение задачи, результаты этого запи­ шем в виде табл. 2.23, 2.24.

 

 

 

 

Таблица 2.22

 

Оптимальное целочисленное решение

 

Переменные

1

—Ж4

- 5 1

- Х б

Х\

2

3 /7

- 2 / 7

0

Х2

2

- 1 / 7

3 /7

0

хз

1

- 6 / 7

- 3 / 7

1

Х4

0

- 1

0

0

Х5

1

1/7

- 1 0 / 7

0

Хб

0

0

0

- 1

S\

0

0

- 1

0

/( * )

19

1/7

4 /7

1

Таблица 2.23

Введение отсечения з2

 

I

Ведущий

 

 

 

столбец

 

 

 

Переменные

1

—Х4

-51

—Хв

 

Х\

2

3 /7

- 2 / 7

0

 

х 2

2

- 1 / 7

3 /7

0

 

х 3

1 - 6 / 7

- 3 / 7

1

 

Х4

0

-1

0

0

Производящая

х 5

1

1/7

- 1 0 /7

0

строка

Хб

0

0

0

-1

 

Si

0

0

-1

0

 

S2

0

 

- 4 / 7

0

 

19

1/7

4 /7

1

 

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

3

где уij определеняются из следующих соотношений:

Таблица 2.24

Полностью целочисленная матрица

Переменные

1

- 5 2

- 5 1

- Х б

Х\

2

3

- 2

0

Х2

2

- 1

1

0

Х з

1

- 6

3

1

Х ^

0

- 7

4

0

х 5

1

1

- 2

0

•Гб

0

0

0

- 1

51

0

0

- 1

0

5 2

0

- 1

0

0

/( * )

19

1

0

1

1) для Xjy которые могут принимать целочисленные значения, имеем

ij

при

dij ^ 0,

Yij — i

 

 

1 - Ь/(ьг) ^

при

°*i < ° ’

2) для Xj, которые могут принимать только целочисленные зна­ чения, имеем

( /(<*у)

при

/(а у ) ^ f(bi),

Yu _ i l 3 7 ^ ( 1 - / K ) )

при

/ Ю > / № ) -

Напомним, что /(а у ) = ay —[ay]; здесь [ay] — ближайшее к ayцелое.

§ 2.9. Задача о назначениях (проблема выбора)

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

Обозначим через су, г, j = 1,2, ... ,п , производительность г-го механизма на j - й работе. Тогда данная задача, известная под на­ званием задачи о назначениях, будет заключаться в таком выборе

элементов из матрицы ||cÿ|| по одному из каждой строки и каждо­ го столбца, чтобы их сумма cij, + C2j2 + ... + Cnjn, jk Ф ji при кф1, была максимальной.

Обозначив через х ^ переменную, равную единице, если г-й ме­ ханизм выполняет j работу, и равную нулю, если он эту работу не выполняет, мы сведем данную задачу к следующей задаче ли­ нейного программирования.

Среди всех неотрицательных целочисленных решений систе­

мы 2п уравнений

 

 

 

 

 

 

 

Х п

+ X i 2

+ . . .

+ X in

=

1,

г =

1,2, . .. ,n ,

Х \ j

“Ь X 2 j

“1“

“b X fij

 

1,

j

1,2, ... , 71,

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

71 71

/о*о= 2 2

г=1 j —1

описывающую суммарную производительность всех механизмов. Эту задачу решают с помощью сетевых методов, менее громозд­ ких, чем симплекс-метод (см. гл. 3).

Пример. Имеются три механизма А\, А2 , A3 , каждый из ко­ торых может быть использован на каждом из трех видов рабо­ ты В\, В2 , В3 с производительностью (в условных единицах), заданной следующей таблицей:

Узел

в,

в2

В}

A i

1

2

3

а 2

2

4

1

А з

3

1

5

Требуется так распределить механизмы по одному на каждом виде работы, чтобы суммарная производительность всех механиз­ мов была максимальной.

Обозначим, как рекомендовалось выше, через Xÿ переменную, равную единице, если механизм А{ назначен на работу B j, и рав­ ную нулю, если механизм Ai не назначен на работу Bj. Тогда сум­ марная производительность механизмов описывается функцией

/ ( х ) = Х\\ + 2х \2 + 3X13 + 2X21 + 4X22 + £23 + З х з 1 + Х32 + 5хзз

при условиях-ограничениях

Хп +Х12 +Х13 = 1, Я21 +Х22 +Х23 = 1,

£ 3 1 + а ^ 3 2 + S 3 3 = 1,

Х п + Х 2 1 + Х 3 1 = 1 ,

Х12 +Х22 +^32 = 1, Х13 + Х23 + Хзз = 1.

Необходимо найти максимум функции / ( х ) при этих ограниче­ ниях.

Запишем условия задачи в виде табл. 2.25, в которой проведем выделение базисных переменных.

Таблица 2.25

Исходная таблица

Пере­

—Х\\

Х\2

—Х\Ъ —Х2\ —Хп

—Х23

-Я31

—Х32

—хзз

1

менные

 

 

 

 

 

 

 

 

 

 

0

ш

1

1

0

0

0

0

0

0

1

0

0

0

0

1

1

1

0

0

0

1

0

0

0

0

0

0

0

1

1

1

1

0

1

0

0

1

0

0

1

0

0

1

0

0

1

0

0

1

0

0

1

0

1

0

0

0

1

0

0

1

0

0

1

1

fix)

-1

- 2

- 3

- 2

- 4

-1

- 3

-1

- 5

0

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

не получено.

Используя метод исключения Жордана (разрешающий элемент —1 отмечен), получим значения, записанные в табл. 2.27.

Соседние файлы в папке книги