91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 6KB
    文件類型: .py
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-18
  • 語言: Python
  • 標簽: 蟻群算法??python??

資源簡介

蟻群算法中TSP問題的一個用python解決的小DEMO

資源截圖

代碼片段和文件信息

import?numpy?as?np
import?matplotlib.pyplot?as?plt
coordinates?=?np.array([[565.0575.0][25.0185.0][345.0750.0][945.0685.0][845.0655.0]
????????????????????????[880.0660.0][25.0230.0][525.01000.0][580.01175.0][650.01130.0]
????????????????????????[1605.0620.0][1220.0580.0][1465.0200.0][1530.0??5.0][845.0680.0]
????????????????????????[725.0370.0][145.0665.0][415.0635.0][510.0875.0][560.0365.0]
????????????????????????[300.0465.0][520.0585.0][480.0415.0][835.0625.0][975.0580.0]
????????????????????????[1215.0245.0][1320.0315.0][1250.0400.0][660.0180.0][410.0250.0]
????????????????????????[420.0555.0][575.0665.0][1150.01160.0][700.0580.0][685.0595.0]
????????????????????????[685.0610.0][770.0610.0][795.0645.0][720.0635.0][760.0650.0]
????????????????????????[475.0960.0][95.0260.0][875.0920.0][700.0500.0][555.0815.0]
????????????????????????[830.0485.0][1170.0?65.0][830.0610.0][605.0625.0][595.0360.0]
????????????????????????[1340.0725.0][1740.0245.0]])

def?getdistmat(coordinates):
????num?=?coordinates.shape[0]
????distmat?=?np.zeros((5252))
????for?i?in?range(num):
????????for?j?in?range(inum):
????????????distmat[i][j]?=?distmat[j][i]=np.linalg.norm(coordinates[i]-coordinates[j])
????return?distmat

distmat?=?getdistmat(coordinates)

numant?=?40?#螞蟻個數
numcity?=?coordinates.shape[0]?#城市個數
alpha?=?1???#信息素重要程度因子
beta?=?5????#啟發函數重要程度因子
rho?=?0.1???#信息素的揮發速度
Q?=?1

iter?=?0
itermax?=?250

etatable?=?1.0/(distmat+np.diag([1e10]*numcity))?#啟發函數矩陣,表示螞蟻從城市i轉移到矩陣j的期望程度
pheromonetable??=?np.ones((numcitynumcity))?#?信息素矩陣
pathtable?=?np.zeros((numantnumcity)).astype(int)?#路徑記錄表

distmat?=?getdistmat(coordinates)?#城市的距離矩陣

lengthaver?=?np.zeros(itermax)?#各代路徑的平均長度
lengthbest?=?np.zeros(itermax)?#各代及其之前遇到的最佳路徑長度
pathbest?=?np.zeros((itermaxnumcity))?#?各代及其之前遇到的最佳路徑長度


while?iter?

????#?隨機產生各個螞蟻的起點城市
????if?numant?<=?numcity:#城市數比螞蟻數多
????????pathtable[:0]?=?np.random.permutation(range(0numcity))[:numant]
????else:?#螞蟻數比城市數多,需要補足
????????pathtable[:numcity0]?=?np.random.permutation(range(0numcity))[:]
????????pathtable[numcity:0]?=?np.random.permutation(range(0numcity))[:numant-numcity]

????length?=?np.zeros(numant)?#計算各個螞蟻的路徑距離

????for?i?in?range(numant):


????????visiting?=?pathtable[i0]?#?當前所在的城市

????????#visited?=?set()?#已訪問過的城市,防止重復
????????#visited.add(visiting)?#增加元素
????????unvisited?=?set(range(numcity))#未訪問的城市
????????unvisited.remove(visiting)?#刪除元素


????????for?j?in?range(1numcity):#循環numcity-1次,訪問剩余的numcity-1個城市

????????????#每次用輪盤法選擇下一個要訪問的城市
????????????listunvisited?=?list(unvisited)

????????????probtrans?

評論

共有 條評論