поговорим о ЛОНИИС

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » поговорим о ЛОНИИС » КОММЕНТАРИИ к ПРОГРАММАМ » Программа АКСОН


Программа АКСОН

Сообщений 1 страница 2 из 2

1

Программа АКСОН

1. Общее
2. Нейронная сеть – граф
3. Активность нейронов
4. Входной сигнал
5. Итерации
6. Конец итераций.
7. Результаты
8. Скачать программу АКСОН

Приложение 1
const
Приложение 2
матрица f
Приложение 3
матрица s
Приложение 4
матрица p
Приложение 5
edit 1 -3
Приложение 6
программа WORD

1. Общее
Разум у живого реализован на основе нейронных сетей.
То есть нейронов, передающих между собой сигналы возбуждения (активности).
В технике появились аналоги нейронных сетей живого.
Такие сети наследовали только общие принципы нейронных сетей живого.
Аналоги не связаны биологическими ограничениями.
Ниже будет описана программа АКСОН.
Ранее выставлялись программы  1-аксон и 3 – аксон.
Выявлена ошибка и сняты с Форума.

2. Нейронная сеть – граф
Нейронной сети соответствует ориентированный граф – орграф.
Нейрону ставится в соответствие вершина орграфа.
Ниже нейрон и вершина графа одинаковое содержание.
Число вершин – const: n.
Дуга между вершинами соответствует связи аксон – дендрит.
Между каждой парой может в каждом направление быть несколько дуг или не одной. В конкретной программе от 0 до a1 -1.
const: a1.
Число дуг определяется случайно.
Орграф может быть полносвязным.
Из каждой вершины можно достичь всех вершин по ориентации (направлению) дуг.
Орграф может быть частично связным, когда одни вершины имеют пути ко всем другим вершинам, другие только к части вершин. При построении орграфа в конкретной задаче проверка связности графа не проводилась. Для отдельных пар вершин по одному или двух направлениях случайным образом в конкретной программе задавалось отсутствие связи.
const: m.

3. Активность нейронов
Каждому нейрону при расчётах присваивается вес (активность).  Вес может быть со знаком плюс или минус. Можно вводить ограничения на вес активности. В конкретной программе вес – положительная величина, не более const: z.

4. Входной сигнал
В конкретной программе предусмотрены два вида входного сигнала.
Случайный и детерминированный. Переключатель -  const:k.
К= 1 – случайный входной сигнал: const a2
К=2 – детерминированный входной сигнал: const a3
Детерминированный входной сигнал подается одного веса на несколько нейронов.
Период подачи – const v.
Входной сигнал – матрица f[1..n].
f[i] – величина входного сигнала на нейрон –i.

5. Итерации

В работы программы по основному цикл, переменная i, последовательно заполняется матрицы p[1..t1,1..n]. p[i,j] – вес нейрона j после итерации i.
Каждая итерация из двух шагов.
Шаг 1. Вес каждого нейрона увеличивается на сумму дуг от нейронов весом больше нуля. Если сумма дуг превышает const z, вес нейрона равен z.
Шаг 2. Из веса всех нейронов вычитается const b.
Отрицательные величины заменяются на нулевые.

6.  Конец итераций
Максимальное число итераций - const t1.
Если в ходе выполнения итераций на трех последовательных итерациях вес всех нейронов не меняется, вычисления заканчиваются.

7.  Результаты.
Число итераций –c.
Номер последней итерации из трех последовательных с одинаковыми весами нейронов –ww.
uu  = 777, если в трёх последовательных итерациях нейроны не меняли веса.
Для последней итерации
r – число нейронов с весом 0.
e – число нейронов с весом x
cc - число нейронов с весом a3
g - число нейронов с весом, отличным от трёх вышеупомянутых

Вычисления показали.
В большинстве расчётов через 50 -250 итераций все нейроны принимают постоянные величины.
Пока неясно. Будут ли постоянные величины нейронов после большого числа итераций.
Результаты расчётов: приложения 1-5.

8. Скачать программу АКСОН
Программа АКСОН на Дельфи 7.
Ввод в программе –const.
Распечатка программы в WORD: Приложение 6

Скачать программу АКСОН

https://yadi.sk/d/yxwCem_OyeEenQ

Приложение 1
const

http://forumupload.ru/uploads/000d/c4/47/3/t558779.jpg
Приложение 2
матрица f

http://forumupload.ru/uploads/000d/c4/47/3/t36930.jpg

Приложение 3
матрица s

http://forumupload.ru/uploads/000d/c4/47/3/t741145.jpg

Приложение 4
матрица p

http://forumupload.ru/uploads/000d/c4/47/3/t575839.jpg

Приложение 5
edit 1 -3

http://forumupload.ru/uploads/000d/c4/47/3/t536435.jpg

Приложение 6
программа WORD

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TForm1 = class(TForm)

    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button5: TButton;
    Label1: TLabel;
    StringGrid2: TStringGrid;
    StringGrid3: TStringGrid;
    StringGrid4: TStringGrid;
    Button4: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Edit3: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label7: TLabel;
    Label6: TLabel;

    procedure Button1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

          const

      n =20;// ÷èñëî íåéðîíîâ
      t1 =50 ;//  âðåìÿ ðåàêöèè íåéðîíîâ
       a1 = 70;// âåðîÿòíîñòü ñâÿçè âêñîí - äåíäðèò
       a2 = 50;// âû÷èñëåíèå âõîäîãî ñëó÷àéíãî âõîäíîãî ñèãíàëà
        a3 =90;//   âû÷èñëåíèå  äåòåðìèíèðîâàííîãî âõîäíîãî ñèãíàëà
        k=2;//  ïåðåêëþ÷àòåëü òèïà âõîäíîãî ñèãíàëà.
        b=18;//  //ôîðìèðâàíèå âåëè÷èíû çàáûâíèÿ
       //  y=0; //  ðåçåðâ
        v=20;//   ôîðìèðîâàíèå äåòåðìèíèðîâàíîãî âõîäíîãî ñèãíàëà
        m=6;//   îòñóòñòâèå ñâÿçè ìæäó íåéðîíàìè
        z= 60;  // //   ììàêñèìàëüíûé âåñ íåéðîà

      var
       Tick: Cardinal;

s:array [1..n, 1 ..n] of integer;// ñâÿçè àêñîí - äåíäðèòû
     p : array [1..t1,1..n] of integer;// ñîñòîÿíèå íåéðîíîâ
     f :  array [1..n] of integer;// ñîñòîÿíèå âõîäíîãî ñèãíàëà
  a, u, x, t, c, b1,  d1,  d, g, q,i,j,h,i1,i2 : integer; //
j1,j2,j3,j4,j5,j6,j7,j8, i3,i4,i5,i6,i7,i8,i0: integer; //
   w, e,z1,z2, z3: integer;//
m1 ,m2,m3,m4,m5, m6,m7 ,m8: integer;//
t3: integer;
    ia, ib,ic, id ,it, ja, jb, jc, jd ,jt:  integer;//
zz ,ss,  vv, sss, uu ,kk  :integer;//
   r, r1, r2, r3, r4, r5, r6, r7, r8, r9 :  integer;//
         ff ,tt ,c1, g1,cc,ccc,ww:  integer;//
         l1, l2 ,l3,l4: variant;//
procedure TForm1.Button1Click(Sender: TObject);
// îêàíòîâêà
begin

    for q:=1 to n //íóìåðàöèÿ ïî ãîðèçîíòàëè â òàáë ¹1 ,
     do StringGrid1.Cells[q,0]:=IntToStr(q);
       for q:=1 to 5   // íóìåðàöèÿ ïî âåðòèêàëè  â òàáë ¹1 ,
     do   StringGrid1.Cells[0,q]:=IntToStr(q);

   for q:=1 to n //íóìåðàöèÿ ïî ãîðèçîíòàëè â òàáë ¹2,
     do StringGrid2.Cells[q,0]:=IntToStr(q);
       for q:=1 to t1   // íóìåðàöèÿ ïî âåðòèêàëè  â òàáë ¹2 ,
     do   StringGrid2.Cells[0,q]:=IntToStr(q);

             for q:=1 to n //íóìåðàöèÿ ïî ãîðèçîíòàëè â òàáë ¹4,
     do StringGrid4.Cells[q,0]:=IntToStr(q);
       for q:=1 to n   // íóìåðàöèÿ ïî âåðòèêàëè  â òàáë ¹4 ,
     do   StringGrid4.Cells[0,q]:=IntToStr(q);
                end;

procedure TForm1.Button2Click(Sender: TObject);
           begin
        for i:=1 to n do
        for j:= 1 to n do
        if i<>j  then
        begin s[i,j] := random ( a1);
                      h:= random (m);
             if h>3 then s[i,j] := 0;
           end;
                      if k=1 then
        for j:= 1 to n do
         f[j] := random ( a2);

                     if k=2 then
                     for j:=1 to n  do
                    begin
                      W:=w+1;
                       d:=  w mod v ;
                         if d = 0 then f[j] :=a3;
                         if d> 0 then f[j] := 0;
                      end;

                //  Îñíîâíîé öèêë
                for i:=1  to  t1 do
                begin
                 c:= c+1;
                   Form1.Caption:=IntToStr(GetTickCount-Tick);

               for j:=1 to n   do
                p[1,j] := f[j] ;

               if i>= 2 then begin
        for ia:= 1 to n do
         for ib := 1 to n  do
       if     p[i-1,ib]> 0  //
        then if ib<>ia then
       begin
        p[i,ia]:=  p[i-1,ia]+ s[ib ,ia];
        end;
               for it := 1 to n   do
             if p[i,it]>z then  p[i,it]:=z;

                  for jt:= 1 to n  do    begin
             p[i,jt] :=p[i,jt]-b ;
               if p[i,jt]<0 then p[i,jt] := 0;
                         end;
        end;
            cc:=0;
            ccc:=0;
            w:=0;
             x:=0;
             u:=0;
             r:=0;
             e:=0;
           g:=0;
             g1:=0;
             l1:=0;
             l2:=0;
             l3:=0;
             l4:=0;
            kk:=0;

            for ic:=1 to n  do  begin
            if p[c-3,ic]= 0 then u:= u +1;
            if p[c-3,ic]=(z-b) then x:= x +1;
             if  p[c-3,ic]= a3 then ccc:= ccc +1;
               if   ( ((p[c-3,ic]<>0) and ( p[c-3,ic]<>z-b))
                   and  ( p[c-3,ic]<>a3 ))
               then g1:= g1+1;

            if p[c,ic]= 0 then r:= r +1;
               if p[c,ic]= (z-b) then e:= e +1;
               if  p[c,ic]= a3 then cc:= cc +1;
               if   ( ((p[c,ic]<>0) and ( p[c,ic]<>z-b))
                   and  ( p[c,ic]<>a3 ))
               then g:= g+1;

                Form1.Caption:=IntToStr(GetTickCount-Tick);
              if  (( p[c-3,ic]<>p[c-1,ic] )
               or(p[c-1,ic]<>p[c,ic]) )then kk :=1;
          end;
             if kk =0  then begin uu:=777;ww:=c-1; break;end;
           end;   //end;
            l1:=  r/n;
            l2:= e/n;
             l3 := cc/n;
             l4 := g/n;

       for i:=1 to n  do
       for j:=1 to n   do
            StringGrid4.Cells[j,i]:=
   IntToStr( s[i,j]);

       for j:= 1 to n   do
   StringGrid1.Cells[j,1]:=
   IntToStr( f[j]);

                 for i:=1 to t1  do
       for j:= 1 to n   do
   StringGrid2.Cells[j,i]:=
   IntToStr( p[i,j]);

          Edit1.Text := 'm='+'---'+IntToStr(m)+'   '  +
        'n='+'---'+IntToStr(n)+'   '  +
        't1='+'---'+IntToStr(t1)+'   '  +
        'a1='+'---'+IntToStr(a1)+'   '  +
           'a2='+'---'+IntToStr(a2)+'   '  +
        'a3='+'---' +IntToStr(a3)  +'   '  +
           'k='+'---' +IntToStr(k)  +'   '  +
         //        'y='+'---' +IntToStr(y) +'   '  +
                      'v='+'---' +IntToStr(v)  +'   '  +
                 'c='+'---' +IntToStr(c) +'   '  +
                 'z='+'---' +IntToStr(z)   ;

        Edit2.Text := //'c*y='+'---'+IntToStr(c*y)+'   '  +
       'r='+'---'+IntToStr(r)+'   '  +
        'e='+'---'+IntToStr(e)+'   ' +
               'cc='+'---'+IntToStr(cc)+'   ' +
           'g='+'---'+IntToStr(g)+'   ' +
         'u='+'---'+IntToStr(u)+'   ' +
        'x='+'---'+IntToStr(x)  +'   ' +
           'ccc='+'---'+IntToStr(ccc)+'   ' +
        'g1='+'---'+IntToStr(g1);

        Edit3.Text :=
        'l1='+'---'+  FormatFloat('0.000',l1)   +'   ' +
      'l2='+'---'+  FormatFloat('0.000',l2)   +'   ' +
      'l3='+'---'+  FormatFloat('0.000',l3) +'   ' +
        'l4='+'---'+  FormatFloat('0.000',l4) +'   ' +
        'tt='+'---'+IntToStr(tt)+'   ' +
       'uu='+'---'+IntToStr(uu)+'   '  +
        'ff='+'---'+IntToStr(ff)+'   '  +
          'ww='+'---'+IntToStr(ww)
                         end;

procedure TForm1.Button4Click(Sender: TObject);
begin
end;
  /////////  ///////////////////////////////////////////////////////

        procedure TForm1.Button5Click(Sender: TObject);
begin
      close
end;
         initialization
randomize;
end.

Отредактировано ABC (2021-12-04 16:01:44)

0

2

К программе АКСОН

Матрица связей между нейронами p[1..n,1..n] формируется случайным образом на основе const: n,  a1,  a2,  a3, k,  m.
Можно сохранить матрицу p[1..n,1..n] при расчётах с изменением const: t1, b, z.

Для этого блокируется изменение начальной вероятности.
Показано красным.

        procedure TForm1.Button5Click(Sender: TObject);
begin
      close
end;
      //   initialization
// randomize;
end.

0


Вы здесь » поговорим о ЛОНИИС » КОММЕНТАРИИ к ПРОГРАММАМ » Программа АКСОН