Deutsch

Мои программы

14.04.25 20:36
Re: Мои программы
 
alek4 старожил
в ответ alek4 31.01.25 14:13

[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.

 

Перейти на