Мои программы
[size=30]Программа Б--АКСОН
[/size]
[size=20][color=maroon]1.Общее
2.Нейронная сеть – граф
3.Активность нейронов
4.Входной сигнал
5.Связи между нейронами
6.Итерации основного цикла
7.Итерации суперцикла
8.Скачивание программы Б--АКСОН
[/color][/size]
[size=20][color=maroon]1.Общее[/color][/size]
Программа Б-АКСОН – развитие программы --АКСОН
Разум у живого реализован на основе нейронных сетей.
То есть нейронов, передающих между собой сигналы повышения активности (связи +) и уменьшения активности (связи -).
Нейроны имеют отростки: аксоны и дендриты.
Передатчик сигналов: аксон, приемник: дендрит.
В технике появились аналоги нейронных сетей живого.
Общее название
Такие сети наследовали только общие принципы нейронных сетей живого.
Аналоги не связаны биологическими ограничениями.
Ниже будет описана программа Б--АКСОН.
Цель программ серии АКСОН.
Изучить функционирования нейронных сетей.
И построить нейронную сеть с четким соответствием: входной сигнал – выходной сигнал.
Разумеется, имеется много вариантов анализа выходных сигналов.
Программы серии АКСОН.
Программа АКСОН.
Между нейронами только сигналы увеличения активности.
Входные сигналы – положительные.
Введена функция забывания, уменьшения активности нейронов со временем.
Программа в ветви «Комментарии к Программам».
Программа +- Аксон
Связи между нейронами + и -.
Входные сигналы +.
Программа –-АКСОН.
Связи между нейронами + и -.
Входные сигналы +и -.
Программа Б-АКСОН.
Связи между нейронами + и -.
Входные сигналы +и -.
Добавлена функция.
Расчёт для серии входных сигналов.
[size=20][color=maroon]2. Нейронная сеть – граф[/color][/size]
Нейронной сети соответствует ориентированный граф – орграф.
Нейрону ставится в соответствие вершина орграфа.
Ниже нейрон и вершина графа одинаковое содержание.
Число вершин – const: n.
Дуга между вершинами соответствует связи аксон – дендрит.
Дуга из вершины i в вершину j соответствует связи аксон – дендрит.
Между каждой парой может в каждом направление быть несколько дуг или не одной.
Число дуг случайная или постоянная величина.
Орграф может быть полносвязным.
Из каждой вершины можно достичь всех вершин по ориентации (направлению) дуг.
Орграф может быть частично связным, когда одни вершины имеют пути ко всем другим вершинам, другие только к части вершин. При построении орграфа в конкретной задаче проверка связности графа не проводилась. Для отдельных пар вершин по одному или двух направлениях случайным образом в конкретной программе задавалось отсутствие связи: const m.
[size=20][color=maroon]3. Активность нейронов[/color][/size]
Каждому нейрону при расчётах присваивается вес.Вес может быть со знаком плюс или минус. В конкретной программе вес – положительная величина не более const z или отрицательная величина не менее const z1.
[size=20][color=maroon]4. Входной сигнал[/color][/size]
В конкретной программе предусмотрены два вида входного сигнала.
Вес случайный и вес постоянный.
Переключатель: const k.
К = 1 – случайный входной сигнал: const a1
a1>0.
Диапазон: 0 – а1-1.
К = 2 – постоянный входной сигнал: const a2.
a2>0.
Входной сигнал подается одного веса на несколько нейронов.
Период подачи – переменная переменная ij.
Изменение ij в диапазоне v1 – v.
Входной сигнал – матрица f[1..n].
f – величина входного сигнала на нейрон –i.
[size=20][color=maroon]5. Связи между нейронами[/color][/size]
Связи между нейронами – матрица s[1..n,1..n].
Переключатель вида матрицы s[1..n,1..n].- pp.
pp =1
Вес элементов вероятностный в диапазоне 0 – a3-1.
a3>0.
pp =2
Вес элементов постоянный – a4.
Задаются нулевые связи между нейронами: const m.
Задаются положительные и отрицательные связимежду нейронами: const nn.
a4>0.
[size=20][color=maroon]6. Итерации основного цикла[/color][/size]
В работы программы по основному цикл, переменная i, последовательно заполняется матрица p[1..t1,1..n].
p[i,j] – вес нейрона j после итерации i.
Итерация.
Вес каждого нейрона увеличивается или уменьшается на сумму дуг в соответствии с матрицей s[1..n,1..n] от нейронов весом отличного от нуля.
Если вес нейрона при итерации превышает const z, весанейрона равен z.
Если сумма дуг с учётом знака менее const z1,вес нейрона равен z1.
Максимальное число итераций - const t1.
Если в ходе выполнения итераций на трех последовательных итерациях вес всех нейронов не меняется, вычисления заканчиваются.
Фиксируется ww = i-1.
[size=20][color=maroon]7. Итерации суперцикла[/color][/size]
Переменная суперцикла ij.
В ходе итераций суперцикла выполняются итерации основного цикла.
Диапазон изменения ij: v1 –v.
Заполняется массив s1[1..n].
Элемент s1 равен частному от деления на число нейронов – n суммы элементов строки wwматрицы p[1..n,1..n] при i =ij.
[size=20][color=maroon]8. Скачиваниие программы Б--АКСОН[/color][/size]
Программа АКСОН на Дельфи 7.
Ввод в программе –const.
Распечатка программы в WORD: Приложение 1.[/color][/size]
Для скачивания вариант с постоянными величинами вероятностей при разных входах в программу.
//initialization
//randomize;
Входные сигналы только с сигналом +.
Со знаком - заблокированы
Скачать программу Б--АКСОН
https://yadi.sk/d/ouwjDuZUQLzgVA
[size=20][color=maroon]Приложение 1[/color][/size]
программа 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;
Edit3: TEdit;
Label2: TLabel;
Label3: TLabel;
Label7: TLabel;
Label6: TLabel;
Edit4: TEdit;
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 =300;// ÷ число нейронов
t1 =1500 ;//максимальное число итераций
a1 = 200;//абсолютный вес связи:аксон - дендрит
//вероятностное задание веса
a2 = 300;// абсолютный вес связи: аксон - дендрит
// вес постоянный
a3 =200;// вес входного сигнала
//вероятностное задание веса
a4=200 ;// постоянный вес входного сигнала
k=1 ;//переключатель связи аксон - дендрит
pp=1;//переключатель входного сигнала
v1 = 1;//
v=100;//формирование входного сигнала
//периодичность нулей
m=15;// отсутствие связи между нейронами
z= 300;// максимальный вес нейрона
z1= -300;// минимальный вес нейрона
nn=4;// связь аксон - дендрит
vv =5;// +- входной сигнал
jj = 7 ;// вывод входного сигнала ij = jj
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;// состояние входного сигнала
s1 : array [v1..v] of real; //
s2 :array [v1..v] of integer;//
s3 :array [v1..v] of integer;//
a, u, x,x1, c, b1,d1, t,d, g, q,i,j,h,i1,i2,hh : integer; //
j1,j2,j3,j4,j5,j6,j7,j8, i3,i4,i5,i6,i7,i8,i0: integer; //
w, e, e1, z2, z3: integer;//
m1 ,m2,m3,m4,m5, m6,m7 ,m8,m9,m10: integer;//
t3: integer;
ia, ib,ic, id ,it,iw, iu, ju, ja, jb, jc, jd ,jt, jw, ij : integer;//
zz ,ss,ww, sss, uu ,u1,u2,u3:integer;//
r, r1, r2, r3, r4, r5, r6:integer;//
ff ,tt ,c1, g1,cc,ccc, mm , kk:integer;//
l1, l2 ,l3,l4, r7, r8, r9: variant;//
p1,p2,p3,p4,p5,p6: real ; //
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 ,
doStringGrid1.Cells[0,q]:=IntToStr(q);
for q:=1 to n // нумерация в горизонтали в табл. № 2
do StringGrid2.Cells[q,0]:=IntToStr(q);
for q:=1 to t1// нумерация по вертикали в табл. № 2
doStringGrid2.Cells[0,q]:=IntToStr(q);
for q:=1 to n // нумерация в горизонтали в табл. № 4
do StringGrid4.Cells[q,0]:=IntToStr(q);
for q:=1 to n// нумерация по вертикали в табл. № 4
doStringGrid4.Cells[0,q]:=IntToStr(q);
for q:=1 to n // нумерация в горизонтали в табл. № 3
do StringGrid3.Cells[q,0]:=IntToStr(q);
for q:=1 to n// нумерация по вертикали в табл. № 3
doStringGrid3.Cells[0,q]:=IntToStr(q);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// формирование матрицы s
for i:=1 to n do
for j:= 1 to n do
if i<>jthen
begin
if k=1 thenbegin//a
s[i,j] := random ( a1);
mm:= random (nn);
if mm = 0 then s[i,j] := (- s[i,j]);
h:= random (m);
if h>3 then s[i,j] := 0;
end;//a
if k=2 thenbegin//b
s[i,j] := a2;
mm:= random (nn);
if mm = 0 then s[i,j] := (- s[i,j]);
h:= random (m);
if h>3 then s[i,j] := 0;
end;end;//b
for iu :=1 to n do
for ju := 1 to n do
begin
if s[iu,ju] >0 then u1 := u1 +1;
if s[iu,ju] =0 then u2 := u2 +1;
if s[iu,ju] <0 then u3 := u3 +1;
end;
//суперцикл
for ij := v1 to v do
// формирование входного сигнала
begin
m8:=0;m9:=0; m10 :=0;c:=0;r7:=0; r8:=0;w:=0;
for i:=1 to ndo
for j:=1 to ndo
p[i,j] := 0;
if pp = 1 then
for j:= 1 to n dobegin
W:=w+1;
f[j] := random ( a3);
hh:= random (vv);
d:=w mod ij ;
if d> 0 then f[j] := 0;
//if hh>3 then f[j] := -f[j];
end;
if pp=2 then
for j:=1 to ndo
begin
W:=w+1;
d:=w mod ij ;
if d = 0 then f[j] :=a4;
if d> 0 then f[j] := 0;
hh:= random (vv);
// if hh>3 then f[j] := -f[j];
end;
if ij = jj then
for j:= 1 to ndo
StringGrid1.Cells[j,1]:=
IntToStr( f[j]);
for jw :=1 to n dobegin
if f[jw]>0 then m8 := m8+1;
if f[jw]=0 then m9 := m9+1;
if f[jw]<0 then m10 := m10+1;
end;
// основной цикл
for j:=1 to ndo begin
p[1,j] := f[j] ;
end;
//основной цикл
for i:=1tot1 do
begin
c:= c+1;
if i>= 2 then begin
for ia:= 1 to n do
for ib := 1 to ndo
ifp[i-1,ib] <> 0
then if ib<>ia then
p[i,ia]:=p[i-1,ia]+ s[ib ,ia];
for it := 1 to ndobegin
if p[i,it]>z thenp[i,it]:=z;
if p[i,it]<z1 thenp[i,it]:=z1;
end;
kk:=0;
for iw:=1 to ndo
if(( p[c-3,iw]<>p[c-1,iw] )
or(p[c-1,iw]<>p[c,iw]) )then kk :=1;
if (kk =0)then begin uu:=777;ww:=c-1; break;end;
end;
end;
Form1.Caption:=IntToStr(GetTickCount-Tick);
for ic:=1 to ndobegin
if p[c-3,ic]= 0 then u:= u +1;
if p[c-3,ic]=z then x:= x +1;
if p[c-3,ic]=z1 then x1:= x1 +1;
ifp[c-3,ic]= a3 then ccc:= ccc +1;
if( ((p[c-3,ic]<>0) and ( p[c-3,ic]<>z))
and((p[c-3,ic]<>a3 ) and (p[c-3,ic]<>z1)) )
then g1:= g1+1;
if p[c,ic]= 0 then r:= r +1;
if p[c,ic]= z then e:= e +1;
if p[c,ic]= z1 then e1:= e1 +1;
ifp[c,ic]= a3 then cc:= cc +1;
if(((p[c,ic]<>0) and ( p[c,ic]<>z))
and((p[c,ic]<>a3 ) and ( p[c,ic]<>z1)))
then g:= g+1;
end;
t:= u+x+ccc+g;
for i:=1 to n do
for j:=1 to n do
begin
if s[i,j] = 0 then m1 := m1+1;
if s[i,j] >0 then m2 := m2+1 ;
if s[i,j] < 0 then m3 := m3+1 ;
if s[i,j] >0 then m4 := m4+s[i,j];
if s[i,j] <0 then m5 := m5+s[i,j];
END;
m7 := m1+m2+m3;
l1:=r/n;
l2:= e/n;
l3 := cc/n;
l4 := g/n;
r7:=0; r8 :=0;
for i:=1 to ndobegin
r7 := r7+ p[ww,i];
r8 := r8+ p[ww,i]*p[ww,i];
end;
p1:= r7/n;
p2:= r8/n;
p3:= Sqrt(p2);
s1[ij] := p1;
s2[ij] := ij;
s3[ij] := ww;
end;
for i:=1 to ndo
for j:=1 to ndo
StringGrid4.Cells[j,i]:=
IntToStr( s[i,j]);
for i:=1 to t1do
for j:= 1 to ndo
StringGrid2.Cells[j,i]:=
IntToStr( p[i,j]);
for j:= 1 to ndo
begin
StringGrid3.Cells[j,1]:=
FormatFloat('0.00',s1[j]);
StringGrid3.Cells[j,2]:=
IntToStr( s2[j]);
StringGrid3.Cells[j,3]:=
IntToStr( s3[j]);
end;
Edit1.Text := 'm='+'---'+IntToStr(m)+''+
'n='+'---'+IntToStr(n)+''+
't1='+'---'+IntToStr(t1)+''+
'a1='+'---'+IntToStr(a1)+''+
'a2='+'---'+IntToStr(a2)+''+
'a3='+'---' +IntToStr(a3)+''+
'k='+'---' +IntToStr(k)+''+
'nn='+'---' +IntToStr(nn) +''+
'v='+'---' +IntToStr(v)+''+
'c='+'---' +IntToStr(c) +''+
'z='+'---' +IntToStr(z)
+''+
'm8='+'---' +IntToStr(m8)+''+
'm9='+'---' +IntToStr(m9) +''+
'm10='+'---' +IntToStr(m10);
Edit2.Text := 'r='+'---'+IntToStr(r)+''+
'e='+'---'+IntToStr(e)+'' +
'e1='+'---'+IntToStr(e1)+'' +
'cc='+'---'+IntToStr(cc)+'' +
'g='+'---'+IntToStr(g)+'' +
't='+'---'+IntToStr(t)+'' +
'u='+'---'+IntToStr(u)+'' +
'x='+'---'+IntToStr(x)+'' +
'x1='+'---'+IntToStr(x1)+'' +
'ccc='+'---'+IntToStr(ccc)+'' +
'g1='+'---'+IntToStr(g1)
+''+
'ff='+'---'+IntToStr(ff)
+'' +
'u1='+'---'+IntToStr(u1)+'' +
'u2='+'---'+IntToStr(u2)
+''+
'u3='+'---'+IntToStr(u3);
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)+''+
'ww='+'---'+IntToStr(ww)+''+
'm1='+'---'+IntToStr(m1)+'' +
'm2='+'---'+IntToStr(m2)+'' +
'm3='+'---'+IntToStr(m3)+'' +
'm4='+'---'+IntToStr(m4)+'' +
'm5='+'---'+IntToStr(m5)
+'' +
'm7='+'---'+IntToStr(m7);
Edit4.Text :=
'r7='+'---'+IntToStr(r7)+'' +
'r8='+'---'+IntToStr(r8)
+'' +
'p1='+'---'+FormatFloat('0.000',p1) +'' +
'p2='+'---'+FormatFloat('0.000',p2)
+'' +
's1[v1]='+'---'+FormatFloat('0.000',s1[v1])
+'' +
's1[v1+1]='+'---'+FormatFloat('0.000',s1[v1+2])
+'' +
's1[v-1]='+'---'+FormatFloat('0.000',s1[v-1])
+'' +
's1[v]='+'---'+FormatFloat('0.000',s1[v]);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
end;
////////////////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
//initialization
//randomize;
end.