Программирование - это просто
Advertisement
Главная arrow Уроки программирования arrow Генетический алгоритм (экспериментальный проект) arrow Генетический алгоритм. Шаг 5. Заготовки для программирования нейросети (Neuron, C#)
20.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Генетический алгоритм. Шаг 5. Заготовки для программирования нейросети (Neuron, C#) Печать E-mail
Автор megabax   
19.02.2011 г.
New Page 1

Генетический алгоритм. Шаг 5. Заготовки для программирования нейросети (Neuron,  C#)

Все статьи по данной теме.

И так, заготовка для класса нейрона уже есть. Пора подумать, как объединить их в нейронную сеть. Думаю, для этого понадобиться сам класс нейронной сети NeuralNet. Нейроны в сети будут располагается слоями, поэтому понадобиться еще класса Layer. Пока точно не знаю, как будут реализовываться связи. Скорее всего, в класс нейрона добавлю массив ссылок на входные сигналы, или наоборот, на объекты, куда сигнал будет поступать. А пока привожу результат своих "творческих мук":

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];

        }

    }

 

}

 

}

.

А вот форма*:

Генетический алгоритм. Шаг 5. Заготовки для программирования нейросети (Neuron,  C#)

 

Ладно, начало есть. Конец будет. Но, прежде чем продолжить кодирование, стоит вообще сначала подумать, а как будут в нейронной сети кодироваться торговые сигналы? Но это уже тема следующей статьи - да, опять будут разглагольствования. 

 

Все статьи по данной теме.

 


Скриншоты, помеченные знаком *, являются цитатами и иллюстрациями  программного продукта "Microsoft Visual Studio 2010 Professional", авторское право на который принадлежит корпорации Microsoft.. 


 

 

 

Последнее обновление ( 29.06.2011 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги