Искусство программирования на Си (984073), страница 68
Текст из файла (страница 68)
:,:,;;!! )1 ";б";::,: н:;,с-.Г.',.;,РЗ'':,;"::,Г':„',"--,"„-..'-".„'!ъ ":;,,.-' ,-, ч.';"з.';.'","гх;,ч,'.юа ",с .,„;",,;.",;.»; ' ' х "':с к :,: ср;й ) .=2Г!";:,,' Г„*:-,,",;... ""=,,,-:*""...,"",-:.*~;",.'-Р;;с,' Ц" Р ' "й к.",'",~.'„е Й'"ч.дтг,гг,у зя ' Зт зг "т..д.„';;. е'с;";,ч,;с л, з е к у'"" Каждый геном-член популяции — сначала требуегся ранжировать по функции пригодности. Это просто позволяет определитгн насколько хорошо каждое генетически кодированное решение удовлетворяет проблемной цели. Из-за необходимости сравнении нескольких кандидатов друг с другом функция пригодности должна возвращать точные, окончательно сформированные характерные оценки решений, а также легко их ранжировать и сравнивать друг с другом. Всегда легче работать с единственным значением пригодное~и, но всетаки некоторые проблемы можно уменьшить лишь до нескольких таких значений. Например, программа поиска наилучших из возможных рабочих мест выдаст вам несколько вариантов высокооплачиваемой работы, причем в одном случае вам покажется удобным месторас- шие аэлели лля этих генов, однако иногда реализуется сильный, но ошибочный оптимум.
Мутация действительно держит популяцию в пределах желательной стабильности, но после этого эволюция не может продолжать ул>чшение популяции обычнылзи способами. Воспроизводство большей разновидности без потери необходимых преимуществ стабильности и прогрессивного усовершенствования называется видлобрлзовлииеэс Разделение популяции на подмножества, в которых геномы мигрируют редко или вообще не мигрируют, приводит к развитию разновидностей (видов). Одно подмножество может потерять зкизнеспособностгч а другое может продолжать эволюцию.
Случайное производство одного или нескольких чужих организмов может позволить преололеть застой, и популяция будет развиваться дальше. Иногла два подмножества развиваются в двух различных о~ношениях, и один чужой геном из более улучшенного подмножества може~ быстро размножиться и стать доминирующим над более слабым, создавая не так, как надо, недостаток глубокого понимания ал- ОпуИмиздция горитма может стать большой проблемой. Рассматривайте генетические функции в программе как исключительно экспериментальные. Сделайте так, чтобы переменные управления можно было легко изменять, причем попробуйте использовать различные стратегии. Опишите массив статистических данных как экспериментальные данные.
Опишите состояние популяции, успех рекомбинации, количество уникальных индивидуумов, количество поколений и т.п. Попробуйте описать обширные обзоры и выводы так же, как ПВРлллВпюЗМ несколько примеров близких индивилуумов, подвергаю- Генетические азгоритлгы хорошо работают параллель- щихся различным операциям. Если можно, то попытай- но.
Один из способов такой работы заключается в том, тесь сделать свою экспериментальную пРогРамм)' инте чтобы каждый процесс развивал независимое лодмно- рактивной, чтобы можно бьшо легко изучить влияние жество. Периодически между подмножествами проис- каждого параметра управления на работу программы.
ходит обмен представленными геномами, для того чтоЗапомните; намного легче получить корректную Ра- бы обнаруженные преимущества одного процесса боту отдельной простой функции, чем всей программы можно было использовать для ускорения развития дру- Правильное выполнсние генетических азгоритмов зави гого процесса. Это создает множество параллельных Дала иитееьиме апееатичееииераздееы Ге нети и ее еие а ъюриаиеи 1 ° Часть я! Глава 21 $ Генетические структуры, использусмыс гснстичсс- ( Каждое подмножество популяции булст иметь фик- "стратегия плюса", позволяющая родительским гсноти- ким биржевым консультантом, масштабируемым от сиронанный размер. В каждом поколении новые гено- пам неограниченно выживать из поколения в поколс- индивидуальных генов ло целых популяций, описаны 1опд ачд ргзсез типы заменяют старые.
В листинге 21.5 используется нис. 1опд рг(се; в листинге 21<1 1опд вЬагеа = 0; Листинг 21.5. Простая функция выбора для принятия решения о том, кому "жить", а кому "умирать". 1опд сааЬ = О/ Листинг 21.3. Генетические структуры и ппаздпеб 1пг 1; ппабдпеб зпс ае1ест апгчзчога( структуры ввода для генетического биржевого /' Супествувдае особа */ консультанта. тот(Г 0; С < Н15ТОПТ ЬВВСТВЗ С++) аресзеа т сопят* Ьетоге, ( /* вмввввве оргавязмв '/ Суребет ппаздпеб 1пг депе 1/ ргзсе Ьаасогу[Г)) аресзев 1* а(пег, госа1 рггсе + рггсе( /* Значевве првгодноств хазщого организма '/ сгребет аггпсг ачд ргзсе гога1 ргзсе / (С е 1); 1опд* 11с ( /* Рассматриваемая цена по отвоевана ( х средаеа '/ ппазяпеб 1пс 1; сЬговоаове Г; ргзсе — — ачд рг1сез ппагдпеб (пс 1опд гесогб; Гуребет асгпсг /' Првведевве цевм а процентное 1опд Гепр) ( соотвопевве */ рг1се = ргзсе * 100 / ачд рггсе; /' Копвровавве 1/4 аанбопее нмгодввх после [) '/ 1пбзч)бна1[5РВС1В5 РОРСЬАТ10я); Гог(1 = О/ г < арвстдв Ророьлттои / а; 1+<) ) аресзеа 11 11(-рг1се >и (1опд)Сгау со Ьеп(с-> ( Гене»и«««ли«аллар»им» Глава 2( ) ) Дополни»или»л тома«ни««анне разде«» ~петь В( Листинг 21.8.
Функции рекомбинации, отвечающие за создание новых организмов из старых. чо(д ваге депев( депе Г« рагепг 1 депе Е* рагепг 2, депе Г' сЬ(1а чога 1пШа1(хе рорн1а11оп(рорп1аайоп Е« р) ( зпг (.; /« Отдепьвый ввд дпв хаадой ахпвв '/ гог(з = с; 1 < воя втосклг (з+) ( ) ( вы(ссь(тапа() Ъ 3) ( гпгйза(йхе вресгев(ьр->арепьев(г)) ) саве 0: /* Васпедоаать от «ей(16 'рагепе 1 Ьгеайз саве 1: /« Васпедовать от *сб116 = «рагепе 2 Ьгеаз; саве 2: /+ васпедовать от «сй(1й = 'рагепс 1 Ьгеай.
первого родвтепа '/ Стратегия мутации Поскольку теперь есть несколько генов, ллв произ второго радетеле '/ Длд этой задачи будем использовать только легкую му- водствп потомства нужно одновременно скомбиниротапию. Будет лостаточно простой случайной побитовой пать только лвук Родителей. Выбор родителей можно переброски (листинг 21.7). слопать случайныл«(листинг 21.8).
обовх радетелей «/ Листинг 21.7. Побитовая переброска между простейшими функциями мутации. а «рагепе 2 » 1; чоха впсаее депе(депе Г« д) тятзгззр дои олииозез оные оымоиз ииескее разделы часть Ш Результаты и умозаключения Резюме Чед Диксон В ЭТОЙ ГЛАВЕ Зз Популяция, состояшая из сотни организмов, последовательно находит наилучшие возможные значения меньше чем за пятьдесят поколений.
Из-за простоты хромосом все, кроме самых больших, изменений в рекомбинации не имеют видимого эффекта. Этот довольно простой алгоритм кажется вполне адекватным для поиска хороших портфелей акций в биржевой торговле. Он позволяет быстро найти наилучшее значение пригодности, и его можно использовать для исследования больших областей решений, за пределами простых операций покупки-продажи.
Использование более комплексных стратегий оценки пригодности, типа совпадения с шаблоном займет больше времени, но в результате будут получены более оптимальные рекомендации. В этой главе приведена замечательная концепция использования генетики и эволюции для решения проблем различной степени сложности. Мы увидели, что, хотя генетические алгоритмы не решают чистых, поставленных "с нуля" проблем, подобных сортировке целых чисел, они очень удобны лля разрешения тех затруднительных ситуаций, которые появляются в реальном мире.
Неверные исходные данные, изменяющие рос> рсные ограничения, изменяюшие цели, а также сами цели, которые довольно трудно определить„не нарушают эволюцию настолько драматично, как это происхолит в обычных алгоритмах. Наиболее необычные метафоры зачастую приводят к самым интересным решениям. Несмотря на то что эволюция животного мира не относится к компьютерным программам, мы, программисты, можем извлечь из этого много хороших уроков. Например, простой генетичес- Межплатформенная разработка: программирование коммуникационных средств ° Планирование переноса ° Абстрактные слои ° Сокеты ° Межплатформенное приложение Ыетнттформеннан разработки о:нраграммечтаоние коммуникакионнык средств Лонолнительные тематические разделы ГЛааа аа Часть и! -к"-.:,,':~"'!,-":," ~;-~:-'-.;-': " ~ь Г?;::;:::;;,;".",:=.:„:- ".;",'",","-':.
".":дф.'..::!'".' и ', а е-"",;".'";,,;Г С»;,, к ',Ге--.';;-*'~ , С;ч 'чк ","'.,",;". '.';; „, '",, й Гх.:"'3"! =. ',:Г-*"":.,' ""'-.', Г Г Г'-.~Гх": "' )и „,, '„,.„".-",:!:,'„'н .; к 'е -"';Ь .„'... «, б Сыр., ;,,:.."; ь",Ст'," ° '~,'ч к' ,„у. еъ";~,'% ";,''; .Ге,',Г-"„'ь;-',с! > (й:,;" ';",;."'.' ":.."'ч Г Е>...;";"ь-"...:,,„Еч ) %-;; У '„,",,'к),Л? н ''"„,,д '„'„,', ',, ' ',' ' "„' ДТ ': ' . ".",." ъ е":";-:Уь: ., ':;", '. -" ":, !, -. ьй : ееь:-?:-':,:-,-- '.:.""- =Р Ъч>: -: ..:.,:,:-;.'::.:'--".Г', -; """ ." '";„," Г)Г.,Г;,":,„-,,' - '.",;.
"'.';.. "' ", '«' '. '3 когда они переносят код на другой компилятор, возможно, в другой операционной системе. Многим (ЛЧГХ- программистам трудно поверить, что в А)ч)$! не упоминается функция Ьгегон. И все знают, что втгдвр() и мпсшрΠ— это стандартные функции с. на самом деле, конечно, это не так. Когда мы работаем с аппаратными средствами, то часто вынуждены писать непереносимые коды. Однако при этом можно льаксимально сократить проблемы, связанные с переносом этого кода в другую рабочую среду. Выходом из сложившейся ситуации является принцип "разлеляй и властвуй".
Разделив программу на переносимую и непереносимую части, можно, когда р у этирование библиотечные функяий с номенныо придет время, уменьшить объем необходимых исправ- обстрок пнык слоев. лений. Изолирование непереносимого кода в собственных модулях означает, что для каждой новой платфор- Перед тем как взяться за проблему переносимости, мы необходимо б>дет переписать только зги модули. давайте решим первую проблему, связанную с техноло- гией коммуникаций.