V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chone
V2EX  ›  随想

javascript的代码进化

  •  
  •   chone · 2012-03-02 14:43:49 +08:00 · 4586 次点击
    这是一个创建于 4642 天前的主题,其中的信息可能已经有所发展或是发生改变。
    写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
    14 条回复    1970-01-01 08:00:00 +08:00
    bitsmix
        1
    bitsmix  
       2012-03-02 15:03:15 +08:00
    caomu
        2
    caomu  
       2012-03-02 15:04:37 +08:00 via Android
    进化算法?
    虽不懂,但觉厉。
    caomu
        3
    caomu  
       2012-03-02 15:05:37 +08:00 via Android
    进化算法?
    虽不懂,但觉厉。
    chone
        4
    chone  
    OP
       2012-03-02 15:09:11 +08:00
    @caomu 非算法层面,只是想简单模拟类似 过度繁殖 -> 基因突变 -> 自然选择 这个过程。
    Mrxx
        5
    Mrxx  
       2012-03-02 15:16:49 +08:00
    由分子变成单细胞用的时间实在太长了
    要是从细胞开始进化或许速度快一些
    skywinger
        6
    skywinger  
       2012-03-02 15:24:22 +08:00
    人工智能 A.I.??
    chone
        7
    chone  
    OP
       2012-03-02 15:26:43 +08:00
    我观察到
    先是 return s; 较为稳定的出现在子代里,
    然后某一次出现了 return m=s; 这样的子代
    再后来 return m; 这样的子代也逐渐稳定下来

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

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

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

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

    跑出了个比较靠谱的儿子。。- -
    dreampuf
        14
    dreampuf  
       2012-03-02 20:50:01 +08:00
    机器学习 遗传算法
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1011 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:16 · PVG 04:16 · LAX 12:16 · JFK 15:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.