• 大小: 5KB
    文件类型: .py
    金币: 1
    下载: 0 次
    发布日期: 2021-06-16
  • 语言: Python
  • 标签: python  蚁群算法  

资源简介

基本蚁群算法python代码,程序附带测试数据

资源截图

代码片段和文件信息

import randomcopy
class Ant:
    # 任务个数
    n=9
    # 机器/集合个数
    m=3
    # 每个任务的代价
    A=[81402646598537115]
    # 信息素
    xxs=[]
    # 初始化每条边的信息素值
    init_xxs_value=1
    # 信息素挥发因子
    p=0.4
    # 一次蚂蚁搜索所释放的信息素总量
    Q=600
    # 总迭代次数
    nc=3000
    # 搜索结果/符合条件的较好结果
    S=[A[][]]
    path=[0000000000]
    # 蚂蚁数量
    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)

    # 一只蚂蚁搜索过程,得到一个搜索路径列表,第i个元素j代表在第i层选择第j个集合/机器
    def an_ant_search(self):
        path_list = [0]
        # 从第0层开始搜索,一直到第n-1层每层选择下一层需要安排的任务
        for i in range(0self.n):
            #生成一个选择随机数[01)
            random_number = random.random()
            # 获取选择区间列表,如果随机数落在区间[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
    # 获取选择区间列表(01)输入第i层,选择了第j个集合,返回第i+1层选择集合的概率区间
    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)
     

评论

共有 条评论