Skip to content

Egxr41k/ConsoleGames

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

©Egxr41k Software 2022

Консольная нейросеть для игры в крестики нолики

весь последущий текст будет свего рода документацией к даннной программе. Читайте это если ходите лучше ознакомиться с алгоритмами работы нейронных сетей

начнем с краткого пояснения для всех имеющихся классов: Program.cs - точка входа в приложение

Game.cs - это один из ключевых классов,
он содержит методы для игры в крестики нолики

Matrix.cs - содержит матрицу(двумерный массив служаций
игровым полем) и статичекие методы для управления/проверки значений в ней

DeepLearning.cs - класс реализовующий так называемое 
глубокое обучение посредством игр нейросети со случайными ходами

NeuralNetwork.cs - класс нейросети

Neuron.cs - содержит в себе набор весов
переменных хранящих значения
функцию активации и производную функции активации,
являеться структурной единицей для класса NeuralNetwork

примечания: позиция символа играющего это кордината в матрице так например позиция в ценртре поля, будет иметь индексы 1 1, где первый индекс означает номер строки а второй - номер столбика (изза того что счет элементов массива начинаеться с 0 первая строка/столбик соответсвенно имеют индекс 0)

режимы игры: для каждой из двух сторон можно выбрать игрока, это может быть человек, нейросеть или случайные ходы

структура нейросети: вся нейросеть состоит из трех методов представляюх разные ее части InputLayer HiddenLayers OutputLayer технически, этих слоев несществует, но сузествует массивы нейронов

InputNeurons - хранит в себе входные нейроны,
они нужны для передачи значений в нейросеть

HiddenNeurons - в отличии от InputNeurons, этот массив двумерный
второе измерение нужно для обозначения слоев нейронов

OutputNeurons - не сществует по следущей причине:
	поставленая задача требует от нейросети выход
	в виде двух целых чисел от 0 до 2 включительно.
	Изза того что нейросеть оперирует дробными числами от 0 до 1
	испольщовать два нейрона предствляющих инлексы не выйдет

поэтому инициальзацию выхода сети реальзует метод OutputLayer.
он находит наибольшеее значение на последнем скрытом слое
и записывает в индексы его позицию так,
если бы конечные значение нейронов последного скрытого слоя
были записаны в двумерный масив(строкку и столбик)

процесс обучения: по сути класс DeepLearning.cs являетьсмя лишь оберткой над nn.Backpropogation.

во время каждого хода нейросеть получает отклик, необходимый
для обучения, представленный переменной responce

данный вид обучения можно классифицировать как обучение с учителем,
хоть и не используеться классический датасет