Реализация гибридного сочетания ГА+ИНС
Реализация требуемого сочетания ГА+НС осуществляется с помощью классов пространства имен NNetGATraining (Рис.2.3.).
Рис.2.3. Диаграмма классов пространства имен NNetGATraining
Центральным классом здесь является класс NeuroNetChromosome, производный от класса RealChromosome и реализующий необходимую дополнительную специфику.
Главной особенностью этого класса является его способность вычислять функцию приспособленности как функционал ошибки нейронной сети на заданном обучающем множестве.
Подробно рассмотрим, как создаются объекты этого класса:
public NeuroNetChromosome([] netStructure,[] netWeights,pActFunction,alpha,trainingSet)
: base(netWeights, alpha)
{.netStructure = netStructure;.netWeights = netWeights;= pActFunction; net = MakeNet();
//вычисление функции приспособленности как ошибки сети на обучающем множестве
Trainer trainer = new Trainer(net, trainingSet); = trainer.NetError();
}
Конструктор получает параметр netWeight - это массив вещественных чисел, который в этом классе выполняет 2 функции:
· является фенотипом РГА-хромосомы (поэтому он передается в базовый конструктор класса RealChromosome);
· является набором весов нейронной сети, которую представляет данный объект NeuroNetChtomosome.
Конструктор на основании этого массива создает соответствующую сеть. Для этого конструктор получает множество дополнительных параметров.
Целочисленный массив netStructure определяет топологию сети. Например, если он содержит элементы 4, 2 и 3, то это значит, что сеть состоит из трех слоев: в первом - 4 нейрона, во втором - 2, и в третьем -3.
Закрытый метод MakeNet создает на основе этой топологии и других дополнительных параметров нейронную сеть с заданными в netWeights весами.
Теперь остается только вычислить функцию приспособленности такой хромосомы, как функционал ошибки сети (2 последние строчки конструктора).
Еще один специфический метод класса NeuroNetChtomosome - переопределяет генетическую операцию скрещивания:
public IChromosome CrossOver(IChromosome chr)
{rChr= (RealChromosome)(base.CrossOver(chr));new NeuroNetChromosome(,.PhenoAttributes,,,);
}
Класс NNPopulationBuilder создает первоначальную популяцию из хромосом-нейросетей.