javascript的代码进化

2012-03-02 14:43:49 +08:00
 chone
写javascript代码什突然有个想法,既然可以轻松得重写一个对象得某个方法。那么让一个对象可以自我繁殖,并且后代的对象可以发生某些不同的变化,再根据这个方法的返回结果进行选择,是不是可以促使代码向我们期望的返回值方向进化呢?

于是写了一个小的例子。
http://jsfiddle.net/cdba9/8/

bot有一个方法feed,用他来处理字符串'Hello world!',我们期望feed能返回'world'
起初feed方法什么也不做。
bot.feed = function(s){};

bot本身在生命周期中能进行一定次数的自我繁殖,在繁殖时我们直接取bot.feed.toSting(),然后把这段代码得字符进行随机得修改,然后写进后代的feed
后代的feed看起来是这样的
child.feed = function(s) {
return /* 新的code */
};

如果某个bot的feed方法能返回一个和'world'比较相近的字符串,他将得到相应增加的繁殖机会。以此来使得有效得code能更多的在后代中保留下来。

我运行了一段时间,还没有看到特别牛x的新code生成,不过code为's',也就是
bot.feed = function(s) {
return s;
};
这样的子代已经经常能看到

如果这个过程得以一直继续会不会出现
return s.match(/world/)[0] 或者 return 'world'
这样牛x的后代呢 xD
4547 次点击
所在节点    随想
14 条回复
bitsmix
2012-03-02 15:03:15 +08:00
caomu
2012-03-02 15:04:37 +08:00
进化算法?
虽不懂,但觉厉。
caomu
2012-03-02 15:05:37 +08:00
进化算法?
虽不懂,但觉厉。
chone
2012-03-02 15:09:11 +08:00
@caomu 非算法层面,只是想简单模拟类似 过度繁殖 -> 基因突变 -> 自然选择 这个过程。
Mrxx
2012-03-02 15:16:49 +08:00
由分子变成单细胞用的时间实在太长了
要是从细胞开始进化或许速度快一些
skywinger
2012-03-02 15:24:22 +08:00
人工智能 A.I.??
chone
2012-03-02 15:26:43 +08:00
我观察到
先是 return s; 较为稳定的出现在子代里,
然后某一次出现了 return m=s; 这样的子代
再后来 return m; 这样的子代也逐渐稳定下来

我觉得结局是最终出现了 return bot=null; 的子代,bot从此灭亡。。。
caomu
2012-03-02 15:34:39 +08:00
这也是(有些人认为的)生物的未来,基因的最终归宿就是毁灭自己。
aligo
2012-03-02 15:36:51 +08:00
很好玩的想法-v-
其实不一定用javascript来实现,其他东西也是可以的

“如果某个bot的feed方法能返回一个和'world'比较相近的字符串,他将得到相应增加的繁殖机会。”

这个设定我觉得还值得讨论。
没准人家一开始很不像,突然之间变得很像了也不一定。
但是除开这点了之后,就会变成无休止的暴力算法。

啊,说得我也想玩了orz
caomu
2012-03-02 15:45:49 +08:00
霍,把哲学家 @aligo 勾出来了。
不过进化确实是要加以一定压力才行的嘛。
这种“美丽的”游戏,确实很吸引人。
aligo
2012-03-02 15:50:24 +08:00
不如先试试二维平面的打击点算法吧
这样只需要用加减乘除和数字来组合return后面的东西
打中了就活下去可以生一胎,然后下轮继续打;打不中就马上去死
看看最后能不能生成一个集合解析式
goldenlove
2012-03-02 16:25:29 +08:00
有点意思。。。 不过貌似除了 Hello world,剩下的都是一堆乱码呀。。
它啥时候能学会人类自然语言?- -
goldenlove
2012-03-02 17:10:06 +08:00
bot353385 $Ka=s

跑出了个比较靠谱的儿子。。- -
dreampuf
2012-03-02 20:50:01 +08:00
机器学习 遗传算法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/28585

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX