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 Neuron n;
public
FRMBotsPopulation()
{
InitializeComponent();
}
private
void
BTNTest_Click(object
sender,
EventArgs e)
{
LBTest.Items.Clear();
//очистим список поля списка
for
(int
i =
0;
i <
n.count;
i++)
LBTest.Items.Add(n.weights[i]);
//отобразим веса нейронов в
поле списка
}
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)
{
//при создании формы создаем
нейрон
n=new
Neuron();
n.init(5);
}
private
void
BTNLoad_Click(object
sender,
EventArgs e)
{
//при
нажатии кнопочки "Load" загружаем
нейрон и отображаем его в поле списка
FileStream FS =
new
FileStream("D:/1/nr.ga",
FileMode.Open,
FileAccess.Read,
FileShare.None);
BinaryFormatter BF =
new
BinaryFormatter();
n=(Neuron)BF.Deserialize(FS);
LBTest.Items.Clear();
for
(int
i =
0;
i <
n.count;
i++)
LBTest.Items.Add(n.weights[i]);
}
}
[Serializable]
public
class
Neuron
{
public
double[]
inputs;
//входящие сигналы нейрона
public
double
output;
//исходящий сигнал нейрона
public
double[]
weights;
//весовые коэффициенты
нейрона
public
int
count;
//количество
входов нейрона
static
Random Rnd =
new
Random();
//генератор
случайных чисел, поле статическое, этот
объект единый для всех нейронов
public
void
calk()
{
int
i =
0;
double
res =
0;
//вычисляем
результат путем сложения входных
сигналов, умноженных на весовые
коэффициенты
foreach
(double
inp in
inputs)
{
res =
res +
inp *
weights[i];
i++;
}
output =
res;
}
public
void
init(int
a_count)
{
inputs =
new
double[a_count];
weights =
new
double[a_count];
//инициализируем
весовые коэффициенты случайными
числами
for
(int
i =
0;
i <
a_count;
i++)
{
inputs[i]
=
0;
weights[i]
=
(double)Rnd.Next(10000)
/
10000;
}
count =
a_count;
}
}
}
|