⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 process.frm

📁 Hopfield 网——擅长于联想记忆与解迷路 实现H网联想记忆的关键
💻 FRM
📖 第 1 页 / 共 4 页
字号:
         Index           =   0
         Left            =   240
         TabIndex        =   26
         Top             =   1680
         Width           =   1095
      End
   End
   Begin VB.Label Label7 
      Height          =   255
      Left            =   9120
      TabIndex        =   112
      Top             =   7920
      Width           =   375
   End
   Begin VB.Label Label5 
      Height          =   375
      Left            =   9720
      TabIndex        =   111
      Top             =   7800
      Width           =   135
   End
   Begin VB.Label Label3 
      Height          =   375
      Left            =   9960
      TabIndex        =   110
      Top             =   7800
      Width           =   135
   End
   Begin VB.Label Label2 
      Height          =   495
      Left            =   480
      TabIndex        =   109
      Top             =   6720
      Width           =   9615
   End
End
Attribute VB_Name = "process"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Public patternnumber As Integer             '模式数
Public neuralnumber As Integer              '神经元数
Public rownumber As Integer                 '行
Public linenumber As Integer                '列
Public learnnumber As Integer                '学习次数

Private Sub Command1_Click(Index As Integer)
Dim k As Integer      '算command数
 
If Command1(Index).Caption = 1 Then
    Command1(Index).Caption = 0
ElseIf Command1(Index).Caption = 0 Then
    Command1(Index).Caption = 1
End If


End Sub

Private Sub Command2_Click()
Dim n As Integer
linenumber = prepare.linenumber
rownumber = prepare.rownumber
neuralnumber = prepare.neuralnumber
learnnumber = prepare.learnnumber
patternnumber = prepare.patternnumber
'

'1,                     学习模式—-决定权重.
'想要记忆的模式用-1和1表示,
'P模式的总数,ap(s)第p个模式的第s个要素(-1或1)wij: 第j个神经元与第i个神经元间的权重
'j、i间的权重:wij=∑ap(i)ap(j), i = j时,wij=0

'2,                     想起模式
'神经元输出值的初始化,未知的输入,设xi(0)为未知模式的第i个要素(-1或1)初始值,0意味t=0。

'3,                     反复部分
'对各神经元,计算:xi (t+1) = f (∑wijxj(t)-θi),j=1…n, j≠i,n—神经元总数,f()--Sgn(),θi—神经元i发火阈值
'反复进行,直到各个神经元的输出不再变化。


'--------------------------------------产生网络--------------------------------------------

Dim Net(2, 25) As Integer                '存放状态(行*列)的数组
Dim weights(25, 25) As Integer           '存放权重(神经元数*神经元数)
Dim changenumber(25) As Integer      '存放更新次数
Dim threshold(25) As Double
Dim i As Integer                         '列
Dim j As Integer                         '行
Dim P As Integer                         '模式数
Dim state As Integer                     '暂时存放状态值
Dim Caption As Integer                   '暂时存放command.caption值
Dim k As Integer
P = 0                                    '第一个模式p=0
i = 0
j = 0
k = 0

'初始化域值===================================================
Randomize
For i = 0 To neuralnumber - 1      '为nn个神经元设置随机域值threshold(i) = Rnd
threshold(i) = Rnd
Next i
'===================================================


'构建net(patternnumber,neuralnumber)
'逐行逐列的将每一个学习模式的输入值装入net(p,n)的一行中,共patternnumber行,每行neuralnumber列,
    While (j < rownumber)                 '次层(行)的循环,
    i = 0

       While (i < linenumber)              '列循环
       Caption = process.Command1(j * 5 + i).Caption
          If Caption = 0 Then
          state = -1                      '若学习模式输入的是0则转换为-1
          End If
          If Caption = 1 Then
          state = 1
          End If
       Net(P, k) = state      '
       i = i + 1
       k = k + 1
       Wend
       
    j = j + 1
    Wend
i = 0
j = 0
P = 1                                     '第二个模式p=1
k = 0
    While (j < rownumber)                 '次层(行)的循环,
    i = 0

       While (i < linenumber)             '列循环
       Caption = process.Command1(99 - j * 5 - i).Caption
          If Caption = 0 Then
          state = -1                      '若学习模式输入的是0则转换为-1
          ElseIf Caption = 1 Then
          state = 1
          End If
       Net(P, k) = state     '
       i = i + 1
       k = k + 1
       Wend
    j = j + 1
    Wend



'分配权重空间weights(neuralnumber,neuralnumber)
i = 0
j = 0
While (j < neuralnumber)

    While (i < neuralnumber)
    weights(i, j) = 0
    i = i + 1
    Wend
j = j + 1
i = 0
Wend


'----------------------------------------------计算权值-----------------------------------

'wij=∑ap(i)ap(j), i = j时,wij=0

Dim weight As Integer                    '暂时存放算得权重
i = 0                                    '第i个神经元
j = 0                                    '第j个神经元
'求每一个元素与另一个元素间的权重
While i < neuralnumber                   '对每个i计算它到另一个元素j的权重
    j = 0
    While j < neuralnumber
      weight = 0
      k = 0                                    '模式数
      If i <> j Then
          While k < patternnumber
          weight = weight + Net(k, i) * Net(k, j)  '任意两个元素ij间权重wij=∑ap(i)ap(j)
          k = k + 1
          Wend
      End If
      weights(i, j) = weight                      '两元素间的权重
      j = j + 1
    Wend

i = i + 1
Wend
'******************************************测试weights()
i = 0
j = 0
While i < neuralnumber                   '对每个i计算它到另一个元素j的权重
    j = 0
    While j < neuralnumber
    Label5.Caption = weights(i, j)
    Label4.Caption = Label4.Caption + Label5.Caption
      j = j + 1
    Wend
      Label4.Caption = Label4.Caption + Chr(10) & Chr(13)                   '两元素间的权重

i = i + 1
Wend
'********************************************************

'--------------------------传播单元(传入的第i单元经计算得出的输出)-------------------

'传入第i个神经元,算出其输出
Dim sum As Integer                              '计算和
Dim out As Integer                              '暂时存放输出值
Dim changed As Boolean                         '是否修改
Dim output(25) As Integer
changed = False
sum = 0
k = 0
i = 0
j = 0
P = 0
'初始化output()
 While (j < rownumber)
       While (i < linenumber)
       P = j * rownumber + i                    '存入到output()中的第j处
       k = 49 - j * 5 - i                       '取输入位置
       If Command1(k).Caption = 1 Then
       output(P) = 1
       End If
       If Command1(k).Caption = 0 Then
       output(P) = -1
       End If

       i = i + 1
       Wend
    j = j + 1
    i = 0
Wend



k = 0
'xi (t+1) = f (∑wijxj(t)-θi),j=1…n, j≠i,n神经元总数,f()--Sgn()
Randomize


While k < learnnumber                              '学习次数
   j = 0                                           '第j个神经元
   sum = 0
'   i = InitializeRandoms()                         '产生随机数的函数
i = (neuralnumber) * Rnd
changenumber(i) = changenumber(i) + 1
Label3.Caption = i
Label2.Caption = Label2.Caption + Label3.Caption
   While j < neuralnumber                          '每个元素的输出值
   sum = sum + weights(i, j) * output(j)
   j = j + 1
   Wend
   sum = sum - threshold(i)
      If (sum = 0) Then
      out = 1
      End If
      If (sum < 0) Then
      out = -1
      End If                                       'sum小于域值,输出值置-1
      If (sum > 0) Then
      out = 1
      End If                                       'sum大于域值,输出值置1
    output(i) = out                             '网络的输出值改为新的输出值
k = k + 1
Wend


'-----------------------------------------显示结果----------------------------------
i = 0
j = 0
k = 0
While (j < rownumber)
    While (i < linenumber)

    k = 74 - j * 5 - i
    Command1(k).Visible = True
    If output(rownumber * j + i) = 1 Then
    Command1(k).Caption = 1
    End If
    If output(rownumber * j + i) = -1 Then
    Command1(k).Caption = 0
    End If
    i = i + 1
    Wend
j = j + 1
i = 0
Wend
'-----------------------显示更新次数----------------------
i = 0
j = 0
For i = 0 To rownumber - 1
  For j = 0 To linenumber - 1
    Command4(i * 5 + j).Caption = changenumber(i * linenumber + j)
  Next j
Next i

End Sub

Private Sub Command3_Click()
Unload Me

End Sub

Private Sub Form_Load()
Dim i As Integer      '算列数linenumber
Dim j As Integer      '算行数rownumber
Dim k As Integer      '算command数
i = 0
j = 0
k = 0
'学习样本1初始化
linenumber = prepare.linenumber
rownumber = prepare.rownumber
neuralnumber = prepare.neuralnumber
learnnumber = prepare.learnnumber
patternnumber = prepare.patternnumber
For i = 0 To 99
Command1(i).Visible = False
Next i
i = 0
For i = 0 To 24
Command4(i).Visible = False
Next i
i = 0
While (j < rownumber)
    While (i < linenumber)

    k = j * 5 + i
    Command1(k).Visible = True
    Command4(k).Visible = True
    Command1(k).Caption = 1
    i = i + 1
    Wend
j = j + 1
i = 0
Wend
'学习样本2初始化
i = 0
j = 0
k = 0
While (j < rownumber)
    While (i < linenumber)

    k = 99 - j * 5 - i
    Command1(k).Visible = True
    Command1(k).Caption = 1
    i = i + 1
    Wend
j = j + 1
i = 0
Wend

'初始状态初始化
i = 0
j = 0
While (j < rownumber)
    While (i < linenumber)

    k = 49 - j * 5 - i
    Command1(k).Visible = True
    Command1(k).Caption = 1
    i = i + 1
    Wend
j = j + 1
i = 0
Wend






End Sub

⌨️ 快捷键说明

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