using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Windows.Forms;
using
System.IO;
using
System.Runtime.Serialization.Formatters.Binary;
namespace
WindowsFormsApplication1
{
public
partial class
FRMBotsPopulation :
Form
{
public
Layer l;
public
FRMBotsPopulation()
{
InitializeComponent();
}
private
void
BTNTest_Click(object
sender,
EventArgs e)
{
LBNeurons.Items.Clear();
for
(int
i =
0;
i <
l.count;
i++)
LBNeurons.Items.Add(l.neurons[i].output);
//отобразим в списке выходные
сигналы нейронов
label1.Text
=
Convert.ToString(l.count);
}
private
void
BTNSave_Click(object
sender,
EventArgs e)
{
//FileStream
FS = new FileStream("D:/1/nr.ga",FileMode.Create,FileAccess.Write,FileShare.None);
//BinaryFormatter
BF = new BinaryFormatter();
//BF.Serialize(FS,n);
}
private
void
FRMBotsPopulation_Load(object
sender,
EventArgs e)
{
l =
new
Layer(3);
//создали
слой нейросети
//добавили в слой нейроны
l.neurons[0]
=
new
Neuron(4);
l.neurons[1]
=
new
Neuron(2);
l.neurons[2]
=
new
Neuron(5);
}
private
void
BTNLoad_Click(object
sender,
EventArgs e)
{
//FileStream
FS = new FileStream("D:/1/nr.ga", FileMode.Open, FileAccess.Read,
FileShare.None);
//BinaryFormatter
BF = new BinaryFormatter();
//n=(Neuron)BF.Deserialize(FS);
//n.out_weights_to_list(LBInputs);
//label1.Text
= Convert.ToString(n.count);
}
private
void
LBNeurons_SelectedIndexChanged(object
sender,
EventArgs e)
{
//отобразим
содержимое текущего нейрона
int
ind =
LBNeurons.SelectedIndex;
l.neurons[ind].out_inputs_to_list(LBInputs);
l.neurons[ind].out_weights_to_list(LBWeights);
}
}
[Serializable]
public
class
Neuron
{
public
double[]
inputs;
//входные
сигналы
public
double
output;
//выходной
сигнал
public
double[]
weights;
//веса
нейронов
public
int[]
input_indexes;
//индексы
входных сигналов (?)
public
int
count;
//количество
входов
public
int
prev_layer;
//предыдущий
слой
static
Random Rnd =
new
Random();
//генератор
случайных чисел
public
Neuron(int
a_count)
{
//создадим
массивы весов, входных сигналов и
индексов входящих сигналов
inputs =
new
double[a_count];
weights =
new
double[a_count];
input_indexes =
new
int[a_count];
//генерация
нейрона (веса заполняються случайными
числами)
for
(int
i =
0;
i <
a_count;
i++)
{
inputs[i]
=
0;
weights[i]
=
(double)Rnd.Next(10000)
/
10000;
}
count =
a_count;
}
//вычисляем
выходнйо сигнал (сумма входов помноженных
на веса)
public
void
calk()
{
int
i =
0;
double
res =
0;
foreach
(double
inp in
inputs)
{
res =
res +
inp *
weights[i];
i++;
}
output =
res;
}
//отобразить
веса в поел списка
public
void
out_weights_to_list(ListBox
a_list_box)
{
a_list_box.Items.Clear();
for
(int
i =
0;
i <
count;
i++)
a_list_box.Items.Add(weights[i]);
}
//отобразить
входы в поле списка
public
void
out_inputs_to_list(ListBox
a_list_box)
{
a_list_box.Items.Clear();
for
(int
i =
0;
i <
count;
i++)
a_list_box.Items.Add(inputs[i]);
}
}
//слой
нейрона
public
class
Layer
{
public
Neuron[]
neurons;
public
int
count;
public
Layer(int
a_count)
{
neurons =
new
Neuron[a_count];
count =
a_count;
}
//отобразить
слой в поле списка
public
void
out_to_list(ListBox
a_list_box)
{
a_list_box.Items.Clear();
for
(int
i =
0;
i <
count;
i++)
a_list_box.Items.Add(neurons[i].output);
}
}
//класс
нейронной сети
public
class
NeuralNet
{
public
Layer[]
layers;
public
NeuralNet(int
a_count)
{
layers =
new
Layer[a_count];
}
}
}
}
|