Изменения
Нет описания правки
Целью [[Теория_сложности|теории сложности]] является определение вычислительной трудности алгоритмов. Классическая теория сложности предполагает, что алгоритму полностью известна структура решаемой задачи. В случае [[Эволюционные_алгоритмы|эволюционных алгоритмов]], алгоритм обладает информацией только о качестве (значении ''fitness''-функции) получаемого им решения, по этой причине утверждения классической теории сложности здесь мало применимы.
'''Black-box Complexity'''<ref name="bbox">[http://dl.acm.org/citation.cfm?doid=2001576.2001851 Doerr B., Kötzing T., Winzen C. Too fast unbiased black-box algorithms]</ref> — попытка построить теорию сложности для эволюционных алгоритмов. Вкратце, ''black-box'' сложность алгоритма — количество вычислений ''fitness''-функции, необходимое для получения решения. Такое определение позволяет получить не реалистично низкие оценки ''black-box'' сложности, например, полиномиальную сложность для [[Примеры_NP-полных_языков._Теорема_Кука|<tex>\mathrm{NP}</tex>-полной]] задачи поиска максимальной клики <ref>[http://en.wikipedia.org/wiki/Clique_problem Clique problem]</ref>.
По этой причине были введены ограничения на исследуемые алгоритмы. Требуется, чтобы для получения новых кандидатов на решение использовались только '''несмещенные''' (позиция элемента в битовой строке и его значение не влияют на выбор битов для изменения) '''вариативные операторы'''. Также было введено понятие '''арности''' — <tex>k</tex>-арный несмещенный ''black-box'' алгоритм использует только те операторы, которые принимают не более чем <tex>k</tex> аргументов. Для некоторых классов задач такой подход к опеределению ''black-box'' сложности позволяет получить более реалистичные оценки вычислительной трудности. Операторы с арностью <tex>1</tex> называют '''мутационными'''. В настоящей статье показано, что даже для алгоритмов, использующих только мутационные операторы, можно получить не реалистично маленькую оценку ''black-box'' сложности.
=== Неограниченная Black-box модель ===
Рассматривается класс алгоритмов оптимизации, которые получают информацию о решаемой задаче через вычисление ''fitness''-функции возможных решений. Заданная ''fitness''-функция вычисляется ''ораклом'', или дается как ''black-box''. Алгоритм может запросить у ''оракла'' значение функции для любого решения, однако более больше никакой информации о решении получить не может.
В качестве ''fitness''-функции берется псевдо-булевая функция <tex>F:\{0,1\}^n \rightarrow \mathbb{R}</tex>.
{{Лемма
|id=remark2
|statement=Предположим, что Пусть для задачи <tex>P</tex> существует ''black-box'' алгоритм <tex>A</tex>, который с константной вероятностью успеха решает <tex>P</tex> за <tex>s</tex> итераций. Тогда ''black-box'' сложность <tex>P</tex> не больше <tex>O(s)</tex>.
|proof=Доказательство приведено в работе <ref name="bbox"/>.
}}
}}
{{Лемма
|id=lemma3
|statement=<tex>\forall k,c</tex> существует унарная несмещенная процедура функция <tex>s</tex>, использующая <tex>c+1</tex> запросов к <tex>Jump_k</tex> такая, что для всех битовых строк <tex>x</tex>, <tex>s(x) = OneMax(x)</tex> с вероятностью <tex>1 - O(n^{-c})</tex>.|proof=Используется унарный несмещенный вариативный оператор <tex>flip_k</tex>, который равновероятно выбирает строку из <tex>k</tex>-окрестности для аргумента (битовую строку, которая отличается в <tex>k</tex> позициях). Затем будет использована процедура Ниже предлагается функция <tex>s</tex>, которая использует <tex>Jump_k</tex> для аппроксимации <tex>OneMax</tex> как показано ниже. Процедура выбирает <tex>c</tex> битовых строк в <tex>k</tex>-окрестности <tex>x</tex>. Если <tex>|x|_1 \geq n-k</tex>, то правдоподобноесть вероятность того, что хотя бы раз только единицы из в <tex>x</tex> будут замененытолько единицы, что приведет к тому, что <tex>Jump_k = |x|_1 - k</tex>. Так как больше никакая строка из выборки не будет иметь более низкое меньшее <tex>Jump_k</tex> значение, то добавление <tex>k</tex> к минимальному ненулевому значению <tex>Jump_k</tex> других строк из выборки приведет к нужному результату— функция вернет количество единиц в строке <tex>x</tex>. Случай, когда <tex>|x|_1 \leq k</tex>, аналогичен.
Понятно, что процедура верна функция корректна при всех <tex>x</tex>, таких, что <tex>k < |x|_1 < n-k</tex>. Остальные два случая симметричны, поэтому пусть <tex>|x|_1 \geq n-k</tex>. Очевидно, что результат процедуры корректен тогда и только тогда, когда хотя бы в одной из <tex>c</tex> строк были заменены только единицы. Вычислим Требуется вычислить вероятность <tex>p</tex> этого события. Мы выбираем Итеративно выбираются <tex>k</tex> бит для замены итеративно, поэтому после <tex>i</tex> итераций имеется как минимум <tex>n-k-i</tex> позиций с единицей из <tex>n-i</tex> невыбранных позиций. Отсюда, которые можно выбиратьс использованием неравенства Бернулли <ref>[http://en. Это приводит к границе wikipedia.org/wiki/Bernoulli%27s_inequality Bernoulli's inequality]</ref>, получается граница на вероятность выбора <tex>k</tex> единиц:
:<tex>(\frac{n-k}{n})\cdot(\frac{n-k-1}{n-1})\cdots(\frac{n-k-(k-1)}{n-(k-1)}) = \Pi_{i=0}^{k-1}(1 - \frac{k}{n-i}) \geq (1 - \frac{k}{n-k})^k \geq (1 - \frac{k^2}{n-k}),</tex>.
:<tex>p \geq 1 - (\frac{k^2}{n-k})^c</tex>.
'''if''' <tex>Jump_k(x) \neq 0</tex> '''then output''' <tex>Jump_k(x)</tex>;
}}
== Задача о разбиении ==
}}
Далее <tex>Partition_{\neq}</tex> — подкласс задачи <tex>Partition</tex> с взятыми заданными различными весами.
=== Знаковая ''fitness''-функция ===
:<tex>f_{\mathcal{I}}^{*}: \mathcal{F} \rightarrow \mathbb{Z}, (\mathcal{I}_0, \mathcal{I}_1) \mapsto \Sigma_{w \in \mathcal{I}_0} w - \Sigma_{w \in \mathcal{I}_1} w</tex>.
Цель заключается в минимизации <tex>|f_{\mathcal{I}}^{*}|</tex>.
:<tex>f_{\mathcal{I}}: \{0,1\}^n \rightarrow \mathbb{Z}, x \mapsto \Sigma_{i \in [n], x_i=0} \sigma^{-1}(i) - \Sigma_{i \in [n], x_i=1} \sigma^{-1}(i)</tex>.
|id=th6
|statement=Унарная несмещенная ''black-box'' сложность задачи <tex>Partition_{\neq}</tex> относительно ''fitness''-функции <tex>f_{\mathcal{I}}</tex> равна <tex>O(n \log(n))</tex>, где <tex>n := |\mathcal{I}|</tex>.
|proof=Для доказательства будет построен теоретмы строится алгоритм с применением двух вариативных операторов:
:*<tex>uniform()</tex> — выбирает случайную битовую строку <tex>x \in \{0,1\}^n</tex>;
:*<tex>RLS(\cdot)</tex> — случайно меняет элемент в одной из позиций входной строки.
Для краткости положим полагется <tex>f := f_{\mathcal{I}}</tex>.
Следующий алгоритм служит доказательством теоремы:
11 '''else''' <tex>\mathcal{I}_1' \leftarrow \mathcal{I}_1' \cup {|f(x^{(0)}) - f(x^{(t)})|/2}</tex>;
12 '''Оптимизация'''
13 В оффлайне вычисляем вычисляется оптимальное решение <tex>(\mathcal{O}_0, \mathcal{O}_1)</tex> и множество <tex>\mathcal{M} \leftarrow \{w \in \mathcal{O}_0 | w \notin \mathcal{I}_0'\} \cup \{w \in \mathcal{O}_1 | w \notin \mathcal{I}_1'\}</tex> — множество элементов, которые надо необходимо переместить.
14 <tex>z \leftarrow x^{(0)}</tex>;
15 '''while''' <tex>|\mathcal{M}| > 0</tex> '''do'''
18 <tex>z \leftarrow y</tex>, <tex>\mathcal{M} \leftarrow \mathcal{M} \backslash \{w\}</tex>;
За <tex>(1+o(1))n \log(n)</tex> итераций будут определены определяются веса всех элементов <tex>\mathcal{I}</tex>. Зная весаэлементов, можно в оффлайне перебором найти находится оптимальное решение задачи, после чего надо это решение необходимо восстановить с помощью вариативного <tex>1</tex>-арного оператора. Для этого было найдено построено множество <tex>\mathcal{M}</tex> — множество элементов, которые необходимо переместить для получения оптимального решения. В итоге получается, что несмещенная ''black-box'' сложность задачи <tex>Partition_{\neq}</tex> относительно заданной ''fitness''-функции равна <tex>O(n \log(n))</tex>. Полное доказательство приведено в работе <ref name="bbox"/>.
}}
=== Беззнаковая ''fitness''-функция ===
{{Теорема
|id=th8
|statement=Унарная несмещенная ''black-box'' сложность задачи <tex>Partition_{\neq}</tex> относительно ''fitness''-функции <tex>|f_{\mathcal{I}}|</tex> равна <tex>O(n \log(n))</tex>. Где <tex>n := |\mathcal{I}|</tex>.
|proof=Для краткости положимполагается:
:*<tex>f := |f_{\mathcal{I}}|</tex>;
:*<tex>S_0(x) = \Sigma_{w \in \mathcal{I}_0(x)} w</tex>;
:*<tex>S_1(x) = \Sigma_{w \in \mathcal{I}_1(x)} w</tex>;
:*<tex>\mathcal{I}_{max(x)}</tex> — множество элементов, принадлежащих корзине с большим весом. Например , <tex>\mathcal{I}_{max(x)} = \mathcal{I}_0</tex> если <tex>S_0(x) \geq S_1(x)</tex>;
:*<tex>w_{max} = \max \mathcal{I}</tex> — элемент с максимальным весом.
Общая идея алгоритма состоит в следующем:
:*сгенерировать строкугенерируется строка, такуютакая, что все ее элементы находятся в одной корзине (с большой вероятностью это можно сделать за <tex>4n \log(n)</tex> запросов);:*за <tex>2n \log(n)</tex> шагов с помощью <tex>RLS(\cdot)</tex> опеределить опеределяются веса всех элементов (с большой вероятностью);:*за <tex>3n \log(n)</tex> шагов восстановить восстанавливаетчся решение (с большой вероятностью).
Следующий алгоритм является доказательством теоремы:
13 <tex>x^{(2,t)} \leftarrow RLS(x)</tex>. Запрос <tex>f(x^{(2,t)})</tex>;
14 '''Оптимизация'''
15 Вычислить Вычисление в оффлайне перебором оптимальное решение перебороим оптимального решения <tex>(\mathcal{O}_0, \mathcal{O}_1)</tex>, такое такого что <tex>w_{max} \in \mathcal{O}_1</tex>. <tex>\mathcal{M} \leftarrow \mathcal{O}_1</tex>;
16 '''for''' <tex>t = 1</tex> '''to''' <tex>2n \log(n)</tex> '''do'''
17 <tex>x^{(3,t)} \leftarrow RLS(x)</tex>. Запрос <tex>f(x^{(3,t)})</tex>;