遗传算法的入门实现(2):利用正方形拼接firefox

这段程序没有参考网上的任何代码,属于自己独立完成,因此效果也不是很理想。但是不管怎样,我也花了不少心思研究,就当是述说一下自己的思路吧:

(1) 首先为什么不用三角形来进行填充呢?因为三角形的绘制和填充本身来说不是一件很容易的事情(对于我来说,虽然我参考了一下网上的算法,已经有了基本的思路,但是还是把精力放在遗传算法上面是重点),而使用正方形则很大的减少了编程的难度。

(2) 其次在染色体的选取上也有很多学问,我的染色体就是正方形,每个正方形只有一种颜色(最开始我是采取的每一个正方形的象素点都可以是任意颜色,但是因为交叉的时候需要做拷贝,这样开销很大,所以就选择颜色固定)

(3) 其次正方形之间没有重叠,其实我最开始时按照重叠来设计的,但是我比较傻逼,不知道怎么处理重叠的颜色(其实正确的思路是按照透明度混合),但是当时由于闭门造车,我选择了加起来再取余。。。这样做的结果是没有什么太多的意义,而且开销不小。所以我又把重叠的代码改为不重叠的了。。。

(4) 交叉和变异,注意交叉需要拷贝,而变异不需要,同时交叉的时候我们需要交换大量的染色体(正方形),这里就涉及到了很多东西,如果基本图形可以重叠的话,那么交换图形其实等价于:(删除掉一个正方形,添加上一个正方形两个操作),这里我最开始是实现了add和delete这两个操作的,可以将一个图形去掉对应的正方形,同时更新误差。但是后来由于设计思路变化,又删除掉了。如果不重叠,那么就直接交换相应的染色体就好了,误差的计算统一推迟到每一次进化的开头。

(5) 误差的计算,这里的适应函数怎么定义呢?其实根据误差(和原始图像的像素色差),我们可以利用 1

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值