Я знаю, что все это звучит вполне очевидно. Но самое важное здесь – то, что интерпретатор состоит из множества правил, потенциально находящихся в конфликте друг с другом, причем разные правила срабатывают в разных обстоятельствах при получении разных сообщений из внешней среды. Интерпретатор можно сравнить с экосистемой, населенной правилами, которые одновременно конкурируют и сотрудничают друг с другом. При этом идет постоянный отбор тех, которые внесут наибольший вклад в развитие данной сложной адаптивной системы.
Присвоение коэффициентов доверия
Второй компонент самообучающихся классифицирующих систем – процесс, называемый присвоением коэффициентов доверия. Правилам, при применении которых общая эффективность системы повышается, присваивается больший коэффициент доверия. А у правил, которые не привели к возникновению положительного эффекта или даже нанесли вред системе как целому, коэффициент доверия снижается. Коэффициент доверия определяет вероятность применения правила в следующий раз при получении из внешней среды похожих сообщений.
Происходящий в системе процесс присвоения коэффициентов доверия приводит к повышению роли одних правил и снижению роли других. Формирующийся свод правил представляет собой внутреннюю модель внешней среды и предписывает способы, которыми система должна реагировать на внешние воздействия. Когда внешняя среда изменяется, сильные на данный момент правила способны приводить к неудачам, а слабые, наоборот, могут оказаться более успешными, чем прежде. В результате происходит перераспределение коэффициентов доверия, что позволяет системе адаптироваться к новым ситуациям и непрерывно подправлять и перенастраивать свою внутреннюю модель.
Возникновение новых правил
Последний компонент самообучающихся классифицирующих систем связан с возникновением новых правил. Холланд объясняет, что новые правила могут возникать в результате рекомбинации элементов уже существующих. Примерно так функционирует и ДНК – путем рекомбинации генов и их аллелей.
Холланд считается отцом генетических алгоритмов, поскольку был первым, кто создал эволюционные модели, основанные на применении сложными адаптивными системами определенных наборов правил при принятии решений. Он не только убедительно описал модель самообучения и накопления знаний внутри сложных адаптивных систем, но и показал, что она может быть применена при создании эволюционных алгоритмов, обладающих мощным потенциалом при адаптации систем к внешней среде.
Правила в сравнении с ограничениями
Эксперт по компьютерной графике Крейг Рейнолдс в свое время обнаружил, что поведение птиц в стаях может быть смоделировано на компьютере при помощи простого алгоритма [Reynolds 1987]. Этот тип поведения, широко распространенный в природе среди разных биологических видов, возникает в результате соблюдения трех простых ограничений (рис. 10.1):
• Все особи должны двигаться в одном направлении (согласованность).
• Нельзя сталкиваться друг с другом (разделение).
• Нужно держаться вместе с группой (сплоченность).
Конкретные реализации этих ограничений применяются в компьютерной мультипликации при создании графических изображений стай птиц, летучих мышей, рыб и пингвинов.
По отношению к людям мы обычно не говорим о стаях (если не принимать во внимание отдельных подписчиков Twitter), но в поведении людей и стай птиц есть кое-что общее. В применении к разработчикам ПО ограничения, действующие в стаях, могут принимать примерно такой вид:
• Договориться об общем направлении движения команды (согласованность).
• Избегать столкновений с другими членами команды, предотвращать конфликты (разделение).
• Сотрудничать с другими членами команды, не быть одиночкой (сплоченность).
Поведение птиц в стаях – пример сложного поведения, возникающего в результате применения всего нескольких простых правил. Однако я полагаю, что здесь слово «правила» неточно и даже вводит в заблуждение.
Мы видели, что в сложных системах в основе механизмов «стимул – реакция» лежит выполнение определенных правил. К агенту поступает сообщение, оно обрабатывается в соответствии с этими внутренними правилами, и затем агент определенным образом реагирует. Правила, которыми пользуется данный агент, могут быть сформулированы в виде оператора «если – то – иначе».
Я не очень много знаю о том, как моделировать на компьютере полет стаи птиц, но уверен, что трех перечисленных «правил» явно недостаточно. Нужно написать гораздо более длинный код, чтобы виртуальные птицы, летучие мыши, рыбы и пингвины начали вести себя ожидаемым образом. Реальные правила их поведения, записанные на каком-нибудь языке программирования, с точки зрения конкретной птицы могли бы выглядеть следующим образом:
1. Рассчитать среднее положение птиц, которых я вижу.
2. Рассчитать среднее направление движения птиц, которых я вижу.
3. Если расстояние от меня до среднего положения > константы A, то нужно скорректировать направление моего движения на X градусов по отношению к среднему направлению.
4. Если расстояние от меня до какой-либо другой птицы < константы В, то нужно отклониться от нее в сторону на Y градусов.
5. Если направление моего движения отклоняется от среднего направления движения стаи больше, чем на C градусов, то нужно скорректировать мое направление на Z градусов в сторону среднего направления.
6. И так далее…
7. Повторять до тех пор, пока кто-нибудь не крякнет, что пора садиться.
Эти правила лучше отражают фактическое поведение всех агентов внутри системы. В результате каждая отдельно взятая птица не отбивается от стаи, избегает столкновений и не отстает от остальных. В ходе эволюции они научились именно этому. (Альтернативой был бы дорогостоящий Центр управления полетами.) Таким образом, на практике процесс создания правил будет результатом функционирования соответствующего интерпретатора в сочетании с механизмом присвоения коэффициентов доверия тем или иным правилам и постоянным возникновением новых правил.
Ошибка, которую часто совершают наивные менеджеры, такова: они пытаются в буквальном смысле «запрограммировать» сотрудников на выполнение конкретных правил. «Если ты получаешь документ этого типа, ТОГДА ты должен выполнить вот это действие» или «Если клиент сообщит об ошибке в программном обеспечении, ТОГДА ты должен инициировать эту процедуру». Но сила сложных адаптивных систем в том и заключается, что их агенты могут самостоятельно управлять созданием правил. Менеджерам следует сосредоточиться на установлении ограничений и позволить, чтобы интерпретатор в головах сотрудников включился и проявил свои возможности при решении возникающих задач. Кроме всего прочего, устанавливаемые менеджментом правила все равно не приводят к оптимальному результату. В конце концов, самый эффективный способ поставить организацию на колени – заставить людей строго следовать всем без исключения правилам и не делать ничего, кроме этого [Stacey 2000a: 59].