- •Реализация персептрона:
- •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
- •Описание
- •Общая схема работы и взаимосвязь модулей
- •Тестирование и демонстрация:
2.2. Входные данные InputData.Cs
using System;
using System.Collections.Generic;
namespace PerceptronSymbols
{
// Класс для представления обучающего примера.
public class TrainingSample
{
public int[] Input; // одномерный массив длины 25 (5x5)
public string Label; // метка символа
public TrainingSample(int[] input, string label)
{
Input = input;
Label = label;
}
}
public static class InputData
{
static Random rnd = new Random();
// Метод возвращает список шаблонов для распознаваемых символов.
public static List<TrainingSample> GetSymbolSamples()
{
var samples = new List<TrainingSample>();
// Символ "├": вертикальная линия слева и горизонтальная линия в центре
int[] symbol1 = new int[]
{
1, 0, 0, 0, 0,
1, 0, 0, 0, 0,
1, 1, 1, 1, 1,
1, 0, 0, 0, 0,
1, 0, 0, 0, 0
};
samples.Add(new TrainingSample(symbol1, "├"));
// Символ "┤": вертикальная линия справа и горизонтальная линия в центре
int[] symbol2 = new int[]
{
0, 0, 0, 0, 1,
0, 0, 0, 0, 1,
1, 1, 1, 1, 1,
0, 0, 0, 0, 1,
0, 0, 0, 0, 1
};
samples.Add(new TrainingSample(symbol2, "┤"));
// Символ "┬": горизонтальная линия сверху и вертикальная линия по центру
int[] symbol3 = new int[]
{
1, 1, 1, 1, 1,
0, 0, 1, 0, 0,
0, 0, 1, 0, 0,
0, 0, 1, 0, 0,
0, 0, 1, 0, 0
};
samples.Add(new TrainingSample(symbol3, "┬"));
// Символ "┴": горизонтальная линия снизу и вертикальная линия по центру
int[] symbol4 = new int[]
{
0, 0, 1, 0, 0,
0, 0, 1, 0, 0,
0, 0, 1, 0, 0,
0, 0, 1, 0, 0,
1, 1, 1, 1, 1
};
samples.Add(new TrainingSample(symbol4, "┴"));
// Символ "┼": пересечение горизонтальной и вертикальной линий
int[] symbol5 = new int[]
{
0, 0, 1, 0, 0,
0, 0, 1, 0, 0,
1, 1, 1, 1, 1,
0, 0, 1, 0, 0,
0, 0, 1, 0, 0
};
samples.Add(new TrainingSample(symbol5, "┼"));
// Символ "═": двойная горизонтальная линия
int[] symbol6 = new int[]
{
0, 0, 0, 0, 0,
1, 1, 1, 1, 1,
0, 0, 0, 0, 0,
1, 1, 1, 1, 1,
0, 0, 0, 0, 0
};
samples.Add(new TrainingSample(symbol6, "═"));
// Символ "║": двойкая вертикальная линия
int[] symbol7 = new int[]
{
0, 1, 0, 1, 0,
0, 1, 0, 1, 0,
0, 1, 0, 1, 0,
0, 1, 0, 1, 0,
0, 1, 0, 1, 0
};
samples.Add(new TrainingSample(symbol7, "║"));
return samples;
}
// Генерация шумового (случайного) образца размером 5x5.
public static TrainingSample GenerateNoiseSample()
{
int[] pattern = new int[25];
for (int i = 0; i < 25; i++)
{
pattern[i] = rnd.NextDouble() > 0.5 ? 1 : 0;
}
return new TrainingSample(pattern, "None");
}
// Чтение пользовательского ввода – матрица 5x5.
public static int[] ReadUserInput()
{
int[] userInput = new int[25];
for (int i = 0; i < 5; i++)
{
string? line = Console.ReadLine();
if (string.IsNullOrWhiteSpace(line))
{
Console.WriteLine("Ошибка ввода. Попробуйте снова.");
i--;
continue;
}
string[] parts = line.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length != 5)
{
Console.WriteLine("Некорректный ввод. Ожидалось 5 значений. Повторите ввод строки.");
i--;
continue;
}
for (int j = 0; j < 5; j++)
{
userInput[i * 5 + j] = parts[j] == "1" ? 1 : 0;
}
}
return userInput;
}
}
}
