Black-box Complexity. Примеры нереалистичных оценок Black-box Complexity — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 3: Строка 3:
 
Целью теории сложности является определение вычислительной трудности алгоритмов. Классическая теория сложности предполагает, что алгоритму полностью известна структура решаемой задачи. В случае эволюционных алгоритмов, алгоритм обладает информацией только о качестве (значении ''fitness''-функции) получаемого им решения. По этой причине утверждения классической теории сложности мало применимы для эволюционных алгоритмов.
 
Целью теории сложности является определение вычислительной трудности алгоритмов. Классическая теория сложности предполагает, что алгоритму полностью известна структура решаемой задачи. В случае эволюционных алгоритмов, алгоритм обладает информацией только о качестве (значении ''fitness''-функции) получаемого им решения. По этой причине утверждения классической теории сложности мало применимы для эволюционных алгоритмов.
  
'''Black-box Complexity''' &mdash; попытка построить теорию сложности для эволюционных алгоритмов. Вкратце, ''black-box complexity'' алгоритма &mdash; количество вычислений ''fitness''-функции, необходимое для получения решения. Такое определение позволяет получить не реалистично низкие оценки ''black-box complexity'', например, полиномиальную сложность для <tex>\mathrm{NP}</tex>-полной задачи поиска максимальной клики.
+
'''Black-box Complexity''' &mdash; попытка построить теорию сложности для эволюционных алгоритмов. Вкратце, ''black-box'' сложность алгоритма &mdash; количество вычислений ''fitness''-функции, необходимое для получения решения. Такое определение позволяет получить не реалистично низкие оценки ''black-box'' сложности, например, полиномиальную сложность для <tex>\mathrm{NP}</tex>-полной задачи поиска максимальной клики.
  
По этой причине были введены ограничения на исследуемые алгоритмы. Требуется, чтобы для получения новых кандидатов на решение использовались только '''несмещенные''' (позиция элемента в битовой строке и его значение не влияют на выбор битов для изменения) '''вариативные операторы'''. Так же введено понятие '''арности''' &mdash; <tex>k</tex>-арный несмещенный ''black-box'' алгоритм использует только те операторы, которые принимают не более чем <tex>k</tex> аргументов. Для некоторых классов задач такой подход к опеределению ''black-box complexity'' позволяет получить более реалистичные оценки сложности. Операторы с арностью <tex>1</tex> называют '''мутационными'''. В данной статье показано, что даже для алгоритмов, использующих только мутационные операторы можно получить не реалистично маленькую оценку ''black-box complexity''.
+
По этой причине были введены ограничения на исследуемые алгоритмы. Требуется, чтобы для получения новых кандидатов на решение использовались только '''несмещенные''' (позиция элемента в битовой строке и его значение не влияют на выбор битов для изменения) '''вариативные операторы'''. Так же введено понятие '''арности''' &mdash; <tex>k</tex>-арный несмещенный ''black-box'' алгоритм использует только те операторы, которые принимают не более чем <tex>k</tex> аргументов. Для некоторых классов задач такой подход к опеределению ''black-box'' сложности позволяет получить более реалистичные оценки сложности. Операторы с арностью <tex>1</tex> называют '''мутационными'''. В данной статье показано, что даже для алгоритмов, использующих только мутационные операторы можно получить не реалистично маленькую оценку ''black-box'' сложности.
  
 
== Неограниченная и несмещенная Black-box модели ==
 
== Неограниченная и несмещенная Black-box модели ==
 
=== Обозначения ===
 
=== Обозначения ===
 
*<tex>\mathbb{N}</tex> &mdash; положительные целые числа;
 
*<tex>\mathbb{N}</tex> &mdash; положительные целые числа;
*<tex>\forall k \in \mathbb{N}</tex>
+
*<tex>\forall k \in \mathbb{N}</tex>:
 
:<tex>[k] := \{1, \ldots , k\}</tex>;
 
:<tex>[k] := \{1, \ldots , k\}</tex>;
 
*<tex>[0..k] := [k] \cup \{0\}</tex>;
 
*<tex>[0..k] := [k] \cup \{0\}</tex>;
*для битовой строки <tex>x = x_1 \cdots x_n \in \{0, 1\}^n</tex>
+
*для битовой строки <tex>x = x_1 \cdots x_n \in \{0, 1\}^n</tex>:
 
:<tex>\overline{x}</tex> &mdash; побитовое дополнение строки <tex>x</tex>;
 
:<tex>\overline{x}</tex> &mdash; побитовое дополнение строки <tex>x</tex>;
 
*<tex>\bigoplus</tex> &mdash; побитовое исключающее или;
 
*<tex>\bigoplus</tex> &mdash; побитовое исключающее или;
*для любого множества <tex>S</tex>
+
*для любого множества <tex>S</tex>:
 
:<tex>2^S</tex> &mdash; множество всех подмножеств множества <tex>S</tex>
 
:<tex>2^S</tex> &mdash; множество всех подмножеств множества <tex>S</tex>
*для <tex>n \in \mathbb{N}</tex>
+
*для <tex>n \in \mathbb{N}</tex>:
 
:<tex>S_n</tex> &mdash; множество всех перестановок <tex>[n]</tex>;
 
:<tex>S_n</tex> &mdash; множество всех перестановок <tex>[n]</tex>;
*для <tex>\sigma \in S_n</tex> и <tex>x \in \{0,1\}^n</tex>
+
*для <tex>\sigma \in S_n</tex> и <tex>x \in \{0,1\}^n</tex>:
 
:<tex>\sigma(x) := x_{\sigma(1)} \cdots x_{\sigma(n)}</tex>;
 
:<tex>\sigma(x) := x_{\sigma(1)} \cdots x_{\sigma(n)}</tex>;
 
*под <tex>log</tex> понимается натуральный логарифм.
 
*под <tex>log</tex> понимается натуральный логарифм.
Строка 186: Строка 186:
  
 
=== Беззнаковая ''fitness''-функция ===
 
=== Беззнаковая ''fitness''-функция ===
 +
Кому-то может не понравиться, что при доказательстве [[#th6|предыдущей теоремы]] происходила минимизация не самой функции <tex>f_{\mathcal{I}}</tex>, а только ее абсолютной величины. Однако можно достичь той же асимптотики и для беззнаковой ''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> &mdash; множество элементов, принадлежащих корзине с большим весом. Например <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> &mdash; элемент с максимальным весом.
 +
 +
Общая идея алгоритма состоит в следующем:
 +
:*сгенерировать строку, такую, что все элементы находятся в одной корзине (с большой вероятностью это можно сделать за <tex>4n \log(n)</tex> запросов);
 +
:*за <tex>2n \log(n)</tex> шагов с помощью <tex>RLS(\cdot)</tex> опеределить веса всех элементов (с большой вероятностью);
 +
:*за <tex>3n \log(n)</tex> шагов восстановить решение (с большой вероятностью).
 +
 +
Следующий алгоритм является доказательством теоремы:
 +
 +
  1 '''Инициализация'''
 +
  2 <tex>x^{(1,0)} \leftarrow uniform()</tex>. Запрос <tex>f(x^{(1,0)})</tex>;
 +
  3 '''Перемещение всех элементов в одну корзину'''
 +
  4 '''for''' <tex>t = 1</tex> '''to''' <tex>2n \log(n)</tex> '''do'''
 +
  5  <tex>x^{(1,t)} \leftarrow RLS(x^{(1,0)})</tex>. Запрос <tex>f(x^{(1,t)})</tex>;
 +
  6 Пусть <tex>l \in \arg \max_{0 \leq t \leq 2n \log(n)} f(x^{(1,t)})</tex>;
 +
  7 <tex>x \leftarrow x^{(1,l)}</tex>;
 +
  8 '''for''' <tex>t = 2n \log(n) + 1</tex> '''to''' <tex>4n \log(n)</tex> '''do'''
 +
  9  <tex>y \leftarrow RLS(x)</tex>. Запрос <tex>f(y)</tex>;
 +
10  '''if''' <tex>f(y) > f(x)</tex> '''then''' <tex>x \leftarrow y</tex>;
 +
11 '''Определение весов всех элементов'''
 +
12 '''for''' <tex>t = 1</tex> '''to''' <tex>2n \log(n)</tex> '''do'''
 +
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>;
 +
18  '''if''' <tex>f(x) > 2w_{max}</tex> '''and''' <tex>f(x^{(3,t)}) < f(x)</tex> '''then'''
 +
19    вычислить <tex>w := (f(x) - f(x^{(3,t)})) / 2</tex>;
 +
20    '''if''' <tex>w \neq w_{max}</tex> '''and''' <tex>w \in \mathcal{M}</tex> '''then'''
 +
21      <tex>x \leftarrow x^{(3,t)}; \mathcal{M} \leftarrow \mathcal{M} \backslash w</tex>;
 +
22 '''for''' <tex>t = 1</tex> '''to''' <tex>n \log(n)</tex> '''do'''
 +
23  <tex>x^{(4,t)} \leftarrow RLS(x)</tex>. Запрос <tex>f(x^{(4,t)})</tex>;
 +
 +
Можно показать, что приведенный алгоритм с большой вероятностью за <tex>O(n \log(n))</tex> запросов находит оптимальное решение.
 +
 +
}}
 +
 +
== Источники ==
 +
# [http://rain.ifmo.ru/~tsarev/teaching/ea-2012/seminars/p2043.pdf Doerr B., Kotzing T., Winzen C. Too Fast Unbiased Black-Box Algorithms]

Версия 01:21, 18 июня 2012

Эта статья находится в разработке!

Введение в Black-box complexity

Целью теории сложности является определение вычислительной трудности алгоритмов. Классическая теория сложности предполагает, что алгоритму полностью известна структура решаемой задачи. В случае эволюционных алгоритмов, алгоритм обладает информацией только о качестве (значении fitness-функции) получаемого им решения. По этой причине утверждения классической теории сложности мало применимы для эволюционных алгоритмов.

Black-box Complexity — попытка построить теорию сложности для эволюционных алгоритмов. Вкратце, black-box сложность алгоритма — количество вычислений fitness-функции, необходимое для получения решения. Такое определение позволяет получить не реалистично низкие оценки black-box сложности, например, полиномиальную сложность для [math]\mathrm{NP}[/math]-полной задачи поиска максимальной клики.

По этой причине были введены ограничения на исследуемые алгоритмы. Требуется, чтобы для получения новых кандидатов на решение использовались только несмещенные (позиция элемента в битовой строке и его значение не влияют на выбор битов для изменения) вариативные операторы. Так же введено понятие арности[math]k[/math]-арный несмещенный black-box алгоритм использует только те операторы, которые принимают не более чем [math]k[/math] аргументов. Для некоторых классов задач такой подход к опеределению black-box сложности позволяет получить более реалистичные оценки сложности. Операторы с арностью [math]1[/math] называют мутационными. В данной статье показано, что даже для алгоритмов, использующих только мутационные операторы можно получить не реалистично маленькую оценку black-box сложности.

Неограниченная и несмещенная Black-box модели

Обозначения

  • [math]\mathbb{N}[/math] — положительные целые числа;
  • [math]\forall k \in \mathbb{N}[/math]:
[math][k] := \{1, \ldots , k\}[/math];
  • [math][0..k] := [k] \cup \{0\}[/math];
  • для битовой строки [math]x = x_1 \cdots x_n \in \{0, 1\}^n[/math]:
[math]\overline{x}[/math] — побитовое дополнение строки [math]x[/math];
  • [math]\bigoplus[/math] — побитовое исключающее или;
  • для любого множества [math]S[/math]:
[math]2^S[/math] — множество всех подмножеств множества [math]S[/math]
  • для [math]n \in \mathbb{N}[/math]:
[math]S_n[/math] — множество всех перестановок [math][n][/math];
  • для [math]\sigma \in S_n[/math] и [math]x \in \{0,1\}^n[/math]:
[math]\sigma(x) := x_{\sigma(1)} \cdots x_{\sigma(n)}[/math];
  • под [math]log[/math] понимается натуральный логарифм.

Неограниченная Black-box модель

Рассматривается класс алгоритмов оптимизации, которые получают информацию о решаемой задаче через вычисление fitness-функции возможных решений. Заданная fitness-функция вычисляется ораклом, или дается как black-box. Алгоритм может запросить у оракла значение функции для любого решения, однако более никакой информации о решении получить не может.

В качестве fitness-функции берется псевдо-булевая функция [math]F:\{0,1\}^n \rightarrow \mathbb{R}[/math].

Согласно концепции black-box, алгоритм может включать следующие действия:

  • выбор вероятностного распределения над [math]\{0,1\}^n[/math];
  • выбор кандидата [math]x \in \{0,1\}^n[/math] cогласно выбранному распределению;
  • запрос значения fitness-функции выбранного кандидата у оракла.

Схема неограниченного black-box алгоритма:

Инициализация: выбрать [math]x^{(0)}[/math] согласно некоторому вероятностному распределению [math]p^{(0)}[/math] над [math]\{0,1\}^n[/math]. Запросить [math]f(x^{(0)})[/math].
Оптимизация: for [math]t = 1, 2, 3, \ldots [/math] until условие остановки do
  Исходя из [math]((x^{(0)}, f(x^{(0)}), \ldots, (x^{(t-1)}, f(x^{(t-1)}))[/math], выбрать вероятностное распределение [math]p^{(t)}[/math] над [math]\{0,1\}^n[/math].
  Выбрать [math]x^{(t)}[/math] согласно [math]p^{(t)}[/math] и запросить [math]f(x^{(t)})[/math].

В качестве времени работы black-box алгоритма берется количество запросов к ораклу сделанное до первого запроса с оптимальным решением.

Пусть [math]\mathcal{F}[/math] — класс псевдо-булевых функций. Сложностью алгоритма [math]A[/math] над [math]\mathcal{F}[/math] называется максимальное предположительное время работы [math]A[/math] на функции [math]f \in \mathcal{F}[/math] (в худшем случае). Сложностью [math]\mathcal{F}[/math] относительно класса алгоритмов [math]\mathcal{A}[/math] называется минимальная сложность среди всех [math]A \in \mathcal{A}[/math] над [math]\mathcal{F}[/math]. Неограниченной black-box сложностью [math]\mathcal{F}[/math] называется сложность [math]\mathcal{F}[/math] относительно класса неограниченных black-box алгоритмов.

Несмещенная Black-box модель

Класс неограниченных black-box алгоритмов слишком мощный. Например для любого функционального класса [math]\mathcal{F} = \{f\}[/math] неограниченная black-box сложность равна единице — алгоритм, который просто запрашивает оптимальное решение первым же шагом, удовлетворяет этому условию.

Чтобы избежать этих недостатков была введена более строгая модель. В ней алгоритмы могут генерировать новые решения используя только несмещенные вариативные операторы.


Определение:
[math]\forall k \in \mathbb{N}, k[/math]-арным несмещенным распределением [math](D(\cdot|y^{(1)},\ldots,y^{(k)}))_{y^{(1)},\ldots,y^{(k)} \in \{0,1\}^n}[/math] называется семейство вероятностных распределений над [math]\{0,1\}^n[/math] таких, что для любых [math]y^{(1)},\ldots,y^{(k)} \in \{0,1\}^n[/math] выполняются следующие условия:
  • [math]\forall x, z \in \{0,1\}^n[/math]:
[math]D(x|y^{(1)},\ldots,y^{(k)}) = D(x \bigoplus z|y^{(1)} \bigoplus z,\ldots,y^{(k)} \bigoplus z)[/math];
  • [math]\forall x \in \{0,1\}^n \forall \sigma \in S_n[/math]:
[math]D(x|y^{(1)},\ldots,y^{(k)}) = D(\sigma(x)|\sigma(y^{(1)}),\ldots,\sigma(y^{(k)}))[/math].


Первое условие называется [math]\bigoplus[/math]-инвариантностью, второе — перестановочной инвариантностью. Оператор, выбранный из [math]k[/math]-арного несмещенного распределения называется [math]k[/math]-арным несмещенным вариативным оператором.

Схема [math]k[/math]-арного несмещенного black-box алгоритма:

Инициализация: выбрать [math]x^{(0)}[/math] равновероятно из [math]\{0,1\}^n[/math]. Запросить [math]f(x^{(0)})[/math].
Оптимизация: for [math]t = 1, 2, 3, \ldots [/math] until условие остановки do
  Исходя из [math](f(x^{(0)}), \ldots, f(x^{(t-1)}))[/math], выбрать [math]k[/math] индексов [math]i_1, \ldots, i_k \in [0..t-1][/math] и [math]k[/math]-арное несмещенное распределение [math]D(\cdot|x^{(i_1)},\ldots,x^{(i_k)})[/math].
  Выбрать [math]x^{(t)}[/math] согласно [math]D(\cdot|x^{(i_1)},\ldots,x^{(i_k)})[/math] и запросить [math]f(x^{(t)})[/math].
Лемма:
Предположим, что для задачи [math]P[/math] существует black-box алгоритм [math]A[/math], который с константной вероятностью успеха решает [math]P[/math] за [math]s[/math] итераций. Тогда black-box сложность [math]P[/math] не больше [math]O(s)[/math].

Jump функции

Определение:
[math]\forall k \lt n/2[/math] функция [math]Jump_k[/math] определяется как
[math]Jump_k(x) = \left\{ \begin{array}{ccc} n, & if & |x|_1=n; \\ |x|_1, & if & k \lt |x|_1 \lt n-k; \\ 0, & & otherwise, \end{array}\right.[/math]
[math]\forall x \in \{0,1\}^n.[/math]


Будет показано, что для любого константного [math]k[/math] можно с высокой вероятностью решить проблему [math]OneMax[/math] за малое количество black-box обращений к [math]Jump_k[/math]. С помощью этого можно показать, что для любого константного [math]k[/math] несмещенная black-box сложность для функции [math]Jump_k[/math] удивительно мала.

Лемма:
[math]\forall k,c[/math] существует унарная несмещенная процедура [math]s[/math], использующая [math]c+1[/math] запросов к [math]Jump_k[/math] такая, что для всех битовых строк [math]x[/math], [math]s(x) = OneMax(x)[/math] с вероятностью [math]1 - O(n^{-c})[/math].
Доказательство:
[math]\triangleright[/math]

Используется унарный несмещенный вариативный оператор [math]flip_k[/math], который равновероятно выбирает строку из [math]k[/math]-окрестности для аргумента (битовую строку, которая отличается в [math]k[/math] позициях). Затем будет использована процедура [math]s[/math], которая использует [math]Jump_k[/math] для аппроксимации [math]OneMax[/math] как показано ниже. Процедура выбирает [math]c[/math] битовых строк в [math]k[/math]-окрестности [math]x[/math]. Если [math]|x|_1 \geq n-k[/math], то правдоподобно, что хотя бы раз только единицы из [math]x[/math] будут заменены, что приведет к тому, что [math]Jump_k = |x|_1 - k[/math]. Так как больше никакая строка из выборки не будет иметь более низкое [math]Jump_k[/math] значение, то добавление [math]k[/math] к минимальному ненулевому значению [math]Jump_k[/math] других строк из выборки приведет к нужному результату. Случай, когда [math]|x|_1 \leq k[/math], аналогичен.

Понятно, что процедура верна при всех [math]x[/math], таких, что [math]k \lt |x|_1 \lt n-k[/math]. Остальные два случая симметричны, поэтому пусть [math]|x|_1 \geq n-k[/math]. Очевидно, что результат процедуры корректен тогда и только тогда, когда хотя бы в одной из [math]c[/math] строк были заменены только единицы. Вычислим вероятность [math]p[/math] этого события. Мы выбираем [math]k[/math] бит для замены итеративно, поэтому после [math]i[/math] итераций имеется как минимум [math]n-k-i[/math] позиций с единицей из [math]n-i[/math] позиций, которые можно выбирать. Это приводит к границе на вероятность выбора единиц:

[math](\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}),[/math]

используя неравенство Бернулли. Таким образом имеем:

[math]p \geq 1 - (\frac{k^2}{n-k})^c[/math].

Процедура [math]s[/math]:

if [math]Jump_k(x) \neq 0[/math] then output [math]Jump_k(x)[/math];
[math]M \leftarrow \{Jump_k(flip_k(x)) | i \in [c]\}[/math];
if [math]max(M) \lt  n/2[/math] then [math]m \leftarrow max(M) - k[/math];
else [math]m \leftarrow min(M \backslash \{0\}) + k[/math];
output [math]m[/math];
[math]\triangleleft[/math]

Теперь, используя предыдущую лемму, можно найти несмещенную black-box сложность для функции [math]Jump_k[/math] при константном [math]k[/math].

Теорема:
Для константы [math]k[/math] несмещенная black-box сложность [math]Jump_k[/math]:
  • [math]O(n \log(n))[/math] для унарных вариативных операторов;
  • [math]O(n / \log(m))[/math] для [math]m[/math]-арных вариативных операторов при [math]2 \leq m \leq n[/math];
  • [math]O(n / \log(n))[/math] для *-арных вариативных операторов.

Процедуре из леммы для работы необходимо знание параметра [math]k[/math]. Процедуру можно модифицировать таким образом, что она будет работать без этого знания. Как только процедура впервые выберет случайную битовую строку с [math]Jump_k=0[/math] она определит [math]k[/math], затем продолжит работу как было описано раньше. Параметр [math]k[/math] определяется с помощью выбора достаточно большого количества случайных строк в [math]i[/math]-окрестности от строки с [math]Jump_k=0[/math], начиная с [math]i=1[/math] и продолжая до тех пор, пока [math]Jump_k[/math] не станет отличным от нуля. Эта строка будет иметь максимальное значение [math]Jump_k=n-k-1[/math]. Из этого значения и [math]n[/math] процедура может вычислить [math]k[/math].

Задача о разбиении

Задача:
Задача о разбиении ([math]Partition[/math] problem) ставится следующим образом. Дано мультимножество [math]\mathcal{I}[/math] положительных целых чисел (весов). Возможно ли разбить его на два непересекающихся множества [math]\mathcal{I}=\mathcal{I}_0 \cup \mathcal{I}_1[/math] таким образом, что [math]\Sigma_{w \in \mathcal{I}_0} w = \Sigma_{w \in \mathcal{I}_1} w[/math]?


Оптимизационная версия задачи ставит вопрос о минимизации функции [math]|\Sigma_{w \in \mathcal{I}_0} w - \Sigma_{w \in \mathcal{I}_1} w|[/math].

Задача [math]Partition[/math] является [math]\mathrm{NP}[/math]-трудной. Предположительно [math]\mathrm{P} \neq \mathrm{NP}[/math] и не существует полиномиального алгоритма решения этой задачи.

Лемма:
Задача [math]Partition[/math] остается [math]\mathrm{NP}[/math]-трудной, когда [math]\forall v, w \in \mathcal{I}: v \neq w[/math].

Далее [math]Partition_{\neq}[/math] — подкласс задачи [math]Partition[/math] с взятыми различными весами.

Предлагаются две различные fitness-функции и показывается, что в обоих случаях может быть достигнута полиномиальная несмещенная black-box сложность. Показывается, что унарная несмещенная black-box сложность для задачи [math]Partition_{\neq}[/math] равна [math]O(n \log(n))[/math].

Знаковая fitness-функция

Полагаем [math]\mathcal{F}_{\mathcal{I}} := \{(\mathcal{I}_0, \mathcal{I}_1) \in 2^{\mathcal{I}} \times 2^{\mathcal{I}} | \mathcal{I}_0 \dot{\cup} \mathcal{I}_1 = \mathcal{I}\}[/math] — множество всех возможных решений для [math]\mathcal{I}[/math]. Определим знаковую fitness-функцию как:

[math]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[/math].

Цель заключается в минимизации [math]|f_{\mathcal{I}}^{*}|[/math].

Зафиксируем нумерацию элементов [math]\mathcal{I}[/math]: [math]\sigma: \mathcal{I} \rightarrow [n][/math]. Для любой битовой строки [math]x \in \{0,1\}^n[/math] определим [math]\mathcal{I}_0(x) := \{w \in \mathcal{I} | x_{\sigma{w}} = 0\}[/math] и [math]\mathcal{I}_1(x) := \{w \in \mathcal{I} | x_{\sigma{w}} = 1\}[/math]. Тогда fitness-функция выглядит так:

[math]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)[/math].
Теорема:
Унарная несмещенная black-box сложность задачи [math]Partition_{\neq}[/math] относительно fitness-функции [math]f_{\mathcal{I}}[/math] равна [math]O(n \log(n))[/math], где [math]n := |\mathcal{I}|[/math].
Доказательство:
[math]\triangleright[/math]

Для доказательства будет построен алгоритм с применением двух вариативных операторов:

  • [math]uniform()[/math] — выбирает случайную битовую строку [math]x \in \{0,1\}^n[/math];
  • [math]RLS(\cdot)[/math] — случайно меняет элемент в одной из позиций входной строки.

Для краткости положим [math]f := f_{\mathcal{I}}[/math].

Следующий алгоритм служит доказательством теоремы:

 1 Инициализация
 2 [math]x^{(0)} \leftarrow uniform()[/math]. Запрос [math]f(x^{(0)})[/math];
 3 [math]t \leftarrow 0, \mathcal{I}_0', \mathcal{I}_1', \mathcal{W}_0 = \varnothing[/math];
 4 Определение весов
 5 while [math]|\mathcal{W}_t| \lt  n[/math] do
 6   [math]t \leftarrow t + 1[/math];
 7   [math]x^{(t)} \leftarrow RLS(x^{(0)})[/math]. Запрос [math]f(x^{(t)})[/math];
 8   [math]\mathcal{W}_t \leftarrow \mathcal{W}_{t-1} \cup \{|f(x^{(0)}) - f(x^{(t)})|/2\}[/math];
 9   if [math]f(x^{(0)}) \gt  f(x^{(t)})[/math] then
10     [math]\mathcal{I}_0' \leftarrow \mathcal{I}_0' \cup {|f(x^{(0)}) - f(x^{(t)})|/2}[/math];
11   else [math]\mathcal{I}_1' \leftarrow \mathcal{I}_1' \cup {|f(x^{(0)}) - f(x^{(t)})|/2}[/math];
12 Оптимизация
13 В оффлайне вычисляем оптимальное решение [math](\mathcal{O}_0, \mathcal{O}_1)[/math] и множество [math]\mathcal{M} \leftarrow \{w \in \mathcal{O}_0 | w \notin \mathcal{I}_0'\} \cup \{w \in \mathcal{O}_1 | w \notin \mathcal{I}_1'\}[/math] — множество элементов, которые надо переместить.
14 [math]z \leftarrow x^{(0)}[/math];
15 while [math]|\mathcal{M}| \gt  0[/math] do
16   [math]y \leftarrow RLS(z)[/math]. Запрос [math]f(y)[/math];
17   if [math]w := |f(y)-f(z)|/2 \in \mathcal{M}[/math] then
18     [math]z \leftarrow y[/math], [math]\mathcal{M} \leftarrow \mathcal{M} \backslash \{w\}[/math];
За [math](1+o(1))n \log(n)[/math] итераций будут определены веса всех элементов [math]\mathcal{I}[/math]. Зная веса, можно в оффлайне перебором найти оптимальное решение задачи, после чего надо это решение восстановить с помощью вариативного [math]1[/math]-арного оператора. Для этого было найдено множество [math]\mathcal{M}[/math] — множество элементов, которые необходимо переместить для получения оптимального решения. В итоге получается, что несмещенная black-box сложность задачи [math]Partition_{\neq}[/math] относительно заданной fitness-функции равна [math]O(n \log(n))[/math].
[math]\triangleleft[/math]

Беззнаковая fitness-функция

Кому-то может не понравиться, что при доказательстве предыдущей теоремы происходила минимизация не самой функции [math]f_{\mathcal{I}}[/math], а только ее абсолютной величины. Однако можно достичь той же асимптотики и для беззнаковой fitness-функции. Сложность заключается в том, что теперь нельзя просто определить вес перемещенного элемента. Этот факт выражается в более сложной процедуре для определения весов элементов.

Теорема:
Унарная несмещенная black-box сложность задачи [math]Partition_{\neq}[/math] относительно fitness-функции [math]|f_{\mathcal{I}}|[/math] равна [math]O(n \log(n))[/math]. Где [math]n := |\mathcal{I}|[/math].
Доказательство:
[math]\triangleright[/math]

Для краткости положим:

  • [math]f := |f_{\mathcal{I}}|[/math];
  • [math]S_0(x) = \Sigma_{w \in \mathcal{I}_0(x)} w[/math];
  • [math]S_1(x) = \Sigma_{w \in \mathcal{I}_1(x)} w[/math];
  • [math]\mathcal{I}_{max(x)}[/math] — множество элементов, принадлежащих корзине с большим весом. Например [math]\mathcal{I}_{max(x)} = \mathcal{I}_0[/math] если [math]S_0(x) \geq S_1(x)[/math];
  • [math]w_{max} = \max \mathcal{I}[/math] — элемент с максимальным весом.

Общая идея алгоритма состоит в следующем:

  • сгенерировать строку, такую, что все элементы находятся в одной корзине (с большой вероятностью это можно сделать за [math]4n \log(n)[/math] запросов);
  • за [math]2n \log(n)[/math] шагов с помощью [math]RLS(\cdot)[/math] опеределить веса всех элементов (с большой вероятностью);
  • за [math]3n \log(n)[/math] шагов восстановить решение (с большой вероятностью).

Следующий алгоритм является доказательством теоремы:

 1 Инициализация
 2 [math]x^{(1,0)} \leftarrow uniform()[/math]. Запрос [math]f(x^{(1,0)})[/math];
 3 Перемещение всех элементов в одну корзину
 4 for [math]t = 1[/math] to [math]2n \log(n)[/math] do
 5   [math]x^{(1,t)} \leftarrow RLS(x^{(1,0)})[/math]. Запрос [math]f(x^{(1,t)})[/math];
 6 Пусть [math]l \in \arg \max_{0 \leq t \leq 2n \log(n)} f(x^{(1,t)})[/math];
 7 [math]x \leftarrow x^{(1,l)}[/math];
 8 for [math]t = 2n \log(n) + 1[/math] to [math]4n \log(n)[/math] do
 9   [math]y \leftarrow RLS(x)[/math]. Запрос [math]f(y)[/math];
10   if [math]f(y) \gt  f(x)[/math] then [math]x \leftarrow y[/math];
11 Определение весов всех элементов
12 for [math]t = 1[/math] to [math]2n \log(n)[/math] do
13   [math]x^{(2,t)} \leftarrow RLS(x)[/math]. Запрос [math]f(x^{(2,t)})[/math];
14 Оптимизация
15 Вычислить в оффлайне перебором оптимальное решение [math](\mathcal{O}_0, \mathcal{O}_1)[/math], такое что [math]w_{max} \in \mathcal{O}_1[/math]. [math]\mathcal{M} \leftarrow \mathcal{O}_1[/math];
16 for [math]t = 1[/math] to [math]2n \log(n)[/math] do
17   [math]x^{(3,t)} \leftarrow RLS(x)[/math]. Запрос [math]f(x^{(3,t)})[/math];
18   if [math]f(x) \gt  2w_{max}[/math] and [math]f(x^{(3,t)}) \lt  f(x)[/math] then
19     вычислить [math]w := (f(x) - f(x^{(3,t)})) / 2[/math];
20     if [math]w \neq w_{max}[/math] and [math]w \in \mathcal{M}[/math] then
21       [math]x \leftarrow x^{(3,t)}; \mathcal{M} \leftarrow \mathcal{M} \backslash w[/math];
22 for [math]t = 1[/math] to [math]n \log(n)[/math] do
23   [math]x^{(4,t)} \leftarrow RLS(x)[/math]. Запрос [math]f(x^{(4,t)})[/math];
Можно показать, что приведенный алгоритм с большой вероятностью за [math]O(n \log(n))[/math] запросов находит оптимальное решение.
[math]\triangleleft[/math]

Источники

  1. Doerr B., Kotzing T., Winzen C. Too Fast Unbiased Black-Box Algorithms