google reader上发现了一篇好玩的文章(链接见下)。 http://alteredqualia.com/visualization/evolve 大意是使用随机的没有规律的多边形不断的叠加,叠加的时候使用进化算法(模拟退火算法),从而渐进式的方式还原得到与原来类似度很高的画。 这个想法颠覆了我对于画画的认识,至少是我个人的认识。还原图画的画,不需要精确的描画,随便用几个多边形拼拼凑凑就就能够还原出跟原来的额画像逼真度蛮高的画像,真是满不可思议的。 由此可见,进化的力量确实是相当的厉害啊。 上面的链接中是使用javascript写的,源代码没有给出。给了一个下面的链接,是C语言版本的。 http://github.com/mackstann/mona 为了了解模拟退火算法,我还特地查了一下,大概了解了个大概。 然后看了看代码,发现这份C代码并没有完全的按照模拟退火算法的思路来做进化活着演变。是一个简单的每次随机演变,合适就取最优,不合适就继续进化选取合适的图形。 而且每次演变前判断得到的图形和目标图形的区别,是直接将整个图形所有像素的rgb值相加,然后判断总值相差多少。 这个比较方法很明显实现起来比较的容易,但是有没有什么更加好的更真实的反映差别的比较方法呢?(我也没想到什么好的东西) 而且感觉这份代码并不是很优化,可能实际执行起来收敛的效果并不是很好。是不是更加的按照退火算法的思路来就会收敛的更加快呢?(unix-center的主机上没有cairo库,貌似不能执行这份代码...) 所以感觉这份代码还有改进和优化的地方。 还是先把注释过的代码发出来吧。