傳送門(所有的實驗都使用python實現)
實驗1 bp神經網路實驗
實驗2 som網實驗
實驗3 hopfield實現八皇后問題
實驗4 模糊搜尋演算法**薄冰厚度
實驗5 遺傳演算法求解tsp問題
實驗6 蟻群演算法求解tsp問題
實驗7 粒子群優化演算法求解tsp問題
實驗8 分布估計演算法求解揹包問題
實驗9 模擬退火演算法求解揹包問題
實驗10 禁忌搜尋演算法求解tsp問題
一、實驗目的
了解使用som演算法
二、實驗內容
(描述實驗任務)
試設計乙個具有5*5神經元平面陣的som網,建議學習率(t)在前1000步訓練中從0.5線性下降至0.04,然後在訓練到10,000步時減小至0。優勝鄰域半徑初值設為2個節點(即優勝鄰域覆蓋整個輸出平面),1000個訓練步時減至0(即只含獲勝節點)。每訓練200步保留一次權向量,觀察其在訓練過程中的變化。給出訓練結束後,5個輸入模式在輸出平面的對映圖。
三、實驗環境
(描述實驗的軟體、硬體環境)
使用python3.0 在 eclipse進行編輯
四、實驗步驟
(描述實驗步驟及中間的結果或現象。在實驗中做了什麼事情,怎麼做的,發生的現象和中間結果)
經過迭代學習10000次,得到的權重矩陣如下:
畫圖的結果如下:
未進行歸一化所畫的圖
歸一化之後畫的圖
五、總結
(說明實驗過程中遇到的問題及解決辦法;新發現或個人的收穫;未解決/需進一步研討的問題或建議新實驗方法等)
python原始碼
# -*- coding: utf-8 -*-
import numpy as np
import pylab as pl
def draw(c): #畫圖函式
colvalue = ['r', 'y', 'g', 'b', 'c', 'k', 'm']
for i in range(len(c)):
coo_x =
coo_y =
for j in range(len(c[i])):
pl.scatter(coo_x, coo_y, marker='x', color=colvalue[i % len(colvalue)], label=i)
pl.legend(loc='upper right')
pl.show()
class myson(object):
def __init__(self, x, output, times, size):
self.x = x #輸入樣例
self.output = output #輸出
self.times = times #迭代次數
self.size = size #資料長度
self.w = np.random.rand(x.shape[1], output[0] * output[1])
print(self.w.shape)
def ree(self, t, n):
return np.power(np.e, -n) / (t + 2)
def ren(self, t): # 返回拓撲距離
a = min(self.output)
return int(a - float(a) * t / self.times)
def nei(self, index, n): #確定獲勝區域點
a, b = self.output
length = a * b
def dis(index1, index2): #計算距離
i1_a, i1_b = index1 // a, index1 % b
i2_a, i2_b = index2 // a, index2 % b
return np.abs(i1_a - i2_a), np.abs(i1_b - i2_b)
def upw(self, x, t, winner): #更新權值
n = self.ren(t)
for x, i in enumerate(winner):
to_update = self.nei(i[0], n)
for j in range(n + 1):
e = self.ree(t, j)
for w in to_update[j]:
self.w[:, w] = np.add(self.w[:, w], e * (x[x, :] - self.w[:, w]))
ans = [set() for i in range(n + 1)]
for i in range(length):
dist_a, dist_b = dis(i, index)
if dist_a <= n and dist_b <= n: ans[max(dist_a, dist_b)].add(i) #將獲勝節點加入集合
return ans
def train(self): #訓練函式
count = 0
while self.times > count:
train_x = self.x[np.random.choice(self.x.shape[0], self.size)]
normal_w(self.w)
normal_x(train_x)
train_y = train_x.dot(self.w)
winner = np.argmax(train_y, axis=1).tolist()
self.upw(train_x, count, winner)
count += 1
return self.w
def af_train(self): #返回訓練結果
normal_x(self.x)
train_y = self.x.dot(self.w)
winner = np.argmax(train_y, axis=1).tolist()
print(winner)
return winner
def normal_x(x): #輸入歸一化處理
n, d = x.shape
for i in range(n):
temp = np.sum(np.multiply(x[i], x[i]))
x[i] /= np.sqrt(temp)
return x
def normal_w(w): #初始權值歸一化處理
for i in range(w.shape[1]):
temp = np.sum(np.multiply(w[:, i], w[:, i]))
w[:, i] /= np.sqrt(temp)
return w
if __name__ == '__main__':
data = """1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1;"""
a = data.split(',')
dataset = np.mat([[float(a[i]), float(a[i + 1]),float(a[i+2]),float(a[i+3]),] for i in range(0, len(a) - 1, 4)])
dataset_old = dataset.copy()
myson = myson(dataset, (5, 5), 1,5)
myson.train()
res = myson.af_train()
classify = {}
for i, win in enumerate(res):
if not classify.get(win[0]):
classify.setdefault(win[0], [i])
else:
a = # 未歸一化的資料分類結果
b = # 歸一化的資料分類結果
for i in classify.values():
draw(a) #未歸一化畫出的圖
draw(b) #歸一化之後畫出的圖
MPEG2網馬實驗
了解mpeg2網馬的工作原理。能分析簡單的網馬。用提供的工具生成mpeg2網馬。閱讀生成的網馬的源 熟悉其工作原理。執行網馬,觀察生成的效果。windows xp作業系統 mpeg 2 網馬生成工具 1 開啟控制台,進入虛擬環境。2 用網馬生成器生成網馬 3 閱讀木馬檔案 首先我們看muma.htm...
計網實驗 網路層實驗
arp是位址解析協議的簡稱,實際通訊過程中需要建立ip位址和硬體位址之間的對映關係,將ip位址解析成硬體位址的協議就稱為位址解析協議。使用arp的主機都有乙個arp快取區用來儲存對映關係。在同一網段通訊時,如果arp快取中沒有目的主機的硬體位址,則源主機傳送arp請求報文,目的主機對此報文作出應答。...
計網實驗 OSPF協議實驗
ospf協議概述及基本配置 ospf協議報文互動過程 ospf協議鏈路狀態描述 區域劃分及lsa種類 ospf協議路由的計算 ospf協議組網設計 ospf是乙個基於鏈路狀態 link state 的內部閘道器協議,核心思想 每一台路由器將其周邊的鏈路狀態描述出來,傳送給相鄰路由器,一段時間後,每台...