資源簡(jiǎn)介
基本蟻群算法python代碼,程序附帶測(cè)試數(shù)據(jù)
代碼片段和文件信息
import?randomcopy
class?Ant:
????#?任務(wù)個(gè)數(shù)
????n=9
????#?機(jī)器/集合個(gè)數(shù)
????m=3
????#?每個(gè)任務(wù)的代價(jià)
????A=[81402646598537115]
????#?信息素
????xxs=[]
????#?初始化每條邊的信息素值
????init_xxs_value=1
????#?信息素?fù)]發(fā)因子
????p=0.4
????#?一次螞蟻搜索所釋放的信息素總量
????Q=600
????#?總迭代次數(shù)
????nc=3000
????#?搜索結(jié)果/符合條件的較好結(jié)果
????S=[A[][]]
????path=[0000000000]
????#?螞蟻數(shù)量
????ant_number=m
????#?初始化信息素列表
????def?init_xxs(self):
????????edge_value=[]
????????#?初始化第0層到第1層選擇信息素
????????for?i?in?range(0self.m):
????????????edge_value.append(self.init_xxs_value)
????????self.xxs.append(edge_value)
????????#?初始化第i層到第i+1層選擇信息素
????????for?i?in?range(1self.n):
????????????edge_value=[]
????????????for?j?in?range(0self.m):
????????????????temp_list?=?[]
????????????????for?z?in?range(0self.m):
????????????????????temp_list.append(self.init_xxs_value)
????????????????edge_value.append(temp_list)
????????????self.xxs.append(edge_value)
????#?一只螞蟻搜索過程,得到一個(gè)搜索路徑列表,第i個(gè)元素j代表在第i層選擇第j個(gè)集合/機(jī)器
????def?an_ant_search(self):
????????path_list?=?[0]
????????#?從第0層開始搜索,一直到第n-1層每層選擇下一層需要安排的任務(wù)
????????for?i?in?range(0self.n):
????????????#生成一個(gè)選擇隨機(jī)數(shù)[01)
????????????random_number?=?random.random()
????????????#?獲取選擇區(qū)間列表,如果隨機(jī)數(shù)落在區(qū)間[pp+1)上,則選擇p
????????????select_random_range_list?=?self.range_xss(ipath_list[path_list.__len__()-1])
????????????select_set_index?=?self.select_set(random_numberselect_random_range_list)
????????????path_list.append(select_set_index)
????????return?path_list
????#?獲取選擇區(qū)間列表(01)輸入第i層,選擇了第j個(gè)集合,返回第i+1層選擇集合的概率區(qū)間
????def?range_xss(selffloor_iset_j):
????????result_list=[0]
????????if?floor_i?==?0:
????????????sum_tao=?sum(self.xxs[0])
????????????sum_temp=0
????????????for?i?in?range(0self.m):
????????????????sum_temp+=self.xxs[0][i]/sum_tao
????????????????result_list.append(sum_temp)
????????????return?result_list
????????else:
????????????sum_temp?=?0
????????????sum_tao?=?sum(self.xxs[floor_i][set_j])
????????????for?i?in?range(0self.m):
????????????????sum_temp+=self.xxs[floor_i][set_j][i]/sum_tao
????????????????result_list.append(sum_temp)
?????
評(píng)論
共有 條評(píng)論