惯例,YY完趁头脑尚热就动手;
需求?文案?今天天气不错,早上有bug,中午有雨,下午还是有bug。
工具:python
模型:YY篇的AI模型
成品:通用库,中间件模式
难点:
1·神经元的构建,因为它将会模仿人体神经元,延伸到对象的各个细节末端,对于大多数构建模式来说,这是TMD个恶梦;
2·大脑到底怎么处理这些信号,也就是处理模式;
3·既然要做成中间件,那么就不得依赖于具体项目或者项目具体,甚至要提供通用扩展,对于游戏AI这种东西,同样是个恶梦。
纠结成果:
1·python有个东西,叫装饰器,可以让神经和对象的结合变得轻松无节操,甚至可以让神经元掌控到一个具体对象属性的变更,这会引起开发语言依赖,无视吧;
2·这一点见仁见智,不过从这套东西考虑,处理模式俺也是推荐静态方式,俺一共实现了三套处理模式,按顺序是 情绪、个性、习惯,具体下述;
3·解决办法有两个关键:基本库不对控制对象做任何处理,只提供对象处理扩展;一切处理过程只使用配置信号。
经过一段说长不长说短不短的时间的折腾,终于连库连配置工具连测试一起吐出来了,配置工具用python Tkinter,不为别的,就为即时不懂编码的人使用时各种简便;
资源请恕俺自珍,毕竟各人有各人的实现,仅放一些简陋的伪代码做参考:
大脑:
class Brain:def input(self, func):
"""
信号输入端用的装饰器
"""
def output(self, *o):
"""
信号输出处理
"""
def signal_setter(self, func):
"""
输入信号设置装饰器
"""
def reflection_signal_setter(self, func):
"""
输出信号设置装饰器
"""
处理过程:
处理过程根据俺个人的理解和划分,分成了三部分:
1·情绪,主要处理复数输入基于权重作出复数输出的处理;
2·个性,主要基于状态机、行为树等,甚至是更简单的反映模式的自定义脚本处理,作为根据项目进行细节扩展的工具;
3·习惯,出入信号一对一原始处理,简单直接暴力。
经过这三部处理后,只要输入输出信号安排得当,即时没有个性处理或者个性处理只使用一些简单的默认脚本,也会为对象带来丰富多彩的行动;
然后是意义不大纯骗稿费的伪代码:
class Mood:
def run(self, entity, signals):
"""
return reflect-signals
"""
# 基于权重的处理过程
for weight, signal in self.moods:
do something
class Character:
def run(self, entity, signals):
"""
return reflect-signals
"""
# 基于个性脚本的处理
self.character_script(entity, signals)
class Habit:
def run(self, entity, signals):
"""
return reflect-signals
"""
# 基于习惯列表的简单处理
self.habit.get(signals)
最后,在上面的基础上,俺塞进去了一个巨大的加分项:学习能力。
在这个AI模式里,俺给学习作出一个定义:
在对象(obj)生命周期内,根据大脑(brain)天生(配置)的学习能力和学习机制,通过对于输入信号(signal)的处理的过程中的积累,对象的大脑(brain)可以增加自然界中存在(全体配置内存在)但其本身并不具备的反应信号(reflection signal)。
这样定义下来,其实就是个很简单的东西而已:
class Learn:def _machine(self, signals):
"""
学习机制
"""
def add_refliction(self, rf_signal):
"""
习得输出信号
"""
def run(self, signals):
"""
把习得的输出信号反映到信号处理过程
"""
加入了这种学习模式,就造成了一种结果:起码,默认上,所有的反应信号,对于各种不同对象,都是可用的,节操掉一地了。
小结,它有什么优缺点,有多强悍多孱弱:
·静态AI,对cpu友好,更不需要线程支持,但是,如果输入点太少,这AI就会极度懒散;
·在足够的输入输出信号支持下,灵活性高,可以说这货在扩展和惊喜方面非常有料,但是,理解成本也高,于是不得不提供编辑器;
·对程序员来说,使用方便,但是,对无论是否程序员来说,要掌握好它,会比学会漂移难。
最后,神经型反应式AI(Neuronalreaction AI, NR)在 不带 各种期待下诞生。