Скачиваний:
0
Добавлен:
26.10.2025
Размер:
66.59 Кб
Скачать

Описание

Эта программа реализует гибридный подход к обучению персептронов для распознавания символов. Сначала проводится «базовое обучение» по правилу Хебба, затем веса корректируются с помощью генетического алгоритма (ГА). Ниже приводится подробное описание каждого скрипта и их взаимосвязи:

1. Program.cs

  • Основное назначение: Содержит точку входа (метод Main), которая организует проведение экспериментов, тестирование и демонстрацию итоговой модели.

  • Что происходит в программе:

    • Эксперименты: Для различных значений количества эпох базового обучения (массив baseTrainingEpochsArray) запускается серия экспериментов (по 10 запусков на каждое значение). Каждый эксперимент состоит из двух этапов:

      1. Базовое обучение: Метод BaseTrainPerceptron обучает персептрон с нулевыми начальными весами по правилу Хебба на обучающем наборе (который включает идеальные и шумовые примеры).

      2. Эволюция ГА: После базового обучения создаётся экземпляр 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 вызывается при демонстрации работы модели для распознавания введённых пользователем изображений.