Нейросетевая реализация системы автономного адаптивного управленияРефераты >> Программирование и компьютеры >> Нейросетевая реализация системы автономного адаптивного управления
При создании Фабрики был использован еще один объектный шаблон, так называемый Синглетон. Синглетон решает задачу обеспечения единственности экземпляра класса и управляет доступом к этому экземпляру.
Теперь о самой спецификации. При создании языка спецификации ставились следующие задачи:
· Максимум широты спектра описываемых сетей, или максимальная гибкость языка
· Относительная простота и удобочитаемость
· Минимальная длина спецификаций
· Возможность развития языка
В качестве элементарного примера смоделирована нейросеть из четырех нейронов, с помощью которых могут быть сформированы образы соответственно четырех состояний КА среды. Для данного примера спецификация имеет следующий вид:
[Meta]
set for Neuron2 synonym N
set for Brancher synonym I
[Inputs]
I1,I2,I3,I4
[Outputs]
I1,I2,I3,I4,N1,N2,N3,N4
[Net Topology]
set for N default connection attribute delay=0
set for N default attribute study_counter=3
DecisionMaker(actions=0,1)
StochasticSource(probability=0.1,value=2)
Max[DecisionMaker,StochasticSource]
Env[or]
I1[Env(contact_number=0,delay=1)]
I2[Env(contact_number=1,delay=1)]
I3[Env(contact_number=2,delay=1)]
I4[Env(contact_number=3,delay=1)]
N1[I2,I3,I4]
N2[I1,I3,I4](study_counter=4)
N3[I1,I2,I4]
N4[I1,I2,I3]
Пример 5.3.1. Спецификация сети.
Спецификация состоит из секций. Секция начинается с указания имени секции в квадратных скобках и состоит из операторов спецификации. В Meta секции собраны операторы, область применения которых – вся спецификация, т.е. все секции. Здесь, например, можно задать имена–синонимы для шаблонов. Во многих секциях может появляться оператор set. Обычно, его синтаксис таков:
set for <имя-приемника> <что-установить> <значение>.
Например, set for Neuron2 synonym N устанавливает имя-синоним N для шаблона Neuron2. В секциях Inputs и Outputs просто перечисляются входы и выходы сети. Самая большая секция, обычно, Net Topology, где описывается топология сети. Ссылка на элемент сети в спецификации состоит из двух слитных слов: указания имени типа элемента сети (или его синонима) и его некоторого порядкового номера, причем нумерация для каждого типа своя. Описание топологии состоит из операторов описания топологии, в которых указывается некоторый элемент сети, его входы в квадратных скобках, причем в круглых скобках после указания каждого входа может стоять ассоциативный список (т.е. список пар имя-значение) атрибутов связи, и, дополнительно, после перечисления входов, может быть, в круглых скобках ассоциативный список атрибутов элемента. Каждая связь двух элементов сети может характеризоваться некоторым множеством атрибутов связи. Например, атрибутом связи может быть синаптическая задержка. Каждый элемент сети понимает свой набор атрибутов связи, некоторое множество атрибутов связи обрабатывается ядром системы, и, как мы уже упомянули, каждый элемент сети понимает свой набор атрибутов (элемента сети), значения которых могут передаваться в списке атрибутов элемента.
В примере спецификации 5.1 используются имена некоторых встроенных шаблонов, например, Neuron2 или Brancher. Вообще говоря, ядром поддерживается некоторое множество встроенных базовых шаблонов и в языке есть конструкция для определения новых шаблонов через уже определенные или встроенные. Информация об уже определенных шаблонах хранится в специальном объекте БиблиотекаШаблонов, являющемся Синглетоном и имеющем методы для получения идентификатора шаблона по его имени, извлечения информации о шаблоне по его идентификатору, а также добавления / удаления шаблонов. Если КонструкторСети при чтении спецификации встречает имя шаблона или конструкцию определения нового шаблона, то он обращается к БиблиотекеШаблонов для, соответственно, получения информации о шаблоне по имени или для добавления нового шаблона. Таким образом, пользователь может создавать библиотеки своих шаблонов, определения которых хранятся, например, в файлах и при их использовании просто включать соотвествующие файлы в своих спецификациях с помощью конструкции языка, аналогичной «#include» в языке C / C++. Отметим, что библиотечные файлы шаблонов могут создаваться специальным инструментом, конструктором шаблонов.
5.4. Организация вычислений в сети.
После создания внутреннего представления сети в памяти в виде совокупности связанных между собой элементов сети, сеть готова к вычислениям. Вычисления инициируются с некоторого выбранного подмножества элементов сети, называемых выходами сети. Каждый элемент имеет свой метод, реализующий операцию данной вершины сети и результат которого интерпретируется как значение выходного сигнала или значение выхода. Аргументами этого метода являются значения выходов у входов элемента в предыдущие моменты времени, и, возможно, в текущий момент. При этом, естественно, возможен бесконечный цикл в случае неправильной спецификации сети. На этот случай в систему предполагается добавить некоторый предварительный анализатор корректности топологии сети. Распараллеливание здесь возможно при вычислении значений выходов для элементов одного порядка, поскольку они являются независимыми.
Так как параметр времени в систему введен явно, существует необходимость в сообщении каждому элементу о наступлении следующего такта вычислений. При получении такого сообщения, каждый элемент выполняет завершительные операции для данного такта либо может просто проигнорировать сообщение. В реализации механизма передачи сообщений использован объектный шаблон Цепочка Обработчиков [Gamma]. Суть его состоит в следующем. Предположим существует некоторая иерархия классов или цепочка, где каждый предшествующий класс является родительским для следующего, например ЭлементСети Нейрон Нейрон2. У ЭлементаСети определен (виртуальный в терминах языка C++) метод обработки сообщения обработать_сообщение(Сообщение). В этом методе у каждого класса при вызове определяется, может ли данный метод обработать данное сообщение. Если да, то выполняется обработка. Затем в любом случае вызывается метод обработки сообщения родительского класса, если он существует. Например, метод обработки сообщений у ЭлементаСети увеличивает счетчик тактов (счетчик времени) при получении сообщения СледующийТакт (потомок класса Сообщение). Объект СредаСКонечнымАвтоматом, являющийся потомком ЭлементаСети и КонечногоАвтомата при получении данного сообщения выполняет чтение входного слова, и, естественно, вызывает обработку сообщения для своих родительских классов.
5.5. Анализаторы работы сети.
Для отладки сетей часто необходимо знать разнообразную информацию о состояниии сети и отдельных ее элементов в некоторые моменты времени. Сети предполагаются гетерогенные, то есть состоящими из разных элементов-экземпляров классов-потомков ЭлементаСети, и состояние каждого элемента в некоторые моменты времени может характеризоваться, вообще говоря, некоторым своим набором параметров, помимо значения выходного и входного сигналов. Например, КА лучше охарактеризовать состоянием, в котором находится автомат. Поэтому схема была выбрана следующая: ЭлементСети является производным классом от Летописец, который имеет методы для записи объектов Событие в некоторую временную последовательность История, которую хранит каждый Летописец. В процессе работы сети каждый Летописец записывает в Историю один из своих или общих объектов подкласса Событие. Например, КА записывает помимо прочих событие СостояниеКА, в котором есть поле для указания состояния КА в данный момент времени. Каждый (потомок класса) АнализаторРаботыСети умеет обрабатывать Истории, извлекая оттуда необходимую информацию, и затем выдавая ее в удобном виде на экран. В примере 5.8.1 приведен результат работы программы, где изображена диаграмма выходных сигналов выбранных ЭлементовСети, имена которых выведены в первой строке диаграммы. Диаграмма получена как результат обработки Истории выбранных ЭлементовСети АнализаторомРаботыСети.