ПРИЛОЖЕНИЕ
Сентябрь 2013
Секция 6
ВЫЧИСЛИТЕЛЬНЫЕ МЕТОДЫ В ДИСКРЕТНОЙ МАТЕМАТИКЕ
УДК 519.688
О ВОЗМОЖНОСТИ СОКРАЩЕНИЯ ПЕРЕБОРА В АЛГОРИТМЕ БАЛАША
Н. В. Анашкина
Предлагается оптимизация алгоритма Балаша на основании исследования особенностей геометрического строения окрестностей тупиковых точек.
Ключевые слова: алгоритм Балаша, невязка, тупиковая точка.
Широкий класс задач дискретной математики сводится к анализу и решению систем нелинейных уравнений. Известны методы сведения этих систем [1, 2] к системам линейных ограничений вида
где , Ъг — целые числа; хг € {0,1}, г = 1,... ,т, ] = 1,... ,п.
Для нахождения решения (1) можно использовать как методы, работающие в действительной области, так и методы, позволяющие искать целочисленное решение [2-4]. Одним из таких алгоритмов является алгоритм Балаша, который предназначен для решения задач целочисленного программирования с булевыми переменными [1, 3, 5].
Для изложения алгоритма определим невязку системы (1) формулой
где х = (х1,...,хп); р(х, Ьг) —расстояние от вершины п-мерного куба х до плоскости Ьг, задаваемой г-м уравнением системы. Невязка ^(х) характеризует близость точки х к невыполнившимся неравенствам.
С геометрической точки зрения неравенства системы (1) задают разделяющие плоскости в п-мерном пространстве и введённая невязка представляет собой сумму расстояний от вершины х до отсекающих её плоскостей.
Алгоритм Балаша является локальным детерминированным траекторным алгоритмом. В качестве начального приближения хо берётся вектор (0,... , 0). В процессе поиска решения опробуются ближайшие к текущему векторы, на них вычисляется значение невязки системы, и следующим текущим становится вектор, на котором значение невязки минимально. Процесс продолжается до тех пор, пока не получим решение (нулевую невязку) или не попадём в тупиковую точку. Тупиковая точка характеризуется тем, что опробование всех векторов, отличающихся от полученного на
(1)
Мх) = Е p(x,Li),
предыдущем шаге одной ненулевой координатой, не приводит к уменьшению невязки. Существует несколько стратегий выхода из тупиковых точек, каждая из которых в конечном итоге приводит к увеличению числа опробуемых векторов и в худшем случае — к тотальному перебору.
Для некоторых классов систем вычислительная сложность работы алгоритма линейна [2, 3, 6]. При решении произвольной системы неравенств не всегда удаётся избежать попадания в тупиковую точку, в этом случае число итераций алгоритма зависит от количества встретившихся тупиковых точек. Естественно, что оптимизирующие модификации алгоритма должны тем или иным способом вести к уменьшению их количества. Одним из вариантов возможных модификаций является изменение критерия выбора приоритетного направления перемещения по вершинам п-мерного куба на основании учёта геометрических особенностей расположения плоскостей в окрестностях тупиковых точек.
Анализ причин попадания в тупиковые точки в процессе поиска решения с помощью алгоритма Балаша позволяет выявить в процессе работы алгоритма направления, продвижения в сторону которых приведёт к попаданию в тупиковую точку. Предположим, что на г-м шаге алгоритма при текущем векторе хг минимальная невязка достигается на векторе х, получаемом изменением ]-й координаты хг, и при этом вектор х не является решением. Далее опробуются смежные с х векторы у1, . . . , у к, полученные заменой одной из его нулевых координат на 1. Рассмотрим следующие случаи расположения некоторой плоскости и вершин х, у1,... , у к:
1) плоскость отсекает вершину х и у1,... , у к;
2) плоскость отсекает у1,..., у к.
Переход в вершину х при выполнении одного из условий обязательно приведёт в тупиковую ситуацию. Поэтому вершина х не может стать текущей, даже если невязка для неё минимальна при опробовании на предыдущем шаге всех непройденных и смежных с вершиной хг вершин. Из изложенного можно сделать вывод о том, что ]-я координата вектора-решения равна нулю. Такой подход позволяет расставлять не только единицы, но и нули, строя приближение к вектору решений.
С алгоритмической точки зрения попадания в тупиковую ситуацию в ряде случаев можно избежать, анализируя состояние системы в момент перехода в следующую вершину. При этом достаточно ввести для опробуемых и текущей вершин векторы-индикаторы выполнившихся неравенств. С их помощью легко выявить возникновение в ходе работы алгоритма случаев 1 и 2. Модификация алгоритма требует дополнительной емкостной сложности О(т) и вычислительной сложности О(п).
Проиллюстрируем работу модифицированного алгоритма на примере решения следующей системы линейных ограничений:
х1 + х2 + 2х3 + 5х5 — 6х6 + х7 ^ -5,
— 3х1 — х2 — 2х3 — — 2х5 — Жб — х7 ^ —3,
х1 + 2ж2 + 3ж3 — 7ж4 + 5ж5 + 2жб + ж7 ^ —3,
< —Ж1 — 3x2 + 4жз + 2Ж4 + 6Ж5 + 5x6 + 8x7 ^ 4, (2)
Ж11 + Ж2 + 4хз — 3x4 + 2x5 + 5хб + 6x7 ^ 3,
—Xl + 7x2 + xз + 8x4 + 2x5 + 3x6 + 8x7 ^ 12, x2 — ж3 + x4 — 2ж5 + xб — 4x7 ^ 0.
Традиционный алгоритм Балаша стартует из вершины ж0 = (0, 0, 0, 0, 0, 0, 0), в которой невязка системы ^^о) = 19. Опробование одной проставленной единицы даёт минимальное значение невязки, равное 8, на векторе ж1 = (0,0, 0, 0, 0,0,1).
Из этого вектора, в свою очередь, последовательно переходим в ж2 = (0,1, 0,0, 0, 0,1) с ^(ж2) = 3, ж3 = (0,1, 0, 0, 0,1,1) с ^(ж3) = 2, ж4 = (0,1,0,1,0, 0,1) с ^(ж4) = 2 и попадаем в тупиковую точку. Эта ветвь алгоритма потребовала проведения 25 вычислений невязок и так и не привела к успеху.
Предложенный модифицированный алгоритм уже на первом шаге устанавливает запрет на проставление единицы в первой и седьмой координатах вектора и присваивает шестой координате значение 1: ж1 = 0, ж7 = 0 и жб = 1. Отметим, что срабатывают первый и второй случаи стратегии запрета перехода в следующую вершину и блокируются возможности расстановки единиц соответственно по переменным ж7 и ж1, при этом ^(0, 0, 0, 0,0, 0,1) = 8 и является минимальной из всех посчитанных на первом шаге. В результате ж1 = (0, 0,0, 0, 0,1, 0). На втором шаге запрещается присваивание единицы переменным ж3 и ж5, переменной ж2 даётся значение 1 и получается вектор ж2 = (0,1, 0, 0, 0,1, 0). Присваивание единицы четвёртой координате приводит к нахождению решения ж3 = (0,1,0,1, 0,1,0). При этом модифицированная версия алгоритма потребовала вычисления невязки всего 11 раз.
Экспериментальные исследования, которые проводились на случайных системах неравенств, показали, что эффективность применения как базового алгоритма Ба-лаша, так и его модификации зависит от структуры системы неравенств. Основным достоинством предложенной модификации алгоритма Балаша является исключение попадания в целые классы тупиковых точек.
ЛИТЕРАТУРА
1. Балакин Г. В., Никонов В. Г. Методы сведения булевых уравнений к системам пороговых соотношений // Обозрение прикладной и промышленной математики. 1994. Т. 1. Вып.3. С.389-401.
2. Рыбников К. К., Никонов Н. В. Прикладные задачи, сводящиеся к анализу и решению систем линейных неравенств. Метод разделяющих плоскостей // Вестник Московского государственного университета леса —Лесной вестник. 2002. №2(22). С.191-195.
3. Анашкина Н. В. Использование алгоритма Балаша для нахождения решения системы линейных ограничений специального вида // Вестник Московского государственного университета леса —Лесной вестник. 2004. №4(35). С. 176-179.
4. Кофман А, Анри-Лабордер А. Методы и модели исследования операций. М.: Мир, 1977. 432 с.
5. Анашкина Н. В. Обзор методов решения систем линейных неравенств // Вестник Московского государственного университета леса —Лесной вестник. 2004. №1(32). С. 144-148.
6. Гришухин В. П. Среднее число итераций в алгоритме Балаша // Сб. статей. Численные методы в линейном программировании. М.: Наука, 1973. С. 31-38.
УДК 519.688
СРАВНИТЕЛЬНЫЙ АНАЛИЗ НЕКОТОРЫХ АЛГОРИТМОВ РАСПОЗНАВАНИЯ ГЛАДКИХ ЧИСЕЛ
Д. С. Арбузов, Л. И. Туктарова
Приводятся результаты экспериментальных исследований трёх алгоритмов нахождения чисел, разложимых в заданной факторной базе: просеивания (с делением и логарифмического) и Бернштейна.
Ключевые слова: гладкие числа, просеивание, алгоритм Бернштейна.