Участник:Tolstikhin/Песочница
Материал из MachineLearning.
Содержание |
Введение
В этой статье будeт рассматриваться задача поиска совместной подсистемы максимальной мощности для систем линейных уравнений и неравенств (MaxFS problem). На основе таких понятий как узловая подсистема и узловое решение будет получен один из возможных алгоритмов, решающих задачу. В статье также представлена эвристика, в некоторых случаях позволяющая заметно ускорить решение задачи.
Постановка задачи
Пусть дана произвольная система линейных неравенств
равенств
или в более общем случае - смешанная система, содержащая как равенства, так и неравенства. m и n - число строк и число столбцов матрицы системы соответственно.
Задача MaxFs состоит в нахождении совместной подсистемы данной системы, имеющей максимальную мощность.
Данная задача часто возникает при решении различных математических задач - в том числе при решении
задач прогнозирования и распознавания.
Примером может служить разделение объектов 2х классов обучающей выборки
гиперплоскостью.
В случае, когда эту задачу не удаётся решить точно, мы хотим провести
гиперплоскость так, чтобы она допускала минимальное число ошибок.
Сложность задачи
В книге ([5]) доказывается, что задача выделения максимальной совместной подсистемы является NP-сложной.
Посчитаем приблизительно сложность простого перебора.
Всего подсистем. Каждую подсистему надо проверить на совместность. Например, методы, упомянутые в [3], требуют для определения совместности подсистемы состоящей из неравенств и имеющей ранг , операций.
Существует другой подход к получению точного решения.
Произвольный булев вектор однозначно определяет подсистему системы 1. -е неравенство входит в подсистему тогда и только тогда, когда .
Введём булеву функцию на -мерном булевом кубе, принимающую единицу на тех и только тех наборах , которые соответствуют несовместным системам . Очевидно, что такая булева функция монотонна. Исходная задача сводится к поиску максимального верхнего нуля монотонной функции . В книге [6] приведён алгоритм, решающий эту задачу. В худшем случае он делает шагов, где шаг - вычисление одного значения функции g.
Этот подход немного ускоряет решение задачи, но по-прежнему работает слишком медленно.
В [1] предлагается более эффективный метод решения исходной задачи.
Вспомагательные определения и утверждения
По-прежнему будем рассматривать систему 1. Допустим, что она совместна и имеет ранг .
Определение 1. Решение системы 1 - узловое, если оно обращает в равенства какие-нибудь её неравенств с линейно независимыми левыми частями.
Определение 2. Подсистема системы 1 - крайняя, если, во-первых, её ранг больше нуля и равен числу неравенств в ней, во-вторых, хотя бы одно её узловое решение удовлетворяет системе 1.
Определение 3. Крайняя подсистема - узловая подсистема, если все её узловые решения удовлетворяют системе 1.
Свойство 1. Крайняя подсистема тогда и только тогда является узловой подсистемой системы 1, когда её ранг совпадает с рангом системы 1.
Теорема 1. Каждая совместная система линейных неравенств вида 1 отличного от нуля ранга имеет хотя бы одну узловую подсистему, а значит, хотя бы одно узловое решение.
С помощью этих утверждений в [1] доказывается основная лемма, на которой держится следующий алгоритм.
Лемма. Ранг максимальной совместной подсистемы (МСП) совпадает с рангом всей системы.
Точное решение задачи
Изложение алгоритма
Алгоритм будет выглядеть следующим образом. Будем перебирать одну за другой подсистемы мощности и ранга для данной несовместной системы 1 ранга . Среди них обязательно найдутся все узловые подсистемы для искомой МСП, так как по лемме ранг МСП равен . Из определения следует, что все узловые решения любой узловой подсистемы МСП удовлетворяют всей МСП. Это означает, что достаточно найти хотя бы одно узловое решение любой узловой подсистемы МСП и подставить его в систему 1, чтобы выделить саму МСП.
Таким образом мы заменяем все неравенства в найденной подсистеме на равенства и находим решение полученной системы уравнений (в случае бесконечного числа решений - достаточно найти одно). Затем мы подставляем полученное решение в исходную систему 1 и выделяем те неравенства, которым удовлетворяет полученное решение. Эти неравенства образуют некую совместную подсистему системы 1. В какой-то момент мы найдём одну из узловых подсистем МСП и выделим МСП.
Трудность заключается в том, что мы не знаем какая из подсистем является узловой для МСП. Поэтому приходится перебирать все подсистемы мощности и ранга и находить одно их узловое решение. Затем выделять по узловому решению подсистему, соответствующую ему. Сравнивая мощности всех систем, полученных таким путём, мы найдём МСП. Также мы найдём одно его решение.
Из сказанного следует, что в случае системы равенств, заменив каждое из равенств
на два неравенства
мы сведём задачу к исходной. (Следует из определения узловой подсистемы и узлового решения).
Сложность алгоритма
Общее число операций приведённого алгоритма оценивается сверху выражением:
- ,
где - некоторые действительные числа.
Краткое обоснование полученной оценки. Предположим, что . Вычисление ранга матрицы исходной системы 1 требует операций (приведение к треугольному виду). Число подсистем мощности в системе 1 - . Для найденной подсистемы ранга нахождение одного узлового решения занимает операций (обратный ход метода Гаусса). Подстановка найденного решения во все неравенства системы 1 - операций.
Эта оценка уже гораздо лучше оценки для полного перебора. К сожалению алгоритм всё ещё остаётся неподъёмным на практике при больших значениях и .
Приближённое решение задачи
Точное решение задачи выделения максимальной совместной подсистемы - NP-полная задача.
Однако, если отказаться от нахождения точной МСП и ограничиться нахождением приближённой МСП, задачу можно решить за полиномиальное время. Основная идея - перебирать не всевозможные подсистемы, а только часть из них, опираясь на те или иные эвристики.
Дело в том, что для нахождения точного решения нам достаточно наткнуться хотя бы на одну узловую подсистему МСП. При малом числе переменных и большом числе неравенств в системе 1 можно рассчитывать на то, что МСП имеет большое число узловых подсистем. А значит мы с большой вероятностью наткнёмся на одну из них. В противном случае нам не попадётся ни одна из узловых подсистем МСП и мы получим неточное решение.
В качестве простейшего примера предлагается совершать лексикографический обход всех подсистем мощностью и ранга с шагом , произвольным образом занумеровав неравенства, входящие в систему. Варьируя параметр мы можем для конкретной задачи подобрать устраивающее нас время. Для большей надёжности алгоритма параметр надо брать как можно меньшим.
Численный эксперимент
В рамках изучения задачи был написан код, реализующий упомянутый выше алгоритм.
Для нахождения ранга и решения системы линейных уравнений в нём используется метод Гаусса с выбором главного элемента (в противном случае возможно быстрое накопление численной ошибки).
В качестве входных параметров программа принимает матрицу системы, правую часть системы и шаг перебора.
На выходе программа даёт вектор с длиной равной числу неравенств в системе, содержащий номера неравенств, вошедших в МСП. Остаток заполнен нулями. Нумерация неравенств в ответе совпадает с нумерацией при вводе матрицы системы.
В качестве эксперимента была найдена МСП системы следующих линейных неравенств:
с шагом перебора равным 1.
В качестве МСП программа выделила неравенства 1,2,3,6,7 и 8, что является правильным ответом. Затем была сделана повторная попытка, на этот раз с шагом, равным 5. Таким образом, программа перебирала 9 различных подсистем вместо 28. В результате она нашла ту же самую МСП.
Возможные эвристики
Кратко опишем идею одной из возможных эвристик, позволяющих сильно сократить перебор подсистем [4].
Сделаем каждую из гиперплоскостей, описанных неравинствами, "подвижной", вводя неотрицательные эластичные переменные (elastix variables) в каждое из неравенств. Теперь будем "шевелить" гиперплоскости, пока система не станет совместной. Сведём задачу к задаче линейного программирования, минимизируя сумму эластичных переменных и иксов с заранее подобранными коэффициентами. Такой подход также называется эластичным программирвоанием(elastic programming).
Предложенная процедура отчасти схожа с методом SVM в случае линейно неразделимой выборки.
Решив эту оптимизационную задачу, мы получим некие значения эластичных переменных. В случае совместности системы неравенств мы получим нулевые значения эластичных переменных. В противном случае большие значения переменных соответствуют "худшим" неравенствам, в том смысле что гиперплоскости, соответствующие этим неравенствам, пришлось "двигать" больше всего для достижения совместности системы. Логично предположить, что эти неравенства не будут входить в МСП.
Таким образом мы можем перебирать те подсистемы мощности и ранга , которым соответствуют меньшие суммы эластичных переменных.
Заключение
Нахождение МСП для системы неравенств - NP-сложная задача. В случае поиска точного решения так или иначе приходится иметь дело с полным перебором, а как следствие - с огромными затратами времени.
При отказе от точного решения программист получает возножность значительно ускорить вычисления. При этом, если ему удалось предложить хорошие эвристики, то с большой вероятностью он найдёт МСП системы.
Список литературы
1. Катериночкина Н.Н. Методы выделения максимальной совместной подсистемы системы линейных неравенств. Сообщение по прикладной математике. Москва: Вычислительный центр РАН, 1997.
2. J.W. Chinneck. Fast Heuristics for the Maximum Feasible Subsystem Problem. INFORMS Journal on Computing, vol. 13, no. 3, pp. 210-223, 2001
3. Черников С.Н. Линейные неравенства. М.: Наука, 1968.
4. J.W. Chinneck. An effective polynomial-time heuristic for the minimum-cordinality IIS set-covering problem. Annals of Mathematics and Artificial Intelligence, 17, 127-144, 1996.
5. J.K. Sankaran. A note on resolving infeasibility in linear programs by constraint relaxation. Operations Research Letters, 13, 19-20, 1993.
6. Катериночкина Н.Н. Поиск максимального верхнего нуля монотонной функции алгебры логики. Докл. АН СССР. Т. 224. №3. С. 557-560, 1975.