遗传算法 100个三角形绘制Firefox图标

学习遗传算法

为了了解遗传算法的基本原理,阅读了遗传算法GA(Genetic Algorithm)入门知识梳理,之后选择了一个简单的问题学习代码:使用遗传算法求解y=x*x(x∈0-31,x是整数)的最大值,参考遗传算法_求最大值这篇文章。感谢这两篇文章的作者。

随后在网上发现科学松鼠会 遗传算法:内存中的进化这篇介绍,觉得很有意思,可以通过遗传算法用100个三角形绘制出Firefox图标,想自己去实现它。

因为对OpenCV比较熟悉,就使用该工具进行图像处理,但是貌似OpenCV没有自带的绘制半透明三角形的方法,感谢OpenCV基本绘图两个半透明颜色色的叠加计算方法文章的作者,在此基础我有了更好的思路。

实现方法:

参考科学松鼠会的思路,下面是我的实现方法:

创建初始群体

  1. 种群内扇贝个数设定为16。
  2. 每个扇贝壳上有100个半透明三角形。每个三角形的三个点与颜色随机生成。
  3. 使用OpenCV绘制该扇贝,与理想图片逐像素对比,计算出该扇贝适应度(适应度=像素点个数*通道数/所有像素点4通道差值累积和)。

交叉

  1. 随机寻找两扇贝配对。
  2. 100个三角形内随机寻找n个三角形,两扇贝进行交叉操作。

变异

  1. 某个扇贝随机一个三角形的三点与颜色变异。

更新适应度

选择

  1. 淘汰适应度最低的两个扇贝。
  2. 为保持种群数量不变,其余扇贝内随机寻找两扇贝交叉补缺位。

运行参数

  1. 交叉率:0.86
  2. 变异率:0.1
  3. 迭代次数:180000
  4. 种群大小:16
  5. 三角形个数:100

微调

  1. 选择算子:轮盘赌算法(容易早熟),淘汰最低两个交叉补缺位(目前所用的方法)。
  2. 变异算子:变异两个三角形,变异一个三角形(两方法差别不大)。
  3. 变异率:0.2(过高,种群适应度增长缓慢),0.1(目前所用的值).
  4. 理想图像分辨率:128 * 128(渲染速度过慢),32 * 32(目前所用的值)。

实验效果

Firefox理想图标:
Firefox理想图标
遗传算法180000代最优扇贝:
这里写图片描述
遗传算法历代最优扇贝:
这里写图片描述

比较看出:实验结果30000代时已经形成了基本的轮廓,之后增长速度趋于缓慢。虽然基本轮廓形成了,但是细节不好,并且迭代次数过多,与科学松鼠会 遗传算法:内存中的进化文章中贴出的算法结果相差很多,应该是我有很多细节、优化方面没考虑到。

实验代码

TuanZ7/GA-Firefox

Related Articles
Genetic Programming: Evolution of Mona Lisa
Source Code: Genetic Programming: Evolution of Mona Lisa
遗传算法 三角形

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值