遗传算法解决旅行商问题(附python代码)

本文介绍了利用遗传算法解决旅行商问题的思路,包括染色体设计、初始种群生成、选择繁殖、交叉繁殖和变异操作。同时,提供了具体的Python源代码,涉及城市数据处理和算法流程实现。
摘要由CSDN通过智能技术生成

一、遗传算法思路

1、染色体设计

    用遗传算法解决TSP问题,一段旅程的路径是n个城市的排列。在染色体设计中应当基于路径,一条完整的路径即为一个染色体。

2、产生初始种群

    在本程序中通过随机打乱城市排列顺序获得个体,再对个体进行一定程度的改良,改良方法同样是对个体内的基因进行随机交换,保留产生的最优个体。

3、选择繁殖个体

    在本程序中采用杰出选择策略,按照比例保留种群中适应性强的个体,对于适应性弱的个体按照设置的存活概率保留。

4、交叉繁殖

    使用部分匹配交叉方法,随机选取两个交叉点,以便确定一个匹配段,根据两个父个体中两个交叉点之间的中间段给出的映射关系生成两个子个体。

5、变异

    设定变异概率,对于每个子代个体都存在一定的变异概率,随机抽取两个城市,交换他们的位置。

6、 更新种群

    将父代与子代共同组成新一代的种群。

二、源代码

import numpy as np
import matplotlib.pyplot as plt
import math
import random

# 种群数
population_num = 300
# 改良次数
improve_count = 1000
# 进化次数
iter_count = 3000
# 设置强者的概率,种群前30%是强者,保留每代的强者
retain_rate = 0.3
# 设置弱者的存活概率
live_rate = 0.5
# 变异率
mutation_rate = 0.1
# 起始点
origin = 10

'''
载入数据
'''
def read_data():
    city_name = []
    city_position = []
    with open("demo.txt", 'r') as f:
        lines = f.readlines()
        for line in lines:
            line = line.split('\n')[0]
            line = line.split('\t')
            city_name.append(line[0])
            city_position.append([float(line[1]), float(line[2])])
    city_position = np.array(city_po
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值