+実際の戦闘(中級)を説明するためのpython DEAP遺伝的アルゴリズムのライブラリを見ているだろう

TSPの問題

解決するために、遺伝的アルゴリズムを使用する前に:問題は、大きな価値を求めている多項式。この質問は、あまりにも簡単で、今、私たちは、巡回セールスマン問題についてのより困難な問題に対処する必要が--TSP

問題の説明

  • 巡回セールスマン問題TSP、巡回セールスマン問題
    -ここに画像を挿入説明

  • 同じコストにAからBへBにAへのセールスマンと費用ならば、我々は対称巡回セールスマン問題(対称Travelinigセールスマン問題(STSP))を呼び出します

  • 一方、非対称巡回セールスマン問題であるATSP

  • それは、古典的なNP困難な問題であることをTSPの問題、それが最適解が存在しなければならない見つけることができるという特殊性(時間に網羅することにより、最適な解決策を見つけるようにしてください)が、計算の複雑さの点で好ましいです。このように迅速かつ効率的にTSPの最適解を見つけることは魅力的な問題が残っています。

  • 実用的な面では、抽象的に簡略化物流スケジューリング、輸送計画、最適化、などのチップの配線の問題と考えることができます。

コードの簡潔

def genCity(n,LB=100,Ub=999):
    np.random.seed(42)
    return np.random.randint(low = Lb,high = Ub,size(n,2))

結果:
ここに画像を挿入説明

def cityDistance(cities):
    return distance.cdist(cities,cities,'euclidean')

結果:
ここに画像を挿入説明

def completeRoute(individual):
    return individual + [individual[0]]

この機能は、completeRouteを示すために使用されます。最後のセールスマンは、都市の最初で開始に返す必要があります。
この方法は、TSPの問題に対する最適なソリューションではありませんから出てくることを忘れないでください、多くの方法がたくさんありますが、私はTSPを説明するために、特別なブログ記事を書きます

ボーエンは便利な感じ、賞賛の聖歌を指します

全体のコード(コンビニエンスコピー)

## 环境设置
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
from scipy.spatial import distance
from deap import creator, base, tools, algorithms
import random

params = {
    'font.family': 'serif',
    'figure.figsize': [4.0, 3.0],
    'figure.dpi': 300,
    'savefig.dpi': 300,
    'font.size': 12,
    'legend.fontsize': 'small'
}
plt.rcParams.update(params)
#--------------------------------
## 定义TSP中的基本元素

# 用[n,2]的np.array存储城市坐标;每行存储一个城市
def genCity(n, Lb = 100 ,Ub = 999):
    # 生成城市坐标
    # 输入:n -- 需要生成的城市数量
    # 输出: nx2 np array 每行是一个城市的[X,Y]坐标
    np.random.seed(42) # 保证结果的可复现性
    return np.random.randint(low = Lb, high = Ub, size=(n,2))

# 计算并存储城市距离矩阵
def cityDistance(cities):
    # 生成城市距离矩阵 distMat[A,B] = distMat[B,A]表示城市A,B之间距离
    # 输入:cities -- [n,2] np array, 表示城市坐标
    # 输出:nxn np array, 存储城市两两之间的距离
    return distance.cdist(cities, cities, 'euclidean')

def completeRoute(individual):
    # 序列编码时,缺少最后一段回到原点的线段
    return individual + [individual[0]] # 不要用append
    
# 计算给定路线的长度
def routeDistance(route):
    # 输入:
    #      route -- 一条路线,一个sequence
    # 输出:routeDist -- scalar,路线的长度
    if route[0] != route[-1]:
        route = completeRoute(route)
    routeDist = 0
    for i,j in zip(route[0::],route[1::]):
        routeDist += cityDist[i,j] # 这里直接从cityDist变量中取值了,其实并不是很安全的写法,单纯偷懒了
    return (routeDist), # 注意DEAP要求评价函数返回一个元组

# 路径可视化
def plotTour(tour, cities, style = 'bo-'):
    if len(tour)>1000: plt.figure(figsize = (15,10))
    start = tour[0:1]
    for i,j in zip(tour[0::], tour[1::]):
        plt.plot([cities[i,0],cities[j,0]], [cities[i,1],cities[j,1]], style)
    plt.plot(cities[start,0],cities[start,1],'rD')
    plt.axis('scaled')
    plt.axis('off')
    
#--------------------------------
## 设计GA算法
nCities = 30
cities = genCity(nCities) # 随机生成nCities个城市坐标

# 问题定义
creator.create('FitnessMin', base.Fitness, weights=(-1.0,)) # 最小化问题
creator.create('Individual', list, fitness=creator.FitnessMin)

# 定义个体编码
toolbox = base.Toolbox()
toolbox.register('indices', random.sample, range(nCities), nCities) # 创建序列
toolbox.register('individual', tools.initIterate, creator.Individual, toolbox.indices)

# 生成族群
N_POP = 100
toolbox.register('population', tools.initRepeat, list, toolbox.individual)
pop = toolbox.population(N_POP)

# 注册所需工具
cityDist = cityDistance(cities)
toolbox.register('evaluate', routeDistance)
toolbox.register('select', tools.selTournament, tournsize = 2)
toolbox.register('mate', tools.cxOrdered)
toolbox.register('mutate', tools.mutShuffleIndexes, indpb = 0.2)

# 数据记录
stats = tools.Statistics(key=lambda ind: ind.fitness.values)
stats.register('avg', np.mean)
stats.register('min', np.min)

# 调用内置的进化算法
resultPop, logbook = algorithms.eaSimple(pop, toolbox, cxpb = 0.5, mutpb = 0.2, ngen = 200, stats = stats, verbose = True)

結果は(重要でありません)

gen	nevals	avg    	min    
0  	100   	14176.2	11493.3
1  	64    	13910.9	11978.5
2  	57    	13541  	10887.5
3  	62    	13412.6	11239.2
4  	57    	13216.1	10838.4
5  	52    	12978  	10946.4
6  	69    	12869.9	10835.5
7  	53    	12758  	11159.4
8  	60    	12583.8	11159.4
9  	53    	12650.3	11159.4
10 	62    	12552.8	10144.1
11 	64    	12515.9	10144.1
12 	57    	12362.6	10144.1
13 	63    	11992  	10144.1
14 	66    	11884  	10144.1
15 	53    	11796.8	10144.1
16 	57    	11776.6	10144.1
17 	51    	11746.5	10144.1
18 	48    	11537.4	10144.1
19 	59    	11437.6	10144.1
20 	58    	11234  	10144.1
21 	57    	11000.2	10083.2
22 	56    	11078.9	9630.29
23 	72    	10949.4	9580.21
24 	64    	11049.6	9518.98
25 	67    	10902.3	9453.88
26 	62    	10668.6	9453.88
27 	73    	10742.1	9404.84
28 	59    	10794.2	9107.71
29 	64    	10441.8	9107.71
30 	61    	10436.8	9107.71
31 	58    	10601.1	9107.71
32 	58    	10575.8	9107.71
33 	57    	10638.7	9107.71
34 	63    	10602.3	9107.71
35 	63    	10520.9	9100.74
36 	70    	10647.6	8601.04
37 	69    	10613.3	8601.04
38 	64    	10361.7	8601.04
39 	67    	10315  	8601.04
40 	66    	10533.4	8601.04
41 	60    	10305.4	8601.04
42 	65    	10413.1	8601.04
43 	53    	10147.9	8023.66
44 	61    	9946.89	8111.77
45 	66    	10206  	8414.1 
46 	60    	10322.8	8414.1 
47 	47    	10175  	8414.1 
48 	60    	10112.6	8277.71
49 	67    	10158.7	8414.1 
50 	58    	9868.8 	8414.1 
51 	53    	9914.54	8414.1 
52 	67    	10175.3	8244.9 
53 	63    	9668.28	7754.85
54 	56    	9698.52	8229.29
55 	52    	9800.86	8139.39
56 	60    	9852.75	8079.22
57 	63    	9720.71	7907.92
58 	46    	9371.5 	7907.92
59 	78    	9840.35	7907.92
60 	60    	9786.13	7907.92
61 	58    	9611.86	7690.89
62 	57    	9620.83	7571.99
63 	58    	9602.33	7571.99
64 	65    	9710.81	7690.89
65 	57    	9721.93	7690.89
66 	55    	9532.58	7597.36
67 	66    	9726.2 	7714.35
68 	54    	9606.91	7714.35
69 	60    	9694.29	7714.35
70 	57    	9506.47	7286.83
71 	59    	9606.73	7286.83
72 	49    	9542.94	7286.83
73 	56    	9515.44	7286.83
74 	63    	9650.51	7286.83
75 	63    	9520.09	7286.83
76 	68    	9594.92	7286.83
77 	54    	9540.16	7286.83
78 	53    	9176.14	7279.77
79 	57    	9009.16	7286.83
80 	53    	9147.02	7286.83
81 	70    	9256.52	7286.83
82 	62    	9488.51	7366.65
83 	59    	9608.51	7346.74
84 	70    	9749.23	7346.74
85 	64    	9782.13	7274.49
86 	69    	9534.5 	7429.7 
87 	65    	9658.88	7316.42
88 	59    	9453.71	7316.42
89 	55    	9235.11	7316.42
90 	58    	9385.07	7447.42
91 	63    	9310.27	7443.17
92 	61    	9653.86	7397.92
93 	62    	9433.39	7227.34
94 	60    	9377.12	7227.34
95 	69    	9246.4 	7227.34
96 	63    	9355.57	7227.34
97 	53    	9305.01	7101.48
98 	68    	9295.37	7101.48
99 	69    	9665.86	7101.48
100	54    	9414.28	7101.48
101	58    	9155.82	7101.48
102	47    	9126.21	7101.48
103	56    	9044.02	7101.48
104	65    	9155.81	7101.48
105	53    	9026.01	7101.48
106	65    	9015.49	7101.48
107	53    	8863.79	7202.31
108	60    	9144.37	7222   
109	65    	8718.15	7148.14
110	61    	8601.87	7148.14
111	60    	8672.55	7114.1 
112	60    	8477.34	6912.14
113	70    	8395.44	6912.14
114	54    	8521.13	6912.14
115	54    	8417.96	6861.39
116	64    	8545.9 	6861.39
117	58    	8766.21	6912.14
118	66    	8887.49	6903.63
119	67    	9013.49	6912.14
120	63    	8664.06	6976.26
121	59    	8823.91	6934.69
122	65    	8717.36	6902.27
123	61    	8651.38	6902.27
124	59    	8782.75	6934.69
125	69    	8785.51	6655.75
126	64    	8377.19	6655.75
127	64    	8556.06	6655.75
128	67    	8392.15	6686.51
129	62    	8600.26	6686.51
130	65    	8784.4 	6686.51
131	63    	9243.02	6686.51
132	62    	9145.37	6665.55
133	59    	8683.87	6665.55
134	55    	8666.97	6343.75
135	51    	8738.7 	6442.21
136	64    	8720.62	6742.48
137	63    	9024.09	6359.37
138	58    	8891.69	6359.37
139	51    	8463.8 	6468.51
140	60    	8285.75	6468.51
141	49    	8393.2 	6468.51
142	68    	8436.04	6348.44
143	61    	8541.49	6348.44
144	68    	8579.33	6348.44
145	49    	8198.65	6183.56
146	65    	8382.85	6183.56
147	50    	8132.53	6183.56
148	62    	8617.13	6183.56
149	54    	8389.52	6183.56
150	58    	8251.35	6183.56
151	47    	8209.13	6183.56
152	64    	8274.1 	6183.56
153	62    	8439.32	6183.56
154	60    	8411.04	6183.56
155	58    	8281.42	6017.12
156	65    	8382.98	6017.12
157	67    	8668.16	6017.12
158	57    	8337.28	6017.12
159	50    	7883.74	6017.12
160	71    	8589.04	6017.12
161	55    	8107.54	6017.12
162	48    	7643.62	6017.12
163	71    	7879.85	6017.12
164	56    	7815.24	5889.87
165	58    	7985.76	6017.12
166	67    	8255.71	5923.56
167	59    	7882.04	5923.56
168	57    	8067.33	6017.12
169	56    	8383.83	5923.56
170	58    	8251.27	6017.12
171	53    	7677.3 	6017.12
172	48    	7769.81	6017.12
173	60    	8220.91	6017.12
174	60    	7938.42	5971.98
175	59    	7686.54	5971.98
176	62    	7856.47	5912.91
177	55    	8111.19	5912.91
178	65    	7818.76	5912.91
179	62    	8043.08	5912.91
180	61    	7949.82	5912.91
181	63    	8281.78	5912.91
182	60    	8377.56	5912.91
183	76    	8506.39	5912.91
184	45    	8017.97	5912.91
185	65    	8571.77	5699.04
186	56    	8243.96	5699.04
187	57    	8299.26	5699.04
188	64    	7988.19	5699.04
189	52    	7762   	5699.04
190	55    	7980.38	5699.04
191	52    	7704.22	5699.04
192	57    	7763.54	5597.01
193	62    	8239.91	5699.04
194	46    	8091.76	5699.04
195	60    	7915.62	5699.04
196	60    	8099.47	5699.04
197	62    	7898.96	5699.04
198	60    	7979.38	6011.46
199	64    	8236.56	5752.69
200	65    	8273.31	5752.69
公開された33元の記事 ウォンの賞賛4 ビュー1129

おすすめ

転載: blog.csdn.net/qq_34107425/article/details/104072512