Я думаю что будет очень плохо, если арабы (и другие народы) перейдут на латиницу. Это обернётся точно таким же ужасом, как монополия IE 6. Нет разнообразия — нет развития.
Да. Главный смысл — отсутствие вложенности [операторов if и т. д.] и прямое и простое кодирование в байты. Чтобы со строкой байт можно было делать всё что угодно и результат откомпилируется и будет отличаться от родителя, в зависимости от того, какие сильные были мутации. Можно скопировать кусок байт из алгоритма A и вставить в любое место алгоритма B, который в итоге приобретёт какие-то свойства алгоритма A.
Язык вообще на ДНК немного похож :).
Кстати, если использовать ГА или PSO для генерации программ, то возникает ещё более интересный вопрос, как кодировать алгоритм, чтобы операция мутации и кроссовера была простой и лёгкой. Сейчас в основном используют нейронные сети или иерархические языки, но мне кажется, что это неправильный путь заимствования и я разрабатываю специальный язык, чтобы кодировать программы в для ГА — evolu.org
Ну а плюс, нам для PSO желательно не любое пространство решений. То есть мы не можем просто случайно раздать всем возможным алгоритмам свои координаты. Чтобы PSO нормально работал:
Если у нас есть алгоритмы A (с координатами x1, y2) и B (x2, y2), то алгоритм C, который расположен посредине между (x1, y1) и (x2, y2) должен иметь свойства частично присущие A, частично B.
Иначе у нас будет случайный перебор — близость между двумя пчёлами не будет означать близости значений fitness’а → следовательно понятие расстояния уже не имеет смысла и пчеле не имеет смысла лететь к более успешной пчеле.
Ну а распределить всё (бесконечное) множество алгоритмов по n-координатам так, чтобы это свойство соблюдалось будет очень сложно ;).
Пространство решений в математике — это просто символ, а не n-мерное пространство в нашей голове. В голове оно мешает. Проще представить PSO для программы в виде графа связанных между собой программ. Хорошая программа отдаёт свои куски в более плохую (на основе того, насколько они отличаются между собой). В итоге и нет зависимости кол-ва пчёл от измерений (если оно вообще было), хотя, конечно, пчёл мало не бывает :).
Вот хороший пример — мы же не используем метафору «пространства решений» для генетического алгоритма? (ну используем только в очень простых случаях, чтобы строить красивые графики и объяснять) И для PSO пространство решений (а тем более кол-во измерений) не обязательно (раз мы можем PSO свести к модификации ГА).
Но у того метода нет «пространства», поскольку нет измерений, есть только расстояния. Нет, конечно же всё можно свести к пространству с нужным кол-вом измерений, но тут пространство неправильно задавать, поскольку оно будет кодироваться неявно, не будет помогать нам понять и решить задачу.
Ведь любое множество решений можно закодировать с помощью 1-мерного пространства, поэтому связь измерения → кол-во пчёл не очень хороша :).
Кстати, автор, совершенно странно, что ты не используешь оригинальное английское название алгоритма (Particle Swarm Optimization), хотя бы для поиска статьи.
В том-то и дело, что не обязательно в оптимизации роем делать «пространство». Пространство вообще ограничение метафоры :). На самом деле нам нужно только три оператора: расстояние между двумя точками, случайное изменение точки и сдвигание одной точки в сторону другой. Всё это можно легко сделать для любого представления алгоритма (например, расстояние Левенштейна, случайная мутация и кроссовер). В статье ребята более подробно объясняют, как это они сделали: julian.togelius.com/Togelius2008Geometric.pdf
Кстати, а ведь метод роя (пчёл в названии, кстати нет ;) ), применим не только для координат. Есть проекты, где он может применяться для поиска любого универсального решения (например, программы, которая удовлетворяет заданным тестам).
Фактически, оптимизация роем — это некий аналог генетического алгоритма. Если откинуть лишнее, то он очень близки. Отличаются они двумя вещами:
1. В оптимизации роем самое лучшее решение не подавляет остальные. Всегда остаётся место для какой-то оппозиции. Так что оптимизация роем меньше застревает на локальных минимумах.
2. В генетическом алгоритме, популяция постоянно пересоздаётся — в итоге сильно увеличивается нагрузка на память. В оптимизации роем мы не клонируем «пчёл», а просто применяем мутацию (и слияние) на каждую из них.
В итоге, мне кажется, что надо оптимизацией роем заменять генетический алгоритм во многих задачах, потому что он гораздо лучше подходит к архитектуре наших процессоров.
Кстати, можно ли считать нейронную сеть самообучающейся, раз возможности её обучения ограничены её архитектурой (если нет нейронов с обратной связью, то она не способы иметь состояния и т. д.)? С другой стороны, если мы генерируем с помощью генетического алгоритма программу (в любом полном по Тьюрингу представлении), то она теоретически неограниченна по возможностям (хотя и ограничена практически временем генерации).
Ну кроме прикладных задач, перед нейронными сетями стоят и исследовательские задачи. Нейрохирургам тоже нужны ИНС и не для решения математических задач.
Кстати, не забывай приводить в статье больше примеров из реальной жизни. А-то много формальной математики — я, например, гораздо лучше думаю на основе примеров (визуальное мышление, все дела, приходится тратить ресурсы на поиск примеров удовлетворяющих формуле и т. д. :) ).
Язык вообще на ДНК немного похож :).
Если у нас есть алгоритмы A (с координатами x1, y2) и B (x2, y2), то алгоритм C, который расположен посредине между (x1, y1) и (x2, y2) должен иметь свойства частично присущие A, частично B.
Иначе у нас будет случайный перебор — близость между двумя пчёлами не будет означать близости значений fitness’а → следовательно понятие расстояния уже не имеет смысла и пчеле не имеет смысла лететь к более успешной пчеле.
Ну а распределить всё (бесконечное) множество алгоритмов по n-координатам так, чтобы это свойство соблюдалось будет очень сложно ;).
Ведь любое множество решений можно закодировать с помощью 1-мерного пространства, поэтому связь измерения → кол-во пчёл не очень хороша :).
Фактически, оптимизация роем — это некий аналог генетического алгоритма. Если откинуть лишнее, то он очень близки. Отличаются они двумя вещами:
1. В оптимизации роем самое лучшее решение не подавляет остальные. Всегда остаётся место для какой-то оппозиции. Так что оптимизация роем меньше застревает на локальных минимумах.
2. В генетическом алгоритме, популяция постоянно пересоздаётся — в итоге сильно увеличивается нагрузка на память. В оптимизации роем мы не клонируем «пчёл», а просто применяем мутацию (и слияние) на каждую из них.
В итоге, мне кажется, что надо оптимизацией роем заменять генетический алгоритм во многих задачах, потому что он гораздо лучше подходит к архитектуре наших процессоров.