📄 login.frm
字号:
VERSION 5.00
Begin VB.Form login
Caption = "bm"
ClientHeight = 6285
ClientLeft = 60
ClientTop = 345
ClientWidth = 8130
LinkTopic = "Form1"
ScaleHeight = 6285
ScaleWidth = 8130
StartUpPosition = 3 '窗口缺省
Begin VB.CommandButton Command4
Caption = "1"
Height = 375
Index = 3
Left = 3120
TabIndex = 24
Top = 600
Width = 615
End
Begin VB.CommandButton Command4
Caption = "-1"
Height = 375
Index = 2
Left = 2520
TabIndex = 23
Top = 600
Width = 615
End
Begin VB.CommandButton Command4
Caption = "1"
Height = 375
Index = 1
Left = 1920
TabIndex = 22
Top = 600
Width = 615
End
Begin VB.CommandButton Command4
Caption = "-1"
Height = 375
Index = 0
Left = 1320
TabIndex = 21
Top = 600
Width = 615
End
Begin VB.CommandButton Command2
Caption = "定温"
Height = 375
Left = 7080
TabIndex = 14
Top = 240
Width = 495
End
Begin VB.TextBox Text4
Height = 270
Left = 5640
TabIndex = 13
Text = "0.01"
Top = 240
Width = 735
End
Begin VB.TextBox Text3
Height = 270
Left = 4080
TabIndex = 11
Text = "1000"
Top = 240
Width = 615
End
Begin VB.CommandButton Command1
Caption = "快速降温"
Height = 375
Left = 6480
TabIndex = 9
Top = 240
Width = 615
End
Begin VB.TextBox Text2
Height = 270
Left = 2400
TabIndex = 8
Text = "1000"
Top = 240
Width = 735
End
Begin VB.Frame Frame1
Caption = "输出结果"
Height = 5055
Left = 120
TabIndex = 2
Top = 1080
Width = 7575
Begin VB.Label Label13
Height = 255
Left = 6840
TabIndex = 19
Top = 5040
Width = 615
End
Begin VB.Label Label12
Height = 4455
Left = 5640
TabIndex = 18
Top = 720
Width = 1815
End
Begin VB.Label Label11
Height = 4455
Left = 3120
TabIndex = 17
Top = 720
Width = 2055
End
Begin VB.Label Label10
Height = 4455
Left = 1440
TabIndex = 16
Top = 720
Width = 1335
End
Begin VB.Label Label9
Height = 4335
Left = 240
TabIndex = 15
Top = 720
Width = 855
End
Begin VB.Label Label5
Caption = "网络状态出现实际概率值"
Height = 375
Left = 5760
TabIndex = 6
Top = 240
Width = 1095
End
Begin VB.Label Label4
Caption = "网罗状态出现理论概率值"
Height = 375
Left = 3240
TabIndex = 5
Top = 240
Width = 1215
End
Begin VB.Label Label3
Caption = "对应能量"
Height = 375
Left = 1560
TabIndex = 4
Top = 360
Width = 975
End
Begin VB.Label Label2
Caption = "网络状态"
Height = 375
Left = 240
TabIndex = 3
Top = 360
Width = 975
End
End
Begin VB.TextBox Text1
Height = 270
Left = 1200
TabIndex = 1
Text = "4"
Top = 240
Width = 495
End
Begin VB.Label Label16
Height = 375
Left = 6720
TabIndex = 26
Top = 840
Width = 735
End
Begin VB.Label Label15
Height = 375
Left = 5160
TabIndex = 25
Top = 840
Width = 735
End
Begin VB.Label Label14
Caption = "设置初始状态"
Height = 375
Left = 120
TabIndex = 20
Top = 720
Width = 1215
End
Begin VB.Label Label8
Caption = "结束温度"
Height = 255
Left = 4800
TabIndex = 12
Top = 240
Width = 735
End
Begin VB.Label Label7
Caption = "运行次数"
Height = 375
Left = 3240
TabIndex = 10
Top = 240
Width = 735
End
Begin VB.Label Label6
Caption = "温度"
Height = 375
Left = 1920
TabIndex = 7
Top = 240
Width = 735
End
Begin VB.Label Label1
Caption = "神经元数量"
Height = 375
Left = 120
TabIndex = 0
Top = 240
Width = 975
End
End
Attribute VB_Name = "login"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'目的: 观察该网络工作规则进行状态转移的过程和结果
'4个神经元对应了网络的16个状态,各个状态分别对应不同的能量值
'仿真1:首先把网络温度参数T固定在100,按工作规则共进行1000次状态更新
'把这1000次状态转移中网络中的各个状态出现的次数Si(i=1,2,…,16)记录下来
'计算各个状态出现的实际频率: Pi=Si/∑i=1,N Si =Si/M,N神经元个数;M网络状态转移次数
'同时按照Bo1tzmann分布计算网络各个状态出现概率的理论值:Q(Ei)=(1/Z)exp(-Ei/T)
'其中Ei = -0.5∑j=1,n,j≠iwijuiuj-θiuj
' 网络状态的实际出现概率与理论计算概率非常接近,且状态能量越小,出现的概率越大
'仿真2:实施降温方案,重新计算
'采用快速降温方案: t(t) = T0 / (1 + t)
'T从1000降到0.01,按工作规则更新网络状态
'当T=0.01时结束降温,再让T保持在0.01进行1000次状态转移,比较两种概率
'计算结果图 (M=1000, T0=100, Td=0.01)
'结论:实施降温方案后,网络的状态更新完全模拟了退火过程
'当T降到0.01以后,具有最小能量的状态4出现的概率为1,说明网络完全收敛于能量函数的最小值
'概率方式取代阶跃函数方式,来决定网络根据其神经元的内部状态而进行的状态更新
Private Sub Command1_Click()
'快速降温
Dim i, j, k, f As Integer
Dim tend, tmax, t As Double '停止温度0.01,最高温度100
Dim runnumber As Integer '运行次数1000
Dim changenumber As Integer '状态转移次数
Dim statenumber As Integer '状态数16
Dim neuralnumber As Integer '神经元数
Dim energyweight, energythreshold, energytotal As Double '能量
Dim sumstotal As Integer '记录状态对应的状态编号时用
Dim s(16) As Integer '各状态出现的次数
Dim p(16) As Double '各状态出现的频率
Dim h(4) As Double '各各神经元此时状态的能量
Dim q(16) As Double '各状态出现的理论值
'Dim inistate(4) As Integer '初始设值状态
Dim threshold(4) As Double '域值
Dim weights(4, 4) As Double '连接权重
Dim output(4) As Integer '此时的状态
Dim c(16, 4) As Integer '16种状态
c(0, 0) = -1
c(0, 1) = -1
c(0, 2) = -1
c(0, 3) = -1
c(1, 0) = -1
c(1, 1) = -1
c(1, 2) = -1
c(1, 3) = 1
c(2, 0) = -1
c(2, 1) = -1
c(2, 2) = 1
c(2, 3) = -1
c(3, 0) = -1
c(3, 1) = -1
c(3, 2) = 1
c(3, 3) = 1
c(4, 0) = -1
c(4, 1) = 1
c(4, 2) = -1
c(4, 3) = -1
c(5, 0) = -1
c(5, 1) = 1
c(5, 2) = -1
c(5, 3) = 1
c(6, 0) = -1
c(6, 1) = 1
c(6, 2) = 1
c(6, 3) = -1
c(7, 0) = -1
c(7, 1) = 1
c(7, 2) = 1
c(7, 3) = 1
c(8, 0) = 1
c(8, 1) = -1
c(8, 2) = -1
c(8, 3) = -1
c(9, 0) = 1
c(9, 1) = -1
c(9, 2) = -1
c(9, 3) = 1
c(10, 0) = 1
c(10, 1) = -1
c(10, 2) = 1
c(10, 3) = -1
c(11, 0) = 1
c(11, 1) = -1
c(11, 2) = 1
c(11, 3) = 1
c(12, 0) = 1
c(12, 1) = 1
c(12, 2) = -1
c(12, 3) = -1
c(13, 0) = 1
c(13, 1) = 1
c(13, 2) = -1
c(13, 3) = 1
c(14, 0) = 1
c(14, 1) = 1
c(14, 2) = 1
c(14, 3) = -1
c(15, 0) = 1
c(15, 1) = 1
c(15, 2) = 1
c(15, 3) = 1
changenumber = 0
neuralnumber = Text1.Text
runnumber = Text3.Text
tmax = Text2.Text
tend = Text4.Text
statenumber = Sqr(neuralnumber)
t = tmax
Randomize '初始化域值
For i = 0 To neuralnumber - 1
threshold(i) = Rnd
Next i
For i = 0 To neuralnumber - 2 '初始化连接权重
For j = i + 1 To neuralnumber - 1
weights(i, j) = Rnd
weights(j, i) = weights(i, j)
Next j
Next i
For i = 0 To neuralnumber - 1
weights(i, i) = 0
Next i
If Command4(Index).Caption = 1 Then '设置初始状态
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -