Глава 1.автоматное и генетическое программирование В настоящей главе приводятся общие концепции автоматного и генетического программирования. Рассматривается понятие «система со сложным поведением» и обосновывается применение автоматного подхода для описания систем этого типа. Приводятся примеры задач, в которых генетические алгоритмы успешно применяются для автоматизированного построения конечных автоматов.
1.1.Основные концепции автоматного программирования В настоящем разделе описывается понятие «системы со сложным поведением» и приводятся основные идеи автоматного программирования.
1.1.1. Системы со сложным поведением В процессе создания программного обеспечения часто возникает необходимость реализации систем со сложным поведением. Таким поведением обладают многие устройства управления, сетевые протоколы и т.д.
Будем считать, что система обладает «нетривиальным» поведением, если в ответ на возникновение некоторого события она, в зависимости от предыстории, может совершить одно из нескольких действий.
При традиционной программной реализации систем с таким поведением программистами используются переменные, называемые флагами, которым не соответствуют никакие элементы предметной области. Предназначение флагов – участвовать в многочисленных конструкциях ветвления, реализующих логику поведения. Флаги неявно задают отдельные компоненты состояний. Использование флагов трудно для понимания, подвержено ошибкам и практически не расширяемо.
Вместо этого в последнее время предлагается описывать системы со сложным поведением, приписывая каждой из них некоторое множество управляющих состояний. В этих состояниях поведение системы является простым и может быть описано явно. Связь управляющих состояний с действиями и механизм переходов между состояниями удобно описывать с помощью конечных автоматов с выходами [23]. При этом все поведение системы оказывается сосредоточенной в автомате или системе взаимодействующих автоматов. Такой подход к описанию поведения называют автоматным [12].
Будем считать, что система обладает сложным поведением, если она описывается автоматом, или системой взаимодействующих автоматов с достаточно большим числом состояний и переходов.
Одна из центральных идей автоматного программирования [17] состоит в отделении описания логики поведения (при каких условиях необходимо выполнить те или иные действия) от описания его семантики (собственно смысла каждого из действий). Кроме того, описание логики при автоматном подходе жестко структурировано. Эти два свойства делают автоматное описание сложного поведения ясным и удобным.
Одним из наиболее широких классов систем, обладающих сложным поведением, являются реактивные системы. Системы этого класса могут быть также названы событийными. В таких системах в качестве входных воздействий используются события и входные переменные. События, в отличие от входных переменных, не опрашиваются программой, а вызывают соответствующие им обработчики. Входные переменные и выходные воздействия реализуются произвольными подпрограммами (функциями). Перечислим основные отличия реактивных систем от систем других классов.
Если в системах логического управления [24] в качестве входных воздействий используются опрашиваемые программой двоичные входные переменные и предикаты, соответствующие определенным состояниям автоматов, взаимодействующих с рассматриваемым автоматом, то для «реактивных» систем это понятие расширено. Во-первых, в качестве входных переменных применяются любые подпрограммы (функции), возвращающие двоичные значения, а, во-вторых, введены события, не только обеспечивающие возможность выполнения переходов в автоматах, но и инициирующие запуск автоматов. События могут также инициировать реализацию выходных воздействий в случае, когда состояние автомата не изменяется.
Другое отличие «реактивных» систем от систем логического управления состоит в том, что в них в качестве выходных воздействий применяются не двоичные переменные, а произвольные подпрограммы.
Также как и в системах логического управления, в «реактивных» системах алгоритмы представляются в виде системы взаимосвязанных автоматов. При этом если в системах первого типа взаимодействие автоматов в основном осуществляется за счет обмена номерами состояний, а вложенность присутствует в «зачаточном» состоянии, то в «реактивных» системах число способов взаимодействия увеличилось.
Кроме того, если в системах логического управления наиболее целесообразно применять такую структурную модель как автомат Мура, то в «реактивных» (событийных) системах часто более рационально использовать другую модель – смешанный автомат, совмещающий в себе свойства автоматов Мура и Мили.
В качестве примера системы со сложным поведением, управляемой автоматами, приведем систему управления дизель-генератором [18]. На Рис. 1. изображена схема взаимодействия автоматов, которые образуют эту систему.
| Схема взаимодействия автоматов, управляющих системой со сложным поведением
| 1.1.2.Автоматное программирование Парадигма автоматного программирования [17] состоит в представлении систем со сложным поведением в виде автоматизированных объектов управления. Автоматизированный объект управления представляет собой объект управления, интегрированный с системой управления в одно устройство. При этом система управления обладает сложным поведением и представляется в виде системы взаимодействующих конечных автоматов, а объект управления обладает простым поведением и реализуется традиционными методами.
В случае, когда автоматы описывают системы со сложным поведением, их проектирование является нетривиальной и трудоемкой задачей. Поэтому возникает естественное желание – автоматизировать процесс построения автоматов, поручив основную работу компьютеру. При этом нет необходимости, как при традиционном подходе, заранее учитывать все особенности решаемой задачи и действия, которые должна предпринимать программа. Одним из возможных методов проектирования автоматов, соответствующих этим требованием, являются генетические алгоритмы.
|