mduhop.bas

来自「用神经元模拟磁旋」· BAS 代码 · 共 101 行

BAS
101
字号
Attribute VB_Name = "MduHop"
'Hop网算法模块
Public A() As Integer '要学习的模式
Public W() As Integer '神经元的连接权矩阵
Public Q() As Double '神经元的阈值
Public b() As Integer '破损的模式
Public y() As Integer '回忆起的模式
Public XX As Integer '排列方式的行数
Public YY As Integer '排列方式的列数
Public PP As Integer '要学习的模式数
Public NN As Integer '神经元个数
Public N As Integer '学习次数
Public Change() As Integer '记忆更新的次数
Public E_Start As Double '初始状态能量
Public D_End As Double '终止状态能量

Public Sub Initial() '初始化
Dim i, j As Integer
For i = 1 To NN
 For j = 1 To NN
 W(i, j) = 0
 Next j
Next i
Randomize
For i = 1 To NN
Q(i) = Rnd
Next i
For i = 1 To NN
Change(i) = 0
Next i
End Sub

Public Sub StudyMode() '学习模式,确定连接权重
Dim i, j, p As Integer
For p = 1 To PP
 For i = 1 To NN
  For j = 1 To NN
   W(i, j) = W(i, j) + A(p, i) * A(p, j)
  Next j
 Next i
Next p
For i = 1 To NN
 For j = 1 To NN
  If i = j Then
  W(i, j) = 0
  End If
 Next j
Next i
End Sub
                                                                                                                
Public Sub RememberMode() '想起模式,得到输出
Dim i, j, k As Integer
Dim h As Single
For k = 1 To N
 i = Int((NN * Rnd) + 1)
 Change(i) = Change(i) + 1
 h = 0
 For j = 1 To NN
  h = h + W(i, j) * b(j)
 Next j
 y(i) = Sg(h) ' - Q(i))
 For j = 1 To NN
 If j <> i Then
 y(j) = b(j)
 End If
 Next j
For i = 1 To NN
b(i) = y(i)
Next i
Next k
End Sub

Public Function Sg(x As Single) As Integer '符号函数
If x >= o Then
 Sg = 1
Else
 Sg = -1
End If
End Function

Public Function Energy(bb() As Integer) As Double   '计算能量的函数
Dim i, j As Integer
Dim Energy1, Energy2 As Double
Energy1 = 0
Energy2 = 0
For i = 1 To NN
  For j = 1 To NN
  Energy1 = Energy1 + W(i, j) * bb(i) * bb(j)
  Next j
  'Energy2 = Energy2 - Q(i) * b(i)
Next i
Energy = -0.5 * Energy1 - Energy2
End Function
Public Function HanMin(aa() As Integer, bb() As Integer) As Integer
Dim i, j As Integer
HanMin = 0
For i = 1 To NN
HanMin = HanMin + Abs(aa(i) - bb(i))
Next i
End Function

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?