rimworld吧 关注:234,950贴子:4,141,201
  • 8回复贴,共1

【技术交流】对AI的一些概念理解

只看楼主收藏回复

啃AI相关的源码时候的一些自己的理解,并不全面,只是理出来一个梗概
原本只是自己的备忘录,不过可能吧里面也有人想啃这部分源码呢放出来做一个技术交流~
因为只有一部分做过测试,所以有些可能会有理解的偏差或不足,欢迎指摘~有表达不清楚的地方、难以理解的地方也欢迎提出~


IP属地:上海1楼2017-09-11 17:05回复
    github上的可能会维护的版本:https://github.com/supplient/RimworldNote/blob/master/%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90.txt

    相关概念——
    Toil
    小人做的事情的最小单元是Toil
    每一个Toil都会有自己的一套Action
    这套Action会分别在对应的时刻被调用
    Job
    小人做的任何概念上的事情(也就是你觉得是一件事情的事情,吃饭、dolov啥的)
    不过Job本身不做任何事情,就像是Thing本身不做任何事情一样
    它只是提供了做“事情”需要的信息(吃啥、喝啥、做爱对象啥的)
    就和Thing提供了def和位置等信息一样
    JobDriver
    实际干活的存在
    Job与JobDriver一一对应
    不过,多个JobDef可共享一个JobDriverDef,反之不可
    JobDriver由一串Toil组成
    JobDriver会根据Job给出的信息来决定该给出怎样的Toil
    JobTracker
    万恶之源x,小人会干什么事情都是由它每一次tick的时候决定的
    会始终保持一个JobDriver
    会在一定时间间隔后或者当前Job完成后进行思考来寻找新的Job
    ---Think---
    ThinkNode
    以各种方式试图产生一个Job
    ThinkTree
    小人的思考决策树,其实就是ThinkNode_Priority
    ThinkNode_Priority
    对自己的子节点一个个进行尝试,直到有一个生成了可用的Job
    JobGiver
    其实就是ThinkNode,是思考的一部分
    ---Duty Lord---
    ThinkNode_Duty & Duty
    当小人有Duty并且思考尝试到了ThinkNode_Duty时
    尝试使用Duty获取思考树来获取Job
    如果生成可用Job失败,就进入徘徊模式
    每个小人至多只有一个Duty
    LordToil
    安排所属小人的Duty的最小单元
    Transition
    连接LordToil的“边”
    边上可加Trigger来做条件,当满足条件时,从source到Target
    为有向边
    可有多重边
    StateGraph
    由LordToil与Transition组成的有限状态机
    LordJob
    实际给出指令的管家先生~
    产生一个StateGraph,交由Lord来使用
    Lord
    指挥小人去干各种事情的地主
    每个地主都有且仅有一个LordJob
    每个地主都有自己的一群小人,地主只能指挥这些小人
    每个小人至多只从属于一个地主
    ---Work---
    WorkGiver
    类似于ThinkNode,只是不直接在思考树中,而是由ThinkNode_Work驱动
    WorkType
    每一个WorkGiver都属于一种WorkType
    也就是“医生”,“搬运”,“狩猎”之类的
    priorityWork
    也就是游戏里面的“优先xxx”
    指定了一个工作对象(xxx)以及WorkType,并不指定具体Job
    ThinkNode_Work
    先试着根据priorityWork生成Job,来完成优先工作
    如果没有优先工作,那么再根据pawn可以进行的workType寻找WorkGiver
    根据WorkGiver是否紧急以及优先级进行排序,再一个个尝试生成Job
    综述——
    小人一切行动都是基于Job的,虽然最小单元是Toil,但是概念上Job是最根本的
    JobDriver是最根本的执行单位
    Duty, Work都是用来辅助生成Job的
    ThinkNode是产生Job的根本
    JobTrackerTick是“思考”进行的地方
    Lord是一个拟人的给小人发号施令的存在
    LordJob是实际的给出指令的存在
    它有自己的“思考”,是以有限状态机的形式进行的
    指令是以Duty的形式给出的
    WorkGiver与JobGiver类似,都是生成Job的,但层次不同
    WorkGiver是辅助JobGiver_Work生成Job的存在
    JobGiver_Work委托给适合的WorkGiver来生成Job


    IP属地:上海5楼2017-09-11 17:13
    回复
      希望能对不知谁的某人起到一些帮助吧~


      IP属地:上海6楼2017-09-11 17:15
      回复
        谢谢咯~虽然已经看过但没总结
           --凌洛这样说道


        来自Android客户端7楼2017-09-11 17:20
        回复
          这对modder来说非常有参考价值,虽然我写的mod都尽量避开ai系统


          来自iPhone客户端8楼2017-09-11 17:38
          回复
            虽然我看不懂还是支持支持


            IP属地:重庆9楼2017-09-11 18:09
            回复
              这个好,支持


              IP属地:四川来自Android客户端10楼2017-09-11 18:28
              回复
                楼主能不能写个让小人干完活顺路把东西搬回家的mod


                IP属地:广东11楼2017-09-11 20:00
                回复
                  现在需要的是兼容这套AI的载具系统,野生载具的稳定性根本无法保证


                  IP属地:天津12楼2017-09-11 20:26
                  回复