- •Реализация персептрона:
- •2.1. Точка входа в программу Program.Cs
- •2.2. Входные данные InputData.Cs
- •2.3. Реализация персептрона по методу Хебба Perceptron.Cs
- •2.4 Вывод информации OutputInformation.Cs
- •Описание
- •1. Точка входа – Program.Cs
- •2. Входные данные – InputData.Cs
- •3. Реализация персептрона – Perceptron.Cs
- •4. Вывод информации – OutputInformation.Cs
- •Взаимосвязь скриптов
- •Реализация генетического алгоритма:
- •1) Скрипт Program.Cs
- •2) Скрипт Population.Cs
- •3) Скрипт Individual.Cs
- •4) Скрипт Gen.Cs
- •5) Скрипт EvolutionManager.Cs
- •6) Скрипт Chromosome.Cs
- •Описание
- •Взаимосвязь между скриптами
- •Нейроэволюционный алгоритм:
- •1) Скрипт Program.Cs
- •2) Скрипт gaEvolutionManager
- •3) Скрипт TrainingSample.Cs
- •4) Скрипт OutputInformation.Cs
- •5) Скрипт InputData.Cs
- •6) Скрипт gaPerceptronIndividual.Cs
- •Описание
- •Общая схема работы и взаимосвязь модулей
- •Тестирование и демонстрация:
Описание
Эта программа реализует гибридный подход к обучению персептронов для распознавания символов. Сначала проводится «базовое обучение» по правилу Хебба, затем веса корректируются с помощью генетического алгоритма (ГА). Ниже приводится подробное описание каждого скрипта и их взаимосвязи:
1. Program.cs
Основное назначение: Содержит точку входа (метод Main), которая организует проведение экспериментов, тестирование и демонстрацию итоговой модели.
Что происходит в программе:
Эксперименты: Для различных значений количества эпох базового обучения (массив baseTrainingEpochsArray) запускается серия экспериментов (по 10 запусков на каждое значение). Каждый эксперимент состоит из двух этапов:
Базовое обучение: Метод BaseTrainPerceptron обучает персептрон с нулевыми начальными весами по правилу Хебба на обучающем наборе (который включает идеальные и шумовые примеры).
Эволюция ГА: После базового обучения создаётся экземпляр GAEvolutionManager, который с помощью генетического алгоритма корректирует веса, добиваясь улучшения качества.
Тестирование: Функция TestModels проверяет качество полученных моделей на разных типах данных (идеальные, шумовые и смешанные примеры).
Демонстрация: После экспериментов пользователь может ввести матрицу (5×5) для идеального и двух шумовых изображений, после чего программа распознаёт символ, используя итоговые модели. Для вывода результатов используется класс OutputInformation.
Связь с другими скриптами:
Использует данные из InputData (для получения обучающих и шумовых примеров, а также пользовательского ввода).
Применяет методы из GAEvolutionManager для эволюции весов.
Для печати результатов задействует OutputInformation.
Модель представлена объектами типа GAPerceptronIndividual (описаны в отдельном скрипте).
2. GAEvolutionManager.cs
Основное назначение: Управляет процессом генетической эволюции для корректировки весов персептронов.
Что происходит в классе:
Инициализация популяции: Метод InitPopulation создаёт начальную популяцию особей, где каждая особь (объект класса GAPerceptronIndividual) инициализируется базовыми весами с небольшим шумом.
Эволюция: Метод Evolve запускает цикл поколений, в котором каждая новая популяция создаётся с использованием операций селекции (турнирный выбор), кроссовера (BLX‑a‑b) и мутации. Цикл завершается, когда достигается максимальное число поколений или ошибка (fitness) становится меньше порогового значения.
Популяция: Внутри GAEvolutionManager используется вспомогательный класс GAPerceptronPopulation, который управляет списком особей и предоставляет методы для выбора пары родителей.
Связь с другими скриптами:
Использует класс GAPerceptronIndividual для создания и оценки отдельных решений.
Передаёт параметры (например, базовые веса, обучающий набор) из Program.cs для дальнейшей эволюции.
3. TrainingSample.cs
Основное назначение: Определяет структуру обучающего примера.
Что содержит:
Input: Одномерный массив длины 25 (представляющий изображение 5×5).
Label: Метка символа (например, «├», «┤» и т.д.) или строка "None" для шумовых примеров.
Связь с другими скриптами:
Используется во всех частях программы: при формировании обучающего набора (в InputData.cs), при обучении персептронов (в Program.cs и GAPerceptronIndividual.cs) и для тестирования.
4. OutputInformation.cs
Основное назначение: Содержит методы для форматированного вывода информации на консоль.
Что делает:
Выводит весовые матрицы персептронов в виде матрицы 5×5.
Показывает результаты тестирования, включая распознанный символ и соответствующую весовую матрицу.
Форматирует вводимые матрицы для удобства пользователя.
Связь с другими скриптами:
Вызывается из Program.cs для демонстрации результатов работы моделей.
Принимает данные (например, веса из GAPerceptronIndividual) для отображения.
5. GAPerceptronIndividual.cs
Основное назначение: Представляет отдельного индивида (персептрон) в генетическом алгоритме.
Что содержит:
Weights: Список весов (хромосома), определяющий модель.
TargetSymbol: Символ, для которого обучается данный персептрон.
Fitness: Значение ошибки (процент неправильных распознаваний) на обучающем наборе.
Основные методы:
Predict: Функция активации, возвращающая 1, если сумма взвешенных входов неотрицательная, иначе 0.
EvaluateFitness: Оценка качества модели на обучающих примерах.
Mutation: Осуществляет случайное изменение одного из весов с заданной вероятностью.
BLX‑a‑b Crossover: Статический метод, реализующий операцию кроссовера для создания двух новых особей на основе родительских хромосом.
Связь с другими скриптами:
Используется в GAEvolutionManager для формирования популяций и проведения эволюции.
Применяется в функции тестирования и распознавания в Program.cs.
6. InputData.cs
Основное назначение: Обеспечивает входные данные для обучения и тестирования.
Что содержит:
GetSymbolSamples: Метод, возвращающий список идеальных обучающих примеров для различных символов (каждый символ представлен матрицей 5×5 с фиксированными значениями).
GenerateNoiseSample: Генерирует случайный (шумовой) обучающий пример, где каждый элемент матрицы принимает значение 0 или 1 с равной вероятностью.
ReadUserInput: Позволяет пользователю вводить матрицу 5×5 с клавиатуры для тестирования модели.
Связь с другими скриптами:
Данные из GetSymbolSamples и GenerateNoiseSample используются в Program.cs для формирования обучающего набора.
Метод ReadUserInput вызывается при демонстрации работы модели для распознавания введённых пользователем изображений.
