A003-算法-遗传算法-绘图-(ques=1)

根据科学松鼠会的 文章《遗传算法:内存中的进化》设计下面的实现步骤。

文章地址:http://songshuhui.net/archives/10462


目标:

100个同一物种的生物[A0,A99],设计一个约束条件进化步骤,使得他们经过N代的演化之后、生物个体的外貌如下变化:

从随机的外貌 变成 和 长得像Firefox图标。

物种A的个体特征:

1、由 100个三角形 组成
2、每个三角形 的大小随机(在 [size_min,size_max]之间)
3、每个三角形 的颜色随机(在 [0,255]之间、共 256色可选)
4、每个三角形 的位置随机(在个体身体之内 [正方形坐标内])


绘图(进化)步骤:

1、随机生成 100个个体 [A0,A99]:每个个体体内的每个 的大小、颜色、位置都随机。
2、将每个个体中都与 Firefox图标进逐像素对比,对比结果用相同的像素的 百分比表示,记为 分数C
      如果第 i个个体 Ai的第 i[k]个像素和 Firefox的第 i[k]个像素颜色差值小于 10(颜色值范围 [0,255])、
      就认为在相同位置上的像素的颜色相同,则 C+1
      例如个体 Ai56%的像素和 Firefox图标的像素相同,那么 Ai的分数 Ci=56
3、将得分最高的 5个个体组成一个组 ZZ组内相邻两个个体之间的分数差异必须小于 10,否则将它从 Z组内剔除。
4、在 Z组中进行筛选、选出 独立图像块数量最少的 2个个体(这一步有待商榷、可以不要,直接将 Z组设为只有 2个个体)。
      Ai的第 i[k]个点和周围的 8个点进行对比,颜色值相差小于 4则认为它们同属一个 独立块
5、最后得到的这 2个个体繁殖: 2个个体分别各自被拆分成 2半、每一半拥有随机的 50,得到 4半体、每个有 50,然后交叉组合得到 4个新的个体。

      连续重复25次,得到新一代的100个个体[A0,A99]
6、新一代的[A0,A99]中允许10%的个体出现繁殖/进化上的变异:随机选出10%的个体,其中的每个个体上随机出现1变异(颜色或位置随机改变)。
7、检查结果:如果任意两个个体之间的分数差值都小于4、且连续1000代都是小于4,就认为进化已经达到平衡,停止进化、输出结果(最终图像和最终是第几代)。

      否则继续下一步。至于得到的图像与Firefox图标之间的相似度是多少,这里不做保证。需要调整以上各步骤中的参数、来调整最终得到的图像。
8、跳转到第2步。


实现代码:

--question-1



..

你可能感兴趣的:(遗传算法)