![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FreedomAI
文章平均质量分 77
太宰
这个作者很懒,什么都没留下…
展开
-
[FreedomAI]第一周-ECS
作为创新实训的项目,很重要的就是创新。我们首先为了写这个算法框架首先进行了工程上的创新,使用ECS框架。ECS是什么? 这个框架十多年前可能就有了,但大概是守望先锋在GDC2016提出它后,变得非常流行起来,Unity2018也将采用ECS的编程规范。 首先我们先用文字来说说这是啥玩意。它规定你的游戏先有一个世界。这个世界下有若干实体和若干系统。每个实体由若干组件,每个系统在每一帧更新...原创 2018-04-08 14:19:57 · 231 阅读 · 0 评论 -
[FreedomAI]第八周——蚁群算法综述以及应用初衷
在研究遗传算法的时候,随带看到了蚁群算法,发现了很有意思。进而一细想,发现还在游戏的寻路中有一定应用的可能,首先,我们很头大的一个问题有时候在于,对于一大群AI,在同一帧来了一个请求,要求他们进行实时的寻路,这样我们还要不影响帧率的话,就要保证这些AI的寻路计算在1/FPS的时间内算完,但是对于A*那样的启发式算法来说,还是很有压力的。很大概率程序会直接崩掉。 蚁群算法就具备这样的好处——即使数据...原创 2018-06-01 21:11:26 · 611 阅读 · 0 评论 -
[FreedomAI第七周]遗传与生态实践篇第二部分
这一篇我们来讨论讨论牛。牛的性状有:牛的初始位置,牛的速度,牛的强壮度,牛的血量。牛的强壮度在直观表现上会体现出Cube的大小,同时也会影响减血的速度,越强壮,每秒减血的就越慢。CowObject.class:public class CowObject:GAObject { public float mStrongRate; public float mVelocity; pu...原创 2018-06-01 16:52:01 · 200 阅读 · 0 评论 -
[FreedomAI第七周]遗传与生态实践篇第一部分
上周完成了遗传算法的底层编码,这周还设计一个能体现效果的小Demo。我们使用了最简单的生产者、消费者一个循环体系。生产者是草,消费者是牛。生产者具有的性状有:草的高低、草的生长位置、草的颜色、草的血量其中草的生长位置在一个矩形区域里随机,草的颜色在黄色和绿色之间随机,草的高低在1.0-2.5倍之间变化,草的血量在500-1500变化。且草的高低将影响草的颜色,比较高的草更多的呈现黄色(用尽了生长潜...原创 2018-06-01 16:06:11 · 155 阅读 · 0 评论 -
[FreedomAI]第五周——池化技术
这项优化方法又是从别的领域借鉴来的, 最开始了解的一个东西是线程池,内存池。其实不论是线程池还是内存池,都在游戏引擎中非常常见,首先我们先介绍一下他们的应用场景,因为在游戏引擎里我们常常遇到这样一个问题,那就是内存(线程)的申请和释放非常频繁,虽然这块线程或者说内存的申请的数目或者大小不多,但是不论是内存的申请、释放或者是线程的申请、释放,都会导致要让操作系统在用户态和核心态之间还会切换,这是一项...原创 2018-05-06 12:42:11 · 284 阅读 · 0 评论 -
[FreedomAI]第五周——AI的LOD
LOD——Level of Detail,多细节层次,这本身是图形学的一个概念,在图形学中,为了对性能进行加速,我们很正常的会有这样一个想法,对于那些比较远的图元,我们是不是可以不渲染他大量的细节,而只描绘出一个轮廓呢?——而这在视觉效果上其实并不会产生太大差距,因为往往比较远的图元真正体现在图元上仅仅只是几个像素而已。由此,在图形学中,我们往往会对图元设计多个细节层次,每个细节层次都表现出不同的...原创 2018-05-06 12:19:44 · 532 阅读 · 0 评论 -
[FreedomAI]第六周——遗传算法与种群代码实现
首先是个体类:public class GAObject { public Vector3 mPosition; public float mfitness { get { return Evaluate (); } } public bool[] mbitbunch { set { mbitbunch = new boo...原创 2018-05-10 22:35:57 · 406 阅读 · 0 评论 -
[FreedomAI]第六周——遗传算法与种群综述
首先介绍什么是遗传算法。由一个问题引入,求某函数f(x)在区间[a,b]上的最大值。这看似简单,我们很快会说,求他的导数,然后等于0即可。但是往往在应用中,f(x)未知,或很难解析,这就让求导这类方法变得困难。于是科学家们联想到了生物里的进化论,给出了这样一个很有意思的求解过程。首先你先随机出一些数对,x从对应的区间中随机,y就是他们对应的f(x).干嘛呢?把他们看做进化论中的个体。x是基因型,y...原创 2018-05-10 22:21:09 · 1356 阅读 · 0 评论 -
[FreedomAI]第四周——GroupBehaviour
为了制作具有群体性行为的AI,又一次踏上了征途。群体性行为和策略,同个体行为的结构是很像的,但更复杂的是,我们的底层必要有一个机制自动的辅助系统能获得哪些AI应该被形成一个组,为了解决这个问题,我们确立了发起者和响应者。发起者会检测四周范围响应者,并加入到响应者队列里,最后在这个队列中检测出相应的组,并为这个组的成员分配编号,然后激活这个组所有实体的组行为。另外,行为节点,行为转化节点的形式也大有...原创 2018-04-30 12:39:51 · 183 阅读 · 0 评论 -
[FreedomAI]第四周——SimpleAI
上周突然发现,对于一些简易的AI,使用FSM+FuSM那一套,明显过于复杂了,对于一个很简单的AI来说,似乎只需要定义哪些情况下做哪些事情就足够了,比较粗鲁的写法就是:ifthenelse ifthenelse ifthen.................在AI的体系结构又被叫做Author Control (作者控制)。也可以叫做RBS——Rule Based System。我们要写比较清晰的...原创 2018-04-30 10:46:25 · 573 阅读 · 0 评论 -
[FreedomAI]第三周——A*寻路
上篇介绍了InfluenceMap,如果不使用这些信息,那么也是浪费的,这篇我们来看一个InfluenceMap的应用。A*寻路——我们经常遇到的一个问题是,如何让AI从一个点到另一个点。通常两点之前线段最短在这里并不适用,有可能我们需要避开那些讨厌的障碍,有可能我们需要希望分散开来夹击敌人,我们需要避开影响图上友方信息密集的区域..............这时候我们就需要用到了A*寻路算法。我们...原创 2018-04-22 14:34:54 · 218 阅读 · 0 评论 -
[FreedomAI]第三周——InfluenceMap
势力图或影响图被认为是AI进行决策时获取外界信息的一种良好方法。这些外界的信息可能包括,友方信息,敌方信息,地形及道具信息,这些东西我们如果让每个AI都用GameObject.Find....Withtag 那么可想而知,其复杂度就是N个AI*M个信息提供者。但我们如果换个思路,在每一帧内这些物品信息都是固定(甚至有一些游戏开始时就固定了),我们为什么不设置一张图预处理这些信息呢?就像我们在图形学...原创 2018-04-22 13:37:00 · 695 阅读 · 0 评论 -
[FreedomAI]第二周——DataDriveSystem
关于AI系统中涉及到的大量的数据配置,手动在Unity中进行填写是非常痛苦的一件事,所以我们想到了Excel表,我们大致想要完成这样一件事,每一行填好AI的标签或名字,填好下面的组件,组件下变量的名字,变量的数据,Excel表能完成对其的自动配置,一键配置。这其中需要用到C#中很重要的特性,反射。简单来说,反射支持你在代码中很多运行时动态绑定的特性,比如编译时不知道具体的类型,不知道具体哪个变量,...原创 2018-04-15 11:28:12 · 231 阅读 · 0 评论 -
[FreedomAI]第二周——FuSM
只使用FSM及其变种是很难应用在复杂的AI中的,因为其复杂度的扩展性很差,就比如,如果怪物有20种状态,你就需要考虑20*20种可能性的连接。所以这时我们必须建立分层次的状态机设计,试想一下,把AI的所有行为再分个类,每一类都认为是一种策略(事实上我们人的大脑也很类似这样,比如我们去攻击一个人,我们选择什么方式攻击、什么方式假动作是大脑思考好的,但之下的出拳这些动作确是自然而然做出来,虽然攻击策略...原创 2018-04-15 10:47:35 · 762 阅读 · 0 评论 -
[FreedomAI]第一周——FSM
FSM是用的非常成熟的技术,不过我们在算法框架上加入了自己的理解。一是加上概率机制。 将FSM进化成概率FSM,是自由度的第一步体现。不在是固定会在某个节点变到另一个节点,而是在某一个区间都有可能发生变化。二是加上反馈机制。 由于是基于概率的,每一条节点连线都可以附上权值,比如权值是3,就相当于这个转化的概率大3倍,这样我们就可以加入反馈一样的学习机制,首先我们认为节点的转化是有一个目标的,比...原创 2018-04-08 14:59:19 · 284 阅读 · 0 评论 -
[FreedomAI]第八周——算法具体实现和运行结果
public class AntPopulationSystem:USystem { public override void Init () { base.Init (); this.AddRequestComponent (typeof(AntPopulationComponent)); } public override void Update (UEn...原创 2018-06-01 21:16:55 · 287 阅读 · 0 评论