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

advertisement
Краснер Н.Я., Пастухов А.И., Щепина И.Н.
АЛГОРИТМ РЕШЕНИЯ ЗАДАЧИ ЦЕЛОЧИСЛЕННОГО ЛИНЕЙНОГО
ПРОГРАММИРОВАНИЯ
( Воронеж )
Наша статья является попыткой описать последнюю версию алгоритма
решения задачи целочисленного линейного программирования (ЗЦЛП),
продиктованную Наумом Яковлевичем Краснером за несколько дней до своей
смерти.
Наряду с поиском методов решения множества научных и научнопрактических проблем, интересовавших Н.Я. Краснера, последние 30 лет его
постоянно занимала проблема построения эффективного алгоритма решения
ЗЦЛП.
Важность таких задач для экономики совершенно ясна, т.к. достаточно
часто решение задачи должно быть целочисленным или же вычисленным с
точностью до десятых, сотых и т.п. (что тоже равносильно целочисленности).
Трудности решения таких задач хорошо известны [ 2,3,5 ]. К настоящему
времени существует достаточно много алгоритмов решения ЗЦЛП. Все методы
можно условно разбить на три
основные группы: методы отсечения,
комбинаторные методы и приближенные методы.
Методы отсечений при всей своей теоретической обоснованности
(наиболее известный из них метод Гомори) зачастую плохо реализуемы даже на
современных компьютерах. Это связано с чрезвычайно малыми отсечениями и
накоплением ошибок вычислений. Кроме того, как отмечалось в [ 4 ] , можно
утверждать, что количество опубликованных по этим методам работ
существенно превосходит число решенных этими методами задач. Основным
недостатком методов отсечений является то,
что они используют
нецелочисленную идеологию для решения целочисленых задач.
Комбинаторные методы основаны на целочисленной (дискретной)
идеологии и реализуются в виде различных схем направленного перебора.
Недостатком большинства из них является отсутствие условий остановки, что
может привести к большому и даже к полному перебору. При этом
комбинаторные методы достаточно хороши для получения приближенных
решений.
Еще в конце 70-х годов Н.Я. Краснером был предложен метод
эффективных точек решения ЗЦЛП. В течение 20 лет этот алгоритм постоянно
совершенствовался и модифицировался. По каждому из вариантов алгоритма
были просчитаны сотни примеров вручную, разработаны программы для
реализации алгоритма на ЭВМ (Белобродская Л.И., Зимовец И.Н., Осинцев
А.А., Винников Б.Г. и др.). Правильность работы программ и алгоритма была
проверена на большом числе тестовых примеров. Но каждый раз, когда
выяснялось, что предложенный вариант алгоритма плохо решает определенный
тип задач или "зацикливается" на некоторых специфических примерах,
алгоритм усовершенствовался,
и продолжалось новое исследование
возможностей алгоритма и тестирование программ на различных примерах.
Результаты этой работы и некоторые варианты алгоритмов были опубликованы
в [ 1,4 ], доложены на ряде конференций и семинаров и одобрены
специалистами.
Теоретически все этапы алгоритма являются обоснованными, но в течение
всего периода развития алгоритма и по сегодняшний день сохраняется
проблема доказательства оптимальности решения при выполнении критерия
останова алгоритма, хотя на всех примерах, где это можно проверить другими
способами, оптимальность решения подтверждается. Неразрешенность данной
проблемы на данном этапе заставляет нас пока отнести представленный
алгоритм к разряду эвристических. Тем не менее накоплен достаточно
обширный опыт использования данного алгоритма, как в учебном процессе, так
и в реальных практических приложениях, что позволяет говорить об
адекватности алгоритма и оптимальности полученных результатов.
Предлагаемый алгоритм исходит из следующего ключевого тезиса: ЗЦЛП
должна рассматриваться именно как целочисленная задача. Но при этом, не
являясь по сути комбинаторным, данный алгоритм позволяет получать целое
решение ЗЛЦП, исключая риск полного перебора. Достоинством алгоритма
является также отсутствие ошибок округления, так как операции производятся
исключительно с целыми величинами. Кроме того, отсутствует требование
рациональности величин aij и bi (за исключением случая ограничений равенств), что дает возможность рассчитывать на построение целочисленного
алгоритма для решения нелинейных выпуклых задач.
Алгоритм, который будет представлен ниже, значительно упростился по
сравнению с предыдущими вариантами [ 1,4 ] и, по утверждению Краснера
Н.Я., подходит фактически для любой структуры матрицы А и вектора с и для
любой размерности задач. Несмотря на непривычное описание алгоритма (в
работе приводится только основная схема алгоритма) в силу невыработанности
языка для такого рода описаний, алгоритм чрезвычайно прост и удобен для
решения задач.
Алгоритм Краснера решения ЗЦЛП
Пусть I(a) – целая часть числа a, а m и n-натуральные числа. Символом N
обозначим множество первых n чисел натурального ряда, а символом M
множество первых m чисел натурального ряда соответственно. Рассмотрим
следующую задачу целочисленного линейного программирования:
I( x )  ( I( x j )) : j  N , максимизи-
Найти целочисленный вектор
рующий целевую функцию
c jx j ,
(1)
 a ij x j  bi , i  M ,
(2)
j  xj  j,jN,
(3)
jN
при условиях:
jN
где aij, bi, cj – рациональные числа, а
 j ,  j(  j   j ) - целые числа.
Символом  обозначим некоторое достаточно большое число. Если переменная
xj не ограничена снизу или сверху, то соответственно  j   ,  j   .
Сделаем несколько важных замечаний:
1. Если заданная целевая функция минимизируется, то она к виду (1)
умножением на –1 (в решении производится обратное преобразование).
2. Если cj<0, то производится замена xj на -xj, что означает для данных j
замену aij на –aij,  j на   j ,  j на   j и cj на –cj.
3. Если в исходной задаче существуют такие номера i, образующие
множество M1, что  aij x j  bi ,i  M1 , то они приводятся к виду (2)
jN
записью
двух
следующих
( aij ) x j  bi ,i  M1 и
неравенств
 aij x j  bi ,i  M1
и
jN
тогда
в
(2)
рассматривается
jN
M  M1  M1 .
Основные
преобразования.
Пусть
x k  ( x kj ) - некоторая точка,
полученная на k-том шаге алгоритма. Тогда, перенеся начало координат в точку
xk и обозначив
x kj 1  x kj  y kj ,
получаем преобразованную задачу:
(4)
Найти вектор y
k
 ( y kj ), максимизирующий
 c j y kj
(5)
jN
при условиях:
 aij y kj
 b kj ,i  M ,
(6)
 kj  y kj   kj , j  N ,
(7)
bik  bik 1 
(8)
jN
где
 aij x kj ,
jN
 kj   kj 1  x kj ,
(9)
 kj   kj 1 x kj ,
(10)
ck 
 c kj 1x kj
.
(11)
jN
Расчетные характеристики.
Определим следующие параметры:
 ijk
bik

, для случая aij  0 ;
aij
(12)
 ijk
bik

, для случая aij<0
aij
(13)
 k   bik .
i M
(14)
Классификация индексов. Введем
множества:
в
рассмотрение
следующие
N1  { j  N :  k  0 , ijk  0 , ijk  0} . Положим  kj  min(  kj , kj ) , где
 kj  min  ijk ,
N 2  { j  N :  ijk  0 , ijk  0} .
 kj  min  ijk ;
i
i
Положим
 kj  max(  kj , kj ) , где  kj  max  ijk ,  kj  max  ijk ;
i
i
N 3  { j  N :  ijk  0 , ijk  0 , k  0} .
Положим
 kj   kj ,
если
 kj   kj , и  kj   kj , если  kj   kj , где  kj  max  ijk ,  kj  min  ijk .
i
N 4  { j  N :  ijk  0 , ijk  0 , k  0} .
i
 kj   kj ,
Положим
где
 kj  max  ijk .
i
N 5  { j  N :  ijk  0 , ijk  0} . Положим  kj   kj , где  kj  min  ijk .
i
Описанные выше множества позволяют определить координату, по
которой необходимо осуществлять движение. На каждом шаге алгоритма
множества перебираются, начиная с первого, строго в указанном порядке до тех
пор, пока не обнаружим непустое множество, из которого и выберем
координату для движения по ней.
k
Выбор шага. Шаг y l определяется по следующим правилам.
Рассмотрим величину
z lk

I( 1   lk
clk
k
cmax
z lk
 max(
I(  lk
clk
k
cmax
),1) , если l  N1 , N 3 , N 5 и
), если l  N 2 , N 4 .
k
Замечание: скорость движения пропорциональна c j . Если
z lk не
k
единственно, то выбирается такой индекс l, для которого величина  l
принимает наибольшее значение.
Определим
y lk  min( z lk ,  lk )
для
случая
z lk  0 ,
и
y lk  max( z lk , lk ) , для случая z lk  0 . Если y lk  0 , то переходим к
следующему индексу того же множества, если все индексы текущего
множества исчерпаны, то переходим к следующему множеству индексов.
Исполнение алгоритма и критерий останова. При каждом шаге
k
k 1
величина c сравнивается с предыдущим значением c
и запоминается
k
0
1
k
максимальное значение целевой функции cmax  max( c ,c ,..., c ) и
соответствующие ей характеристики. Если на k-ом шаге получено, что
k
c k  cmax
, то запоминаем данную ситуацию и делаем контрольные шаги
алгоритма.
Продолжаем алгоритм либо до того момента пока он не вернется к той же
точке (цикл), либо до получения точки с большим значением целевой функции.
Если мы вернулись к той же точке, то ищутся те координаты, по которым
ни разу не было движения, и выполняется движение по ним, начиная со
k
значения cmax . Если вновь произошел возврат в прежнюю точку и все
множества пусты, то найденная точка – решение задачи.
Если "зацикливания" не происходило, то дополнительных ходов больше
нет и все индексные множества пусты, то найденная точка также является
решением задачи.
Случай несовместности. Если в процессе исполнения алгоритма
k
k
произошел возврат к прежнему значению cmax , но все bi  0 (то есть мы ни
разу не вошли в допустимое множество), то задача несовместна.
Неограниченность. Если обе последовательности c и  возрастают, то в
этом случае возможна неограниченность исходной задачи. Возможны два
следующих случая:
1. Если для выбранного направления на данном шаге  l неограничено, то это
означает, что y l - неограничено.
k
2. Если для данного шага величина  l
ограничена, а на предыдущем шаге
 lk 1 - неограничено, тогда нам необходимо составить линейную комбинацию
по двум направлениям, и если c и  для полученной линейной комбинации
возрастают по сравнению с предыдущими значениями c и  , то в этом случае
задача также считается неограниченной.
Примечание 1. Алгоритм допускает движение по точкам,
принадлежащим допустимому множеству, так и не принадлежащих ему.
как
k 1
k
Примечание 2. Если y j  0 , то при y j
 0 (если y kj  0 , то при
y kj 1  0 ) запрещается движение по той же координате.
__________
Авторы отдают свой долг памяти Науму Яковлевичу Краснеру –
Учителю и Отцу.
ЛИТЕРАТУРА
1. В.В.Гусев, Н.Я.Краснер, В.С.Литенгартен и др.. Система моделей и методов рационального планирования и организации учебного процесса в ВУЗе. –
Воронеж: Изд-во ВГУ, 1987.
2 .Корбут А.А., Финкельштейн Ю.Д. Дискретное программирование. - М.,
1969.
3. Иванчев И.Д., Митев И.Т., Иевлев Н.И. Реализация метода ветвей и границ для решения задач частично–целочисленного программирования. // ТВМ и
МФ, 1996, N 3.
4. Сборник трудов ВНИИСИ "Модели и методы оптимизации" – М., 1980,
N 3.
5. Берзин Е.А. Оптимальное распределение ресурсов и элементы синтеза
систем. – М. 1974.
Download