通过遗传算法使用100个半透明三角形绘制Firefox图标。(需要OpenCV环境)
参考科学松鼠会 遗传算法:内存中的进化的思路,下面是我的实现方法:
- 种群内扇贝个数设定为16。
- 每个扇贝壳上有100个半透明三角形。每个三角形的三个点与颜色随机生成。
- 使用OpenCV绘制该扇贝,与理想图片逐像素对比,计算出该扇贝适应度(适应度=像素点个数*通道数/所有像素点4通道差值累积和)。
- 随机寻找两扇贝配对。
- 100个三角形内随机寻找n个三角形,两扇贝进行交叉操作。
- 某个扇贝随机一个三角形的三点与颜色变异。
- 淘汰适应度最低的两个扇贝。
- 为保持种群数量不变,其余扇贝内随机寻找两扇贝交叉补缺位。
- 交叉率:0.86
- 变异率:0.1
- 迭代次数:180000
- 种群大小:16
- 三角形个数:100
- 选择算子:轮盘赌算法(容易早熟),淘汰最低两个交叉补缺位(目前所用的方法)。
- 变异算子:变异两个三角形,变异一个三角形(两方法差别不大)。
- 变异率:0.2(过高,种群适应度增长缓慢),0.1(目前所用的值).
- 理想图像分辨率:128×128(渲染速度过慢),32×32(目前所用的值)。
比较看出:实验结果形成了基本的轮廓,但是细节不好,并且迭代次数过多,与科学松鼠会 遗传算法:内存中的进化文章中贴出的算法结果还是有距离的。
详见issue#1优化意见