Генетические алгоритмы |
||||||||
Вы решили заняться ГА. Что делать? | ||||||||
|
Итак, по той или иной причине, вы решили разобраться в генетическом алгоритме, а, может быть, даже написать его. Первый вопрос: с чего начать? Прежде всего, рекомендую понять как вообще ЭТО все работает, забыв на некоторое время про кодирование параметров, генетические операторы и прочее. Уверяю, у вас еще будет достаточно времени и возможностей, чтобы вдоволь попугать себя этими страшностями. Чтобы легче было понять, можно представить, как работает простой селекционер от сохи Иван Карпович Ложноножкин из села Нижние Подмышки, разводящий например, свиней. Вполне возможно, он понятия не имеет о всяких там терминах и действует по старинке: нашел свиней получше (пожирнее, или, наоборот, попостнее, а может быть с мягкой и шелковистой щетиной, это уж как у Ивана Карповича душа ляжет) и давай их скрещивать. Если свиньи будут одного пола, то тут, конечно, осечка получится, и максимум, что из этого выйдет: стадо свиней-гомосексуалистов (хорошо еще, если они на людей нападать не будут). А вот ежели свиньи попались разного пола, то счастливый дядя Ваня получает потомство чуть получше, чем их родители, с точки зрения вкуса или шелковистости. Последовательно издеваясь подобным макаром над этим потомством, а затем над следующим и так далее, через некотоое время Иван Карпович может получить хрюнделей с умопомрачительным беконом, из щетины которых можно будет вязать носки и варежки. И тогда в обиход войдет фраза, что "свиньи, это не только ценный мех...". Все это словоблудие исключительно для того, чтобы в дальнейшем поговорить о более серьезных вещах (хотя, если честно, я просто упражнялся в остроумии, но вы ведь умеете хранить тайны, правда?). В генетических алгоритмах все очень похоже. Набравшись смелости можно даже сказать, что мы занимаемся селекцией, только животные у нас не живые (и даже не мертвые), а представлены как программные модели. Но суть остается та же: выбираются особи получше, скрещиваются, дают потомство. В общем популяция развивается и с течением времени все хорошеет и хорошеет. Напервый взгляд, все очень абстрактно и не имеет отношения к каким-то задачам оптимизации, про необходимость решения которых так много говорят (большевики?). Но! Особи скрещиваются не "абы" какие, а те, которые лучше подходят для ДАННОЙ задачи. Подробнее об этом, а также о том, то из себя должны представлять особи, как они скрещиваются и т.д. читайте в соответствующих разделах по генетическому алгоритму. Здесь я постараюсь дать только общую концепцию и рассмотреть другие вещи, которые редко обсуждаются. Предположим, что, в общем, вы поняли, как устроен ГА. Возможно, вы также удивлены тем, что это может работать и вам хочется проверить алгоритм на практике. Дело за малым: надо либо написать ГА самому, либо найти его реализацию. Первый вариант, на мой взгляд, интереснее и не так страшен, как кажется на первый взгляд. Для тех же, кому недосуг, рекомендую поискать на следующих сайтах:
Для тех же кто хочет написать ГА сам могу посоветовать следующее:
Теперь программа тоже есть. В принципе в большинстве случаев на этом останавливаются, делают отчет и/или ставят "галочку" на личной доске достижений. Но если вам действительно интересны генетические алгоритмы, то здесь вылезает очень большой вопрос "А что дальше?". Ну, допустим, вы рассмотрели какую-то задачу (оптимизации, коммивояжера, расписание, не суть), получили результаты, возможно, где-то их опубликовали. А что же делать следующие 138 лет? Прежде всего могу посоветовать поиграться с "простейшими" параметрами алгоритма: размер популяции, вероятность операторов скрещивания и мутации - и посмотреть как это отразится на результатах. При этом важен не столько конечный результат, а временные и вычислительные затраты, необходимые для его получения. Дело в том, что в большинстве случаев получить ответ за конечное время на некоторую корректную (!) задачу, т.е. такую задачу, для которой можно достоверно проверить правильность решения, не так уж и сложно, и помимо ГА существует еще целая куча методов оптимизации. Очевидно, что для утверждения целесообразности применения именно генетического алгоритма просто фразы типа "вот эта штуковина с перламутровыми пуговицами находит ответ" явно недостаточно. Необходимы либо видные невооруженным глазом преимущества перед другими методами, либо шаткий-валкий паритет с упором на то, что эволюционные методы достаточно универсальны и т.д. Вот тут уже, наверное, можно завернуть и про перламутровые пуговицы, воззвав к здоровому любопытству тех, кто будет оценивать вашу работу (помните "it's alive!!!" из Франкенштейна?). Последние предложения в большей степени верно для множества тестовых задач (benchmarks), решение реальных практических задач - вопрос совсем другого калибра, но об этом как нибудь в другой раз. В общем, я немного отвлекся, поэтому возвращаюсь к исследованию ГА. Для анализа результатов вам будут необходимы, прежде всего, сами результаты. Для того, чтобы результаты были как можно более объективными, необходимо:
Теперь о том, какие данные нужны, что провести анализ. Вообще, это зависит от самого анализа, и от того, что вы хотите рассмотреть. Но в подавляющем большинстве случаев необходима следующая информация (усредненная по нескольким запускам ):
Кстати, можно существенно облегчить себе работу, если предусмотреть в программной реализации автоматический сбор и предобработку данных. Анализ простых параметров ГА поможет глубже понять что к чему и, вполне возможно, даст немало пищи для размышлений и дальнейших идей. Главное, не бояться экспериментировать, хуже не будет, не потому, что хуже некуда, а потому, что вы ничего не теряете. Сразу же хочу обратить внимание на некоторые преждевременные выводы, которые на мой взгляд, возникают от недостаточного опыта:
Строго говоря, в ГА вообще трудно делать какие бы то ни было обобщающие выводы. Частные, пожалуйста, а вот с общими трудно, т.к. есть вероятность, что всплывет задача, либо модель ГА, для которых сделанные заключения неверны. Есть, конечно, работы, разбирающие отдельные составляющие генетического алгоритма, к примеру статья Blickle и Thiele "A Comparison of Selection Schemes used in Genetic Algorithms (2nd Edition)", которой, кстати, (ура, ура!) в этом году будет 10 лет, однако однозначно сказать, какая стратегия селекции лучше, а какая хуже, на мой взгляд, нельзя. Вообще, мое текущее мнение таково, что надо рассматривать ГА не как набор функциональных блоков (оценка, селекция, скрещивание, мутация, новое поколение), а как сложную систему со сложными же связями. Т.е. недостаточно исследовать каждую составляющую по отдельности, а потом, на основании анализа, лепить в автоматическом режиме эффективные алгоритмы из подходящих друг другу блоков. Взаимодействие различных параметров ГА исследовалось, исследуется и еще долго будет исследоваться, тут непаханое (ну, ладно, маловспаханное) поле и, как говорит мой научный руководитель, "конь не валялся". Так что, дерзайте! Для того, чтобы исследования шли более плодотворно рекомендую время от времени читать публикации и отчеты исследовательских групп, причем не только свежие, но, пожалуйста, не "брезгуйте" и более древними работами, вних очень много интересного. Ссылки на некоторые из них можно найти здесь. Для чтения вам будет нужен Adobe Acrobat, Distiller или GS Aladdin и неплохие познания в английском. Подсказать, что лучше для каждого отдельно взятого человека сложно, однако могу написать с чего начинал я, возможно, это окажется кому-то полезным. В самом начале я пытался найти работы, в которых бы оценивалась эффективность тех или иных генетических операторов, рассматривались бы особенности их работы. Вообще, отдавал предпочтение теоретическим работам, хотя по теории я знаю все еще довольно немного. По большому счету поиск информации по ГА начинал с сайта С.А.Исаева (сайт почему-то не работает, старая версия здесь), там нашел ссылку на W.Spears'а и K. De Jong'а. Потом узнал про D.Whitley, D.Goldberg'а и IlliGAL, откуда и сейчас беру немало информации. Вообще, советую время от времени навещать сайты с публикациями и отчетами, и проводить поиск на предмет свежих с пылу с жару работ и статей. Еще я пытался искать информацию о теореме шаблонов, но смысла в ней (как практического, так и теоретического) не так уж и много. Кстати, для охотников за знаменитой книгой J.Holland "Adaptation in natural and artificial systems", я тоже в свое время ее искал, не нашел, но могу с уверенностью сказать, что вы запросто сможете прожить и без этой книги. Я, например, ее в глаза не видел и даже не знаю, как выглядит обложка, хотя, признаюсь, любопытно было бы взглянуть. Очень полезной оказалась рассылка Evolutionary Computations Digest, благодаря которой есть возможно получать новости из мира эволюционных вычислений, в том числе информацию о мероприятиях за рубежом. Еще могу порекомендовать читать как можно больше обзорных статей как по ГА, так и по отдельным аспектам, т.к. можно выделить сразу два больших плюса:
И еще, в Гугле также можно найти много интересного, если вводить название статьи. Смысл не столько в поиске самой статьи (сайтсиер, на мой взгляд, в этом плане удобнее), сколько в поиске работ с похожими названиями, либо содержащими в тексте слова из запроса. Примерно половину интересных статей я нашел именно таким образом. И еще немного о поисковиках. Есть специальные системы для поиска научной информации, например, www.scirus.com (который, кстати, понимает по-русски) и недавно начал работу www.scholar.google.com. Информацию лучше сразу искать на английском, потому что на русском языке практически одно и то же, только разными словами, а статей с конференций и из журналов практически нет. Если кому-то все же интересно, советую посмотреть на ПИТИС'е. Я ни в коем случае не ругаю российскую науку и ученых, занимающихся ГА, но если вы сравните количество, а главное, качество информации на западных сайтах и российских, то, думаю, поймете о чем я говорю. Там выпускаются специализированные журналы, посвященные эволюционным вычислениям, проводятся десятки хороших конференций. Думается, одна только GECCO с 30 лекциями и десятком семинаров по информативности с лихвой перекроет все российские публикации по эволюционным вычислениям за год, вместе взятые, при том, что и в России попадаются исключительно хорошие работы. И дело не столько в деньгах, сколько, на мой взгляд, в банальном отсутствии организации и плохой информированности. Но, чтобы не заканчивать на грустном, хочется отметить неубывающий интерес к генетическим алгоритмам и, раз уж все довольно неказисто сейчас, предположить светлое будущее, до которого и мы все доживем). Вот, вроде бы, и все. Если кому-то информация окажется полезной, буду очень рад. Хотите поспорить или обсудить? Пишите или, что полезнее для всех, пожалуйте на форум. Или, если желаете массовости, на форум Basegroup, мой ник - Qai. [16 января 2005г.] |
Made by Qai. Copyright © 2005. |