python 遗传算法书籍推荐_遗传算法(1) - Python实现
1 #遗传算法特征: 自由空间, 定长编码
2 #选择: 择优选择
3 #交叉: 全空间可遍历
4 #变异: 增强全空间的搜索能力
5
6 importnumpy7 importmatplotlib.pyplot as plt8
9 #目标函数1
10 defmyfunc1(x):11 return (x ** 2 - 5 * x) * numpy.sin(x ** 2) * -1
12
13 #目标函数2
14 #def myfunc2(x1, x2):
15 #return (1 - x1) ** 2 + 100 * (x2 - x1 ** 2) ** 2
16
17
18 #遗传算法: 选择, 交叉, 变异
19 classGA(object):20
21 def __init__(self, func, lbounds, ubounds, population_size=300, maxIter=500, pm=0.01, speed=3, cf=0.1):22 self.func = func #目标函数
23 self.lbounds = lbounds #搜寻下界
24 self.ubounds = ubounds #搜寻上界
25 self.population_size = population_size #种群规模
26 self.maxIter = maxIter #最大迭代次数
27 self.pm = pm #变异概率(0, 1)
28 self.speed=speed #种群收敛速度[1, +∞)
29 self.cf = cf #交叉因子(0, 1)
30
31 self.size = len(lbounds) #搜索空间的维度
32 self.best_chrom_fitness = list() #最优染色体(染色体, 适应度)迭代记录列表
33 self.__record_fitness = list() #种群适应度迭代记录列表
34
35 defsolve(self):36 #种群随机初始化
37 population = self.__init_population()38 #记录种群最优染色体信息
39 self.__add_best(population)40
41 for i inrange(self.maxIter):42 #种群更新
43 population = self.__selection(population)44 population = self.__crossover(population)45 population = self.__mutation(population)46
47 #上一代最优个体无条件保留至下一代
48 population[0] = self.best_chrom_fitness[-1][0]49 #记录种群最优个体
50 self.__add_best(population)51
52 self.solution = self.best_chrom_fitness[-1]53
54 #选择: 轮盘赌方法
55 def __selection(self, population):56 #适应度排序
57 fitness = self.__cal_fitness(population)58 new_fitness = sorted(list((ele, idx) for idx, ele in enumerate(fitness)), key=lambda item: item[0], reverse=True)59 #轮盘区间计算 -> 采用多项式函数对收敛速度进行调整
60 roulette_interval = self.__cal_interval()61 #随机飞镖排序
62 random_dart =sorted(numpy.random.random(self.population_size))63
64 new_population =list()65 idx_interval = idx_dart =066 while idx_dart <67 if random_dart>roulette_interval[idx_interval]:68 idx_interval += 167>
69 else:70 new_population.append(population[new_fitness[idx_interval][1]])71 idx_dart += 1
72
73 #顺序打乱
74 numpy.random.shuffle(new_population)75 returnnew_population76
77 #交叉: 对称凸组合
78 def __crossover(self, population):79 #交叉随机数 -> 采用交叉因子提高计算精度
80 alpha = numpy.random.random(self.population_size - 1) *self.cf81
82 for idx in range(self.population_size - 1):83 new_chrom1 = alpha[idx] * population[idx] + (1 - alpha[idx]) * population[idx + 1]84 new_chrom2 = alpha[idx] * population[idx + 1] + (1 - alpha[idx]) *population[idx]85 population[idx] =new_chrom186 population[idx + 1] =new_chrom287
88 returnpopulation89
90 #变异: 全空间变异
91 def __mutation(self, population):92 #变异概率随机数
93 mutation_prob =numpy.random.random(self.population_size)94
95 for idx, prob inenumerate(mutation_prob):96 if prob <=self.pm:97 #变异幅度随机数
98 mutation_amplitude = numpy.random.uniform(-1, 1, self.size)99 for idx_dim, ampli inenumerate(mutation_amplitude):100 if ampli >= 0: #正向变异
101 population[idx][idx_dim] += ampli * (self.ubounds[idx_dim] -population[idx][idx_dim])102 else: #负向变异
103 population[idx][idx_dim] += ampli * (population[idx][idx_dim] -self.lbounds[idx_dim])104
105 returnpopulation106
107 #种群随机初始化
108 def __init_population(self):109 population =list()110
111 for i inrange(self.population_size):112 chrom =list()113 for j inrange(self.size):114 chrom.append(numpy.random.uniform(self.lbounds[j], self.ubounds[j]))115 population.append(numpy.array(chrom))116
117 returnpopulation118
119 #种群适应度计算
120 def __cal_fitness(self, population):121 fitness = list(self.func(*chrom) for chrom inpopulation)122 returnfitness123
124 #记录种群最优染色体信息
125 def __add_best(self, population):126 fitness = self.__cal_fitness(population)127 self.__record_fitness.append(fitness)128 min_idx =numpy.argmin(fitness)129 self.best_chrom_fitness.append((population[min_idx], fitness[min_idx]))130
131 #轮盘区间计算
132 def __cal_interval(self, speed=2):133 tmp = (numpy.arange(self.population_size) + 1) /self.population_size134 tmp_normalize = tmp / (self.population_size + 1) * 2
135
136 roulette_interval =list()137 curr_sum =0138 for item intmp_normalize:139 curr_sum +=item140 roulette_interval.append(curr_sum)141
142 roulette_interval = numpy.array(roulette_interval) **self.speed143 returnroulette_interval144
145 #求解过程可视化展示
146 defdisplay(self):147 fig = plt.figure(figsize=(8, 5))148 axes =plt.subplot()149 axes.plot(self.__record_fitness, 'g.')150 axes.plot(numpy.array(self.__record_fitness).sum(axis=1) / self.population_size, 'r-', label='$meanVal$')151 axes.set(xlim=(-1, self.maxIter+1), xlabel='$iterCnt$', ylabel='$fitness$')152 axes.set(title = 'solution = {}'.format(self.solution))153 axes.legend()154 fig.savefig('myGA.png', dpi=500)155 plt.show()156 plt.close()157
158
159 if __name__ == '__main__':160 ins = GA(myfunc1, [-9], [5], population_size=100, maxIter=1000, pm=0.01, speed=1, cf=0.1)161 #ins = GA(myfunc2, [-10, -10], [10, 10], population_size=100, maxIter=500, pm=0.3, speed=1, cf=0.1)
162 ins.solve()163 ins.display()
python 遗传算法书籍推荐_遗传算法(1) - Python实现相关推荐
- python国内书籍推荐_这些都是Python官方推荐的最好的书籍
转行学Python有前途吗?这个答案是肯定的,AI课程都已经进入小学教材了,未来Python趋势无疑是光明的,但是如何学习Python,很多Python小白都来问小编有什么适合的Python入门书籍推 ...
- 新手学python书籍推荐_新手学python看哪本书
对于零基础入门的人来说,对于Python的学习还是有点懵懵懂懂的,如果有一些书籍先看看来引导,学起来难度也会减低很多!所以,学python倒是向大家推荐这些书籍! 1.<PYTHON基础教程(第 ...
- python高分书籍推荐_如果只能推荐一本 Python 书,我一定 Pick 它
前段时间,我偶然看到了一条推特: <流畅的Python>一书的作者发布了一条激动人心的消息:他正在写作第二版! 如果要票选最佳的 Python 进阶类书目,这本书肯定会是得票率最高的书籍之 ...
- python高分书籍推荐_如果只推荐一本 Python 书,我要 Pick 它!
今年二月初,我偶然看到了一条推特: <流畅的Python>一书的作者发布了一条激动人心的消息:他正在写作第二版! 如果要票选最佳的 Python 进阶类书目,这本书肯定会是得票率最高的书籍 ...
- python国内书籍推荐_久等了,你要的 Python 书籍推荐,来了!
前言 时不时有小伙伴私信问我有什么好一些的 Python 书籍推荐,想要学习学习. 那么今天就来给大伙说道说道,我会划分为以下几个分类,让不同阶段的朋友可以根据自身的情况,选择适合自己当下学习的 Py ...
- python高分书籍推荐_史上最全的Python书排行榜|你想知道的都在这里
原标题:史上最全的Python书排行榜|你想知道的都在这里 感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习,问答.求职一站式搞定 ...
- python软件测试书籍推荐_自学软件测试看什么书入门比较好呢?
截止到2019年10月底,本回答已经更新3126字,分不同阶段推荐了13本经典书籍,关注我,持续更新! ----------///分割线///---------- 原回答: 书不在多,关键是精! 入门 ...
- python统计学书籍推荐_推荐 | 统计数据分析挖掘书单呈现
给大家推荐一些统计.分析.挖掘书籍,推荐语包括购买地址后面慢慢在补充.大家有好的书籍也可以推荐,持续连载中..封面这个本书也非常给力,31位作者合力写的,到时候也给大家推荐下. 统计学 <看穿一 ...
- python统计学书籍推荐_一位90后统计学硕士的深悟:统计其实有门道!AI还能这样学!(精荐40本书+20视频资源...
答:曾经,在经管之家有三个帖子刷新了我的计量观,了解到光明学术下计量实证的"潜规则".所以,在这介绍的是"黑科技","正义凛然"的看客请绕行 ...
- python自学书籍推荐豆瓣-想学python,请问有没好的书籍推荐?
很多人在问,学习Python读什么书,这其实是一个非常通用的问题,学习分为三种方式:看书.上课.培训,而读书学习是最实惠也是最高效的一种,下面我们推荐6本高分书籍给大家,希望大家学习愉快: 1.Pyt ...
最新文章
- 模拟实现请求分页虚存页面替换算法_模拟卷二解答
- linux的变量用法
- c# webrequest 自动登入网站
- 关于量子计算机 (3)
- 【学习笔记】7、标准数据类型—字符串
- es6 语法 (Decorator)
- ubuntu编译mysql源码
- php无限次执行函数,php-PHP一个方法根据传递值怎么执行多次?
- 全国计算机基础知识考试题型,盘点 | 全国计算机等级考试一般考哪些内容?
- 什么,容器太多操作不过来?我选择Docker Compose梭哈
- init是一个自定义方法名
- centos6.5 yum安装php5.5,mysql5.5.46 ,aphche 2.2.15
- C++fseek函数
- 1110_win10专业版官方原版镜像64位
- 世界芯中国芯RISC-V相关资源及进展
- 比特率和波特率的关系
- fastadmin 多表关联查询
- 笔记本电脑计算机里面怎么管理,笔记本电脑如何分区,详细教您笔记本电脑怎么分区...
- Joint Extraction of Entities and Relations Based on a Novel Tagging Scheme阅读总结
- Xposed获取微信个人信息