热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

去年开始的一个业余项目(有关实时进化),欢迎大家给点意见

开始的小测试环境上图是前天构造的一个测试小环境,模拟个体能够获得(得到输入)自己的当前速度、角度、HP以及最近目标的相对位置,离目标越近HP减少得越慢,存活时

开始的小测试环境


        上图是前天构造的一个测试小环境,模拟个体能够获得(得到输入)自己的当前速度、角度、HP以及最近目标的相对位置,离目标越近HP减少得越慢,存活时间越长者适应度越高。刚开始的情况是完全随机,模拟个体完全在一个随机的最小结构神经网络的支持下处理自己的输入。这样的设置相当简单,程序员几乎不做什么工作!接下来就是运行,运行,再运行。个体会不断地发生变化最终达到这个小环境设计者心里的样子吗?到底明天它会不会自动设计出策划要求去达到这个简单任务的NPC呢?
 

        几个月前,我为自己的一个实验性项目构建的分布式模拟环境基本就绪。该环境采用了HLA网络结构组建,基本上完成了对HLA核心网进行的二次封装,另外构造了一个广域网的扩展接入系统方便更广泛的人机交互!目前这个体系的基本稳定为我的试验项目奠定下了第一个基础。

        这三年来我一直致力于图形引擎的开发和应用工作,之前在MSRA的纯图形学以及图形硬件的研究工作也奠定了足够的图形基础,因此对这个试验项目而言,一个较为完善的软件研究平台和图形支持系统也很快基本成型,并且能够很方便地投入到研究和设计工作中去。这可以说是试验项目的第二个基础。

        前段时间,我在这个平台上对随机宇宙(过程宇宙——Real-Time Procedural Universe,这方面主要研究自动、随机地生成各类拟真的图形、图像、逻辑内容)的一些基础算法、架构的研究模拟和实现(link),使得我更加确信CH系统在内容上人机交互的支持能力也一定会相当强大,特别是对人机图形界面,任何内容的变化都能实时表现在远程的图形客户端上。

 

        两个月前,我觉得系统底层的一些必要支持已经基本到位,于是我开始构造这个项目的第三大基础架构(即CH必须是一个智能的、自组织的、演化的系统),另外我也希望能提出一种自下而上的开发方式。我知道,CH这样一个大系统,必然是一个“复杂系统”。对复杂系统的研究目前学术界也仅有几个前沿的方向,比如人工智能、人工生命、神经网络、分形、细胞自动机等理论、模型及算法。既然认为CH系统必须要是一个智能的自组织世界,就必然涉及到这些学科方向。这几年来我一直借助在游戏/网络游戏领域的工作机会,探索它们应用的可行性,但长期来对人工智能的有限应用总是让人找不到方向。要么必须在一些明确的问题域上面求得具体的实现(比如A Star),要么必须要找到游戏内容相关的复杂具体模型(比如路点模型、有限状态机模型等等),这对程序开发人员和策划人员来说实际上都是很痛苦的。严格的说,目前我在游戏上的这些工作还谈不上与复杂系统有什么关系,仅仅是一些自上而下的常规开发策略。

        幸喜的是,早就有不少游戏/软件开发公司开始尝试类似自下而上的开发方式。比如,据说Maxis公司的《模拟城市》近几个系列中就采用了人工神经网络技术;不少单机策略或者射击游戏中,开发公司在设计时也离线进化了不少游戏角色和策略;EA在最新的模拟类游戏Spore(孢子)中也很可能采用了一些进化方面的算法或者技术。

        其实在复杂系统中,细胞自动机、神经网络、进化算法、粒子群算法(比如蚁群算法)等领域都是具有良好的应用前景(当然是什么时候大规模应用我们就不去追究了),开始我打算直接在CH系统中使用人工神经网络(ANN),但是在试验中发现,ANN除了本身需要一个较为难描述的环境模型外(特别是实际游戏应用,网游就更不用说了),如果要达到一个通用的、优秀的、无监督的求解性能的话,ANN的算法也是要相当考究的,目前这方面也正是ANN领域研究的重中之重。应此在游戏应用或者模拟研究中,我觉得不大可能寻求到一个现实的实时自适应ANN系统来满足要求,而且毕竟我们不是搞研究而是搞应用的。


一个反相传播的神经网络。设计这样一个网络对于复杂输入和输出的环境来说“几乎”是不可能的。



         为此前段时间我投入到细胞自动机、蚁群算法等领域中去找寻一些应用上的可能点。都怪“元胞自动机(CA)”前不久闹得很火,霍夫曼(自称CA之父)也曾大言不惭CA能颠覆人类得一切科学,谓之“新科学”。拜读其大作以及进行一些试验后,发觉一些思想确实非常新颖独到,很多试验也相当有趣。但是总觉得对CA的研究大多以证明某某理论为结果,没有一点预测能力(即科学的理论总是可以预测的),总有点事后诸葛的感觉。我也很难从CA引出一些能辅助设计的路子来(nb的霍夫曼认为“宇宙就是一巨大的CA,除了实实在在地注视、观看这些规则会如何呈现其结果之外,没有任何办法去预先知道这些结果”,那研究这个理论有个P用啊)。况且它和蚁群算法一样,问题域或者空间维数的增大不可避免地需要庞大的甚至不且实际的计算量(这点蚁群算法还算好些)。



        一个有趣的报告是Wolfram公司的Paul Jean做的,他研究基本细胞自动机(Elementary Cellular Automata,ECA)家族中的第146号,发现了一个奇特的现象。以某个特定的初始条件开始,146号ECA在经过300多步演化之后会突然出现一个相变行为:本来随机排列的一些黑白方格在一个时间步内突然集体变成了白色,并且这个白色区域经过几步演化之后逐渐衰退,因而会在时间图上留下一个大的三角形区域。
        这种现象对于146号ECA来说属于一种极其罕见的行为:只有在特定的初始条件才能发现,Paul称这一现象为Monolith,即“独石碑”。Wolfram常常把自己发明的细胞自动机比喻成当年伽利略发明的望远镜,透过先进的工具,我们可以得到一些全新的科学观察。


 

        Spore这样的游戏让我看到了另外一个可能方向——进化。从Spore的介绍以及细节上看来,似乎不是严格意义上的实时进化,而且也不大可能会有形态上面的进化(形态进化需要更为有效的图形学理论以及强大的计算能力)。游戏过程仍然是处于人为选择或者策划设定的进化模拟,大多数内容仍然是事先设定好的,不过模型的有机化和进化的思想和表现倒是其卖点。Spore的发行一拖再拖,似乎Will Wright(就是开发《模拟城市》和《模拟人生》那个家伙哈)不把它做得完美就不罢休似的,所以最终版本出来是什么样子还不得而知,期待中…… ^-^

        在Spore这个游戏感受的诱惑下,我考查了许多进化相关的游戏或者软件系统的资料和Paper,国际上也有很多的小项目组专门做这方面的探索,从各种复杂系统小程序到Tierra/Avida的代码进化,从Framsticks的形态行为进化到AI.Planet那漂亮的生物乐园。真还没有想到,居然处处都有进化人工生命的影子! 



Panspermia中进化出来的生物和世界



           
           
[align=center]

[/align]
  Framsticks: 
               1. A creature made of sticks, each is specialized in some function. You can see three receptors – touch, smell, equilibrium, and a red muscle. 
               2. Underwater creature seeking energy.
               3. Hunt: a creature trying to catch and kill the other one. 


                                                    
AI.Planet中丰富的进化世界



        对GA(遗传算法)的详细考查过后,我决心将遗传算法简洁高效的进化思想应用到CH系统中来,正巧我已经准备好了一个很好的HLA模拟体系,加上对ANN比较熟悉,我选取了来自NNRG(nerual netwaoks research group)的一些研究成果来进行攻关和改进。NNRG虽然看起来仅是国际上的一个神经网络研究小组(The group is part of the Artificial Intelligence Lab in the Computer Science Department at the University of Texas at Austin),但是从它的研究领域和项目中可以看到,它对基于NN应用的一个很大领域都有涉猎,而且它融入了很多其他领域的成果。NNRG有个NEAT项目,是一个关于自适应地从简单到复杂构造一个满足问题域的神经网络,适应算法上又采用了GA的思想,应此性能和效果都比较好,对我而言它更重要的是还不用关心NN的具体模型和优化细节!有趣的是,NNRG甚至也出了一个游戏,叫NERO,可以离线进化一些很好的策略来进行战斗对抗。
        我现在拥有的HLA核心网络上可以进行较好的分布式模拟,因此我对NEAT进行了改进,将基因的进化和ANN的适应度评估和应用较独立的分开来。应用NEAT的实时进化特性(rtNEAT),加上我对核心网扩展的广域网接入系统,人类(玩家)也可以很好的加入互动,这样设计有利于未来在网络游戏具体项目上的应用。

 

        由于基因的进化在服务器上进行,并且可以随时保存和重加载,以网络游戏的角度来看,实时进化在不间断的人机互动中可以表现得很好。再从游戏的设计上来看,策划无需设定甚至分析具体的任务实现过程(特别是NPC),程序员不用为实现这个过程煞费苦心做复杂的设计(况且每个程序员设计出来的算法不一定就是最优的,策划也不一定具有相当丰富的专业知识和经验。而遗传算法在理论上来说就可以达到全局最优),所有的设计工作都是在长期的在线运行和与环境(甚至真人)的互动中进化达成;策划也可以设定广泛的游戏环境和属性(这目前是策划大量的工作)而不用再担心诸如增加一个属性就会造成各个系统的相应修正和程序配合修改这种事情(比如NPC从不能攻击到支持攻击,环境中新增加一种叫做“food”的道具)。
       经过这段时间的试验,我想再从策划的角度来看,策划设计一个东西就可以考虑是走自上而下的分析路子,还是较为傻瓜的自下而上的新路子了!目前我只是提出这样一个设计方向,还有待进一步试验来观察它的实际应用效果。


       BTW,由于这个小环境试验前几天才设定好,这几天还没有来得及去运行它,反正进化的基因可以保存和再加载,可以说设计过程是连续的,每天都可以出新花样。所以我在接下来的日子可以经常报告这个CH小世界的情况,多多截屏。比如下周发现新进化出(设计出)了一个光吃不打的farmer类角色或者一个光打不吃的warrior类角色;又或者在下周某天我加入了一种新的食物类obj或者阻挡类obj,他们又会涌现(复杂系统??)出某些行为模式出来。暂且将之后这类日志归入博客上的“CH世界大事记”一栏吧,嘿嘿。

[实验正在继续,我写了详细日志在我的博客上:http://xiaopplus.blog.163.com,欢迎提出建议]

http://xiaopplus.blog.163.com/blog/static/46019200710262314684/  
这是我一个简单的试验,用以测试神经网络进化的基本算法
http://xiaopplus.blog.163.com/blog/static/460192007102691746685/
这是我尝试环境改变的试验
http://xiaopplus.blog.163.com/blog/static/4601920071114817135
这是我近期的一个试验,尝试将NN的输入输出进一步连接上抽象的生物体器官,并且试图用一个简化的“发育”算法来增强“进化神经网络”的应用性,欢迎给出建议。
http://xiaopplus.blog.163.com/blog/static/46019200825113344256/
http://xiaopplus.blog.163.com/blog/static/4601920082111441568/
这是我在重新编码后采用新的资源和环境设定的一些有趣的试验

1 个解决方案

#1


很有意思

推荐阅读
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 最近遇到了一道关于哈夫曼树的编程题目,需要在下午之前完成。题目要求设计一个哈夫曼编码和解码系统,能够反复显示和处理多个项目,直到用户选择退出。希望各位大神能够提供帮助。 ... [详细]
  • 事件是程序各部分之间的一种通信方式,也是异步编程的一种实现形式。本文将详细介绍EventTarget接口及其相关方法,以及如何使用监听函数处理事件。 ... [详细]
  • 深入理解Redis中的字典实现
    本文详细介绍了Redis中字典的实现机制,包括其底层数据结构、哈希表与哈希节点的关系、元素添加方法及rehash操作的具体流程。 ... [详细]
  • 普通树(每个节点可以有任意数量的子节点)级序遍历 ... [详细]
  • 本文详细介绍如何使用Netzob工具逆向未知通信协议,涵盖从基本安装到高级模糊测试的全过程。通过实例演示,帮助读者掌握Netzob的核心功能。 ... [详细]
  • WCF类型共享的最佳实践
    在使用WCF服务时,经常会遇到同一个实体类型在不同服务中被生成为不同版本的问题。本文将介绍几种有效的类型共享方法,以解决这一常见问题。 ... [详细]
  • 华为捐赠欧拉操作系统,承诺不推商用版
    华为近日宣布将欧拉开源操作系统捐赠给开放原子开源基金会,并承诺不会推出欧拉的商用发行版。此举旨在推动欧拉和鸿蒙操作系统的全场景融合与生态发展。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • 短暂的人生中,IT和技术只是其中的一部分。无论换工作还是换行业,最终的目标是成功、荣誉和收获。本文探讨了技术人员如何跳出纯技术的局限,实现更大的职业发展。 ... [详细]
author-avatar
holy190
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有