1 个不稳定版本
0.1.0 | 2022 年 10 月 21 日 |
---|
#554 在 游戏 中
在 ivyhall 中使用
18KB
143 行
Pyke
我认为我可以从马斯洛的需求层次开始,这是一种抽象的演算,用于大致确定生物在任何给定时间点的关注点,并根据这些关注点进行权衡。
我还没有想出一个好的方法来做到这一点。我想,每个生物都有对其环境的意识,这种意识会告知其动机。它们有一些推迟满足的能力,所以它们不会因为饥饿而放弃已经完成 99% 的事情去吃零食,然后再重新开始。
然而,当考虑到生物环境中可能出现的所有可能情况以及所有可能的不同权衡方式时,这会变得非常复杂。
处理这种通用问题的一种方法可能是一种多层次优先队列。简要来说,我们可以循环遍历层次结构级别(生理、安全、社交、自尊等),查看哪些消息存在以及它们的优先级水平。这些优先级可能与例如 RFC 5424 级别(调试、信息、通知、警告、错误、关键、警报、紧急)相似。
然后,这些优先级应该根据层次结构进行加权,创建一个表格。这可能会因物种而异,因此对于某些物种来说,自我实现比社交需求要重要得多,并且可能因个体而异。这可以允许重新排序“金字塔”模型。
当一个行动者穿越世界时,他们会从其环境中接收更新。他们通过主观的加权,将这些更新纳入对世界状态的内部反思中,最重要的加权消息具有优先权。如果我们说他们处于某个级别,这意味着他们在最近一段时间内没有收到比该级别更重要的消息。(每个人始终至少是 INFO 级别;让我们把 DEBUG 和 TRACE 看作是无意识的。)
例如,让我们假设一个哥布林正在森林中行走。
-
生理上,他的饥饿处于通知水平(他可以去找点东西吃,但还没有到肚子咕咕叫的阶段),呼吸正常,温暖,穿着足够。生活很美好。
-
在安全方面(在像这样的游戏中,我们必须小心地注意,安全并不与战斗相关,战斗是生理性的,而是日常安全。我确实应该改一下这些名称),哥布林并不完全安心——一个相邻的半兽人部落一直在侵占他们的领土,尽管没有发生实际的侵略行为,但哥布林中普遍存在一种不安的情绪。所以,我们可以说他在那里也是处于“注意”状态。
-
在社会方面,哥布林的状况良好。他是社区的成员之一,他的小屋离首领的小屋相对较近,且位于厕所的上风处。他会注意到任何侮辱(信息)但相对舒适。
-
在尊重方面,哥布林的状况也良好。他有三只山羊,还有一个孩子即将出生。我们可以说他处于“信息”状态。
-
可以说,作为物种,哥布林对认知需求、自我实现等并不十分关心。他们可能会尝试提高狩猎和放牧山羊的技能 🤔 我们可能会将自我实现看作在更高优先级水平上给予很少的权重。基本上,哥布林永远不会将他基本缺乏发展看作比“注意”级别更严重的事情。我们的哥布林最近注意到他没有很好地管理他的山羊,所以我们可以说他处于“注意”级别。
因此,为了计算,我们可能有一个如下表格用于哥布林
优先级 | 生理 | 安全 | 社会 | 个人 | 更高 |
---|---|---|---|---|---|
调试 | 0.01 | 0.01 | 0.01 | 0.01 | 0.01 |
信息 | 0.08 | 0.05 | 0.05 | 0.03 | 0.02 |
注意 | 0.2 | 0.18 | 0.17 | 0.15 | 0.1 |
警告 | 0.4 | 0.3 | 0.2 | 0.18 | 0.12 |
错误 | 0.8 | 0.7 | 0.55 | 0.4 | 0.14 |
关键 | 0.9 | 0.75 | 0.6 | 0.5 | 0.16 |
警报 | 0.95 | 0.8 | 0.7 | 0.6 | 0.18 |
紧急 | 1.0 | 0.9 | 0.8 | 0.7 | 0.2 |
(这只是一个粗略的想法,显然需要相当大的调整。)
所以我们的哥布林总体处于“注意/注意/信息/信息/注意”,它们的权重分别是0.2、0.18、0.05、0.03、0.1。
这意味着他会采取行动,将他的生理状态调整到理想状态。所以他拿了一个苹果吃了。然后他处于0.08/0.18/0.05/0.03/0.1。
然后他可能会做一些事情,将他的安全状态调整到理想状态。他会四处嗅嗅,寻找野熊的迹象。
如果他闻到了,这很可能会引起他感觉到的个人即时危险,将其提升到“警告”,并将他的安全感提升到“警告”。然后他会采取不同的行为:更加悄悄地移动。他可能会回到他的村庄去商议。这可能会改变其他哥布林的行为;他们可能会以2-3人或6-8人的小组旅行,以增加他们的安全感。
如果没有,那么安全也应该得到改善,达到“信息”。此时,他的更高动机开始发挥作用,他可能会检查他的山羊,看看是否有生病的迹象。
因此,在实际上实施,我们可以将哥布林的心理状态视为一个64位的位域,最高有效位是生理紧急情况,最低有效位是超越痕迹(我可能需要改进这些名称)。这些都有浮点数分配,存储在个体中,并从物种级别的原型中得出,稍作修改,可能还会受到过去经验的修改。
每轮,位域都会迭代,并与设置位的对应浮点数进行比较。
更多的思考
- 每个有感知的实体最初都是一个白板。
- 随着世界中的事件发生,这些事件会根据它们的感知速率(即与玩家的距离成反比)被实体感知。
- 这些感知作为信息记录在感知实体的意识中,沿着两个轴:受影响的生物的需求层次中的哪个级别,以及信息的严重程度(例如,可能存在轻微的饥饿事件和严重的自我实现事件)。
- 八个需求如下
- 编程(以便能够直接控制实体)
- 生理
- 安全
- 社会
- 尊重
- 认知
- 保留 I
- 保留 II
- 严重程度分为八个等级如下
- 跟踪/调试: "打哈欠"(未使用,可能性最大)
- 信息: "值得知道..."(背景信息[田里有成熟的草莓。这里有草地。])
- 注意: "嗯,很有趣。"(一个独立的事实,没有不祥的含义。[开始下雨了。你闻到微风中的草莓味。你的肚子咕咕叫。])
- 警告: "哎呀。"(有一些不祥的含义。[你发现了一些新鲜的巨熊脚印。你饿了。])
- 危险: "哦,该死!"(明显的危险。[一只巨熊手持剑从北边进入!你非常饿。])
- 关键: "哦,见鬼!"(屎正飞向风扇。[巨熊攻击了!你快要饿死了!])
- 警报: "OH SHIT!"(屎正击中风扇。[巨熊给你造成了23点伤害!你在流血!])
- 紧急: "我吓得无法进行理性思考。"(风扇被屎淹没。[巨熊再次攻击你!你伤得很重!])
- 在64位位字段中设置一个位,当引入与相应需求/严重性匹配的信息时。
- 在实体的规划速率的每个滴答声中,实体确定其最重要的关注点,并制定一个计划来解决关注点。
- 确定最重要的关注点包括以下内容
- 遍历信息位字段以找到设置的最重要位。
- 制定计划包括以下内容
- 确定减轻关注点的目标状态。
更多思考
- 每个实体作为一个白板诞生。
- 世界及其中的事物发出感官事件。
- 每个实体都有一个感知过滤器,它允许、阻止或转换感官事件。
- 每个实体都有一个感知接收器,它根据接收到的感官事件计算世界状态的实际表示。[注意:这听起来很像函数式响应式编程。我可能需要花时间专门研究这个问题。]
- 每个实体还有一个世界状态的期望表示。
- 实体有一个冲突系统,它比较世界状态的实际情况和期望情况,并创建与这些差异相对应的事件。[更多FRP。]
- 这些差异形成目标集。
- 实体将制定一个动作集来解决差异。这通常直接来自实体的物种或类似的东西,但实体可以修改它。如果他具有“懦弱”的特征,或者如果他的两条手臂都被砍断,那么进攻可能没有意义。
- 规划者将审查动作集和目标集,并制定实现目标状态的行动方案。
依赖关系
~2–10MB
~89K SLoC