Регистрация | Вход
'Minibrain (с) [K] 2014''Введите вход, введите выход, установите значение медиатора и жмите Enter'Низкое значение медиатора притормозит распространение активации всех активируемых узлов,'оно необходимо, чтобы определить неправильную реакцию на информацию.'Методы обучения, применения медиатора, работы с сетью, не совсем корректны'и несут демонстративный характер.Public Class Form1 Private Shared Brain As New Minibrain Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown, TextBox3.KeyDown, TextBox4.KeyDown If e.KeyCode = Keys.Enter Then Dim result As String Dim parcearg As Byte Try parcearg = Byte.Parse(TextBox4.Text) Catch ex As Exception parcearg = 0 End Try TextBox2.AppendText("Я : " & TextBox1.Text & vbCrLf) result = Brain.NetWork(TextBox1.Text, TextBox3.Text, parcearg) TextBox2.AppendText("bot: " & result & vbCrLf) TextBox1.Focus() End If End SubEnd ClassClass Minibrain Structure BrainStructure Structure SomaStructure Dim Dendrit As String 'Вход Dim N2N() As Byte 'Связи с узлами Dim Signal As Byte 'Активность Dim Axon As String 'Выход End Structure Dim Node() As SomaStructure Dim Counter As Byte End Structure Private Shared Brain As BrainStructure 'Думаю понятно 'Просто создание массивов Sub New() ReDim Brain.Node(Byte.MaxValue) For i = 0 To Byte.MaxValue - 1 Brain.Node(i) = New BrainStructure.SomaStructure ReDim Brain.Node(i).N2N(Byte.MaxValue) Next End Sub 'Основная функция Public Function NetWork(ByVal Sensor As String, ByVal Effector As String, ByVal Mediator As Byte) As String Dim tmp 'Заглушка для операций с запятой 'Обход узлов сети For i = 0 To Byte.MaxValue - 1 If Brain.Node(i).Dendrit = Sensor Then 'Если нашел данные - узел активируется и раздаёт сигнал tmp = Byte.MaxValue tmp += Mediator 'Медиатор чем меньше тем сильнее тормозит узел 0 - трмозит в двое tmp /= 2 Brain.Node(i).Signal = tmp 'Обход связей For n = 0 To Byte.MaxValue - 1 If Brain.Node(i).N2N(n) > 0 Then 'Если вес связи больше нуля - раздаёт сигнал, без проверки 0 будет иметь тормозящий эффект tmp = Brain.Node(i).N2N(n) tmp += Brain.Node(n).Signal tmp += Brain.Node(i).Signal tmp /= 3 Brain.Node(n).Signal = tmp End If Next 'По идее неправильно, так как выбор должен быть у сети из множества вариантов, 'а эти инструкции делают единственным первый попавшийся вариант Exit For End If Next 'Обучение узла NodeTraining(Sensor, Effector) Brain.Counter += 1 If Brain.Counter = 255 Then 'Защита от выхода за пределы массива Brain.Counter = 0 End If 'Поиск самого активного узла Return FindNode() End Function Sub NodeTraining(ByVal Sensor As String, ByVal Effector As String) Brain.Node(Brain.Counter).Dendrit = Sensor 'Запоминает вход Brain.Node(Brain.Counter).Axon = Effector 'и выход For n = 0 To Byte.MaxValue - 1 'и активность всей сети If Brain.Node(Brain.Counter).N2N(n) < Brain.Node(n).Signal Then Brain.Node(Brain.Counter).N2N(n) += 1 ElseIf Brain.Node(Brain.Counter).N2N(n) > Brain.Node(n).Signal Then Brain.Node(Brain.Counter).N2N(n) -= 1 End If Next End Sub Function FindNode() As String Dim tmp = 0, ls = 0 For n = 0 To Byte.MaxValue - 1 If ls < Brain.Node(n).Signal Then tmp = n ls = Brain.Node(tmp).Signal End If Next Return Brain.Node(tmp).Axon End FunctionEnd Class