Форум программистов, компьютерный форум CyberForum.ru

"Бинарный перцептрон" Не совсем просто =) P.S: для меня) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Использование динамических массивов http://www.cyberforum.ru/cpp-beginners/thread172428.html
Прошу вашей помощи в решении след задачи (не нужно мне, чтоб вы решали, а хотя б подсказали как все это организовать). Мне надо решить систему Дифф уравнений. Предмет - баллистика. Суть примерно в том, что летит летательный аппарат, на каждом шаге надо вычислять кучу параметров. В один момент (который естественно заранее мы вычислить не решая систему не можем), ЛА падает. Это и есть сигнал к...
C++ Алгоритмы сортировки массивов Всем привет, хочу для общего развития узнать все способы сортировки массивов.(массив произвольный) (метод пузырька я знаю) какой из них самый быстрый? я только начинаю учить С++ , поэтому прошу что бы программы выглядили попроще для понимания http://www.cyberforum.ru/cpp-beginners/thread172418.html
Найти количество отрицательных элементов массива C++
,состоящем из n элементов ,вычислить количество отрицательных элементов массива! Lavroff,надежда на теебя!!))
C++ Как подключить русский язык к турбо С
люди надо помощь. как подключить русский язык к турбо С. так что бы в прогах отображали рус букви. заранее спс.
C++ Удаление объекта по указателю. http://www.cyberforum.ru/cpp-beginners/thread172411.html
Конечно тема избитая, и я находил много решений, но проверить удаляються ли объекты не могу. Есть массив указателей на объекты Record *rec; Класс People наследник Record. В программе создаются объекты и указатели присваиваются элементам массива rec = new People(); Вопрос: как удалить объекты в конце программы? Или вообще надо не так хранить указатели?
C++ Для чего conio.h? объясните для чего этот файл?и было бы лучше чтобы объяснили для чего и другие заг. файлы например math.h-математические выражения там...к примеру,буду рад ответам подробнее

Показать сообщение отдельно
Stowyn
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 7
05.10.2010, 16:26     "Бинарный перцептрон" Не совсем просто =) P.S: для меня)
Цель: Написать программу "Бинарный перцептрон".
Алгоритм обучения:
1) Логическая функция T=x1+x2*x3 (xi=0 или 1)
2) На вход подается образ Х.
3) Каждый компонент Х = {x1..xn} умножается на вектор коефициента W={w1..wn}
4) Находим "активатор" a=X*W
5) Если a>teta (teta=0.2...0.8 включительно, в примере ниже был взят 0.3), то выход Y = 1, если а<=teta Y=0
6) Сравнение верного значения логической функции T и Y; Если T=Y тогда переходим к следущему образу, если T!=Y, тогда:
Sigma=T-Y; delta(i)=nu*sigma*xi;
nu - коефициент обучения ( nu(1)=0.2, nu(2)=0.4, nu(3)=0.6 )
wi(n+1)=wi(n)+delta(i);
7) Если для всех образов Sigma=0, то "the end", если нет - снова подать на вход все образы Х, но с скоректироваными коефициентами.

8) nu1=0.2, nu2=0.4, nu3=0.6

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <stdlib.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
 
//---------------------------------------------------------------------------
#pragma argsused
//bool a;
double w1,w2,w3,w4,mu1,mu2,mu3,sigma[9], delta1,delta2,delta3,rez1,rez2,rez3;
int i, j, y[9];
int z=0;
bool m[9][3], t[9];
double a[9],Ta[9];
double md[9][3];
 
 
// Функция отображения русских символов
char* rus(char* st)
{
    unsigned char* p = st;  // при объявлении символов как char русские буквы
                                      // кодируются отрицательными числами
    while( *p ){
        if(*p >= 192) // здесь русская буква
            if(*p <= 239)
               *p -= 64;
            else
               *p -= 16;
        p++;
     }
    return st;
}
 
int main(int argc, char* argv[])
{
/*
cout<<rus("Введите а")<<endl;
cout<<"a=";
cin>>a;
if (a==1) {a=0;}
else a=1;
cout<<rus("Инверсное a=")<<a;
*/
 
w1=0.1;
w2=0.2;
w3=0.3;
w4=0.1;
 
mu1=0.2;
mu2=0.4;
mu3=0.6;
 //Заполнение бинарного масива
 m[1][1]=0; m[1][2]=0; m[1][3]=0;
 m[2][1]=0; m[2][2]=0; m[2][3]=1;
 m[3][1]=0; m[3][2]=1; m[3][3]=0;
 m[4][1]=0; m[4][2]=1; m[4][3]=1;
 m[5][1]=1; m[5][2]=0; m[5][3]=0;
 m[6][1]=1; m[6][2]=0; m[6][3]=1;
 m[7][1]=1; m[7][2]=1; m[7][3]=0;
 m[8][1]=1; m[8][2]=1; m[8][3]=1;
 
 
//i - строка бинарного масива
 
        //for (i=1;i<=8;i++)
        for (i=1;i<=8;i++)
        {
          t[i]=m[i][1]+m[i][2]*m[i][3];
          a[i]=m[i][1]*w1+m[i][2]*w2+m[i][3]*w3+w4;
          if (a[i]>0.3)
                  {
                  y[i]=1;
                  Ta[i]=t[i];
                     if (y[i]!=Ta[i])
                        {
                        sigma[i]=Ta[i]-y[i];
                        md[i][1]=m[i][1];
                        md[i][2]=m[i][2];
                        md[i][3]=m[i][3];
                        delta1=mu1*sigma[i]*md[i][1];
                        delta2=mu2*sigma[i]*md[i][2];
                        delta3=mu3*sigma[i]*md[i][3];
                        w1=w1+delta1;
                        w2=w2+delta2;
                        w3=w3+delta3;
                        }
                  }
           else
               {
               y[i]=0;
               Ta[i]=t[i];
                if (y[i]!=Ta[i])
                       {
                       sigma[i]=Ta[i]-y[i];
                       md[i][1]=m[i][1];
                       md[i][2]=m[i][2];
                       md[i][3]=m[i][3];
                       delta1=mu1*sigma[i]*md[i][1];
                       delta2=mu2*sigma[i]*md[i][2];
                       delta3=mu3*sigma[i]*md[i][3];
                       w1=w1+delta1;
                       w2=w2+delta2;
                       w3=w3+delta3;
                       }
                 }
               
           };
 
                getch();
        };
Много лишнего. Как и на каком этапе производить проверку всех sigma(i)!=0 &?
Или предложите свой вариант =)

Добавлено через 15 часов 24 минуты
Нет знатоков или желающих помочь?(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru