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

📄 mdusom.bas

📁 SOM的学习规则有三个主要阶段: 1)寻找与输入模式xk最接近的连接权向量Wj*=(wj*1, wj*2,….., wj*N) 2)将该连接权向量Wj*进一步朝向与输入模式xk接近的方向调整 3
💻 BAS
字号:
Attribute VB_Name = "MduSOM"
Option Explicit
Public Times As Integer '学习次数
Public KK As Integer '模式数
Public NN As Integer '输入层
Public MM As Integer '竞争层
Public A() As Double   '学习模式
Public AA() As Double  '输入
Public B() As Double  '竞争层神经元的位置
Public BB() As Double   '输出
Public d() As Double '竞争层各神经元的权向量与输入向量的距离
Public W() As Double '权重
Public L As Double '修正系数
Public AAA As Double   '在学习中逐渐变小的系数

Public Sub StudyMain()
Dim i, j As Integer
Dim k, t As Integer
Dim Min, Markj As Integer '选择优胜神经元
For t = 1 To Times
Randomize
k = Int(KK * Rnd + 1)
For j = 1 To MM
  d(j) = 0
 For i = 1 To NN
  d(j) = d(j) + (A(k, i) - W(i, j)) ^ 2
 Next i
 d(j) = Sqr(d(j))
Next j
Min = d(1)
Markj = 1
For j = 1 To MM
 If Min > d(j) Then
  Min = d(j)
  Markj = j
 End If
Next j
For j = 1 To MM
 For i = 1 To NN
  W(i, j) = W(i, j) + L * h(j, Markj) * (A(k, i) - W(i, j))
 Next i
Next j
Next t
AAA = AAA - 0.005
If AAA < 0.005 Then
AAA = 0.005
End If
End Sub

Public Sub Initial()
Dim i, j As Integer
Dim count As Integer
Dim Total As Double
For j = 1 To MM
 For i = 1 To NN
  W(i, j) = 0.5 + 0.1 * Rnd
 Next i
Next j
count = Int(Sqr(KK))
For i = 1 To KK / count
  For j = 1 To count
     A((i - 1) * count + j, 2) = (1 / count) * j
     A((i - 1) * count + j, 1) = (1 / count) * i
  Next j
Next i
count = Int(Sqr(MM))
For i = 1 To MM / count
  For j = 1 To count
     B((i - 1) * count + j, 2) = (1 / count) * j
     B((i - 1) * count + j, 1) = (1 / count) * i
  Next j
Next i
End Sub

Public Function h(y As Integer, yy As Integer) As Double '近傍函数
Dim i, j As Double
i = (B(y, 1) - B(yy, 1)) ^ 2 + (B(y, 2) - B(yy, 2)) ^ 2
j = AAA ^ 2
h = Exp(-i / j)
End Function

Public Sub Calculate()
Dim i, j As Integer
For j = 1 To MM
  BB(j) = 0
 For i = 1 To NN
  BB(j) = BB(j) + (AA(i) - W(i, j)) ^ 2
 Next i
 BB(j) = Sqr(BB(j))
Next j
End Sub






⌨️ 快捷键说明

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