通过遗传算法使用150个半透明三角形绘制Firefox图标。(需要OpenCV环境,我的机器上用的OpenCV4.5.5)
参考科学松鼠会 遗传算法:内存中的进化的思路,下面是我的实现方法:
- 种群内扇贝个数设定为16。
- 每个扇贝壳上有150个半透明三角形。每个三角形的三个点与颜色随机生成。
- 使用OpenCV绘制该扇贝,与理想图片逐像素对比,计算出该扇贝适应度。
- 随机寻找两扇贝配对。
- 150个三角形内随机寻找n个三角形,两扇贝进行交叉操作。
- 某个扇贝随机找到一个三角形,随机变异某个点的横纵坐标或颜色分量。
- 淘汰适应度最低的两个扇贝。
- 为保持种群数量不变,其余扇贝内随机寻找两扇贝交叉补缺位。
- 交叉率:0.86
- 变异率:0.1
- 迭代次数:180000
- 种群大小:16
- 三角形个数:150
- 像素差阈值:5
- 选择算子:轮盘赌算法(容易早熟),淘汰最低两个交叉补缺位(目前所用的方法)。
- 变异算子:变异两个三角形,变异一个三角形(两方法差别不大)。
- 变异率:0.2(过高,种群适应度增长缓慢),0.1(目前所用的值).
- 理想图像分辨率:128×128(目前所用的值)。
Firefox理想图标及遗传算法最优扇贝:
Firefox遗传算法历代最优扇贝:
MonaLisa理想图标及遗传算法最优扇贝:
MonaLisa遗传算法历代最优扇贝: