跳到主要内容

系统仿真基本概念

如何理解系统仿真?如何建模?

世界由以下三种主体组成并交互:

  • 行动者
  • 行动者之间的关系
  • 空间

HoloMind 以三种实体建模表达上述要素:

示例
  • DeFi的代币交易:交易者Agent和DEX Agent组成一个交易系统
  • 经典元胞自动机:一个二维Cell空间中每个Cell单元可以根据邻居的状态更新自己的状态
  • 三体:在万有引力作用影响下,3颗恒星Agent在Cell空间中运动
  • Web3中MEME币的用户接受:现有用户Agent可能通过Link社交网络传播扩散
  • 草原生态系统:草原Cell有长草行为和颜色状态,羊群Agent有吃草行为和年龄属性,羊个体之间有血缘关系

因此,开始建立一个系统模型很简单——拖入实体组件到画布。

完整的模型如何构成?

通常由实体数据元素流程组成,可以包括图表等人机交互辅助对象

提示
  • HoloMind 通过拖放各种组件到画布的方式进行图形化建模
  • 组件是HoloMind建模的最小单位
  • 放置在画布上的XX组件“实例”也会被称为XX“对象”

BasicConcepts001

例子

如上模型,一个DeFi用户交易代币系统包括

  • 1 数据对象(ETH的价格,全局变量)
  • 2 行为实体(交易者Agent,交易所Agent)
    • 2.1 流程(交易者行为,交易所行为)
  • 3 图表

实体

  • 实体是系统仿真模型中具有属性和行为的主体,包括AgentCellLink三类
  • 流程表达实体或全局行为,拖拽流程单元放置到实体内部画布即创建实体的行为,也可以放在根画布表达全局行为
  • 数据对象表达属性,拖拽放置数据组件到实体内部画布,即创建实体的属性,也可以放在根画布表达全局属性

基本语法

关于画布

  • 建模就是拖拽放置各种组件到画布,并设置他们的过程
  • 不同画布按照其语法性质需要遵循相应规则
  • 模型有三种画布:根画布、实体内画布、流程内画布
  • 块画布:用于定义块,语法与模型画布相同,只是块类型不同根画布代表的实体类也不同

图形化建模语法

各种画布下需要遵循的规则如下:

  • 数据组件可以放置在任何画布
    • 变量容器放在根画布时是全局状态或参数
    • 放在实体内是实体属性
    • 放在流程内可以是流程局部状态或流程接口
  • 根画布:可以放置实体或流程,用于定义全局(观察者)行为和属性
  • 实体内画布:可以放置流程代表创建实体行为,也可以当放置同类实体对象表示继承
  • 流程内画布:放置流程元素,代表构建流程逻辑
  • 无论模型还是块,画布都遵循上述原则

状态访问

  • 画布上的数据对象都有作用域,遵循上层覆盖下层的原则,即内层可以直接读写外层的数据元素对象
  • 数据元素章节详细介绍了数据对象的作用域内外访问规则细节
  • 流程间的数据传递的规则详见相关章节

模拟运行

  • 系统按照滴答(Tick)推进状态更新
  • 每个Tick所有实体行动完毕后进入下一个滴答
  • 模拟运行章节提供了更多细节
提示

系统的时间就是模拟滴答,与实体一同构成了完备的时空系统。

  • 块是使用系统组件自定义的预制部件,以方便建模
  • 块是“定义”,放置到画布后的对象是它的“实例”
提示

系统提供的组件本身也可以理解为“定义”,放置到画布就是“实例”。

  • 用户建模的实体和流程可以用块的形式保存在库中
提示
  • HoloMind 的每个工作空间都有自己的库,其中包含块文件和公共标签集,可供该空间下所有成员建模时使用。
  • 通常我们把那些有独立功能的、建模高频使用的对象做成块,以方便建模。
  • 模型中的块实例指向定义,实例的结构(即组件对象及其语法连接方式)已经被“冻结”与定义完全一致、不能被修改,除非“去块化”成为普通实例对象,但可以修改块实例及其内部组件对象的属性
  • 一个定义可以被建模使用为多个实例,只要是本工作空间下的任意模型都能使用
  • 块定义更新后,实例模型中不会自动更新而导致影响模型运行;可以手动拉取更新到实例,更新后请检查调试以确保模型运行
  • 模型中的块实例携带完整信息,是信息完备的,因此即便删除对应的定义,模型依然能够正常运行,只是该块实例不再指向原定义
提示

HoloMind 应用市场中的块也可以直接用于模型实例,指向市场中的定义。

标签(集)

  • 标签

    自定义String格式的全局枚举值,可在建模中使用

  • 标签集

    多个标签被组织在标签集(List格式)下,表达一类“共识性”标记

    提示

    在Web3领域,我们通常会建立代币的标签集,其中标签如:BTC、ETH、USDC、DAI等,使用该标签集可以批量定义一个容器组件的键为其所有标签,以模拟钱包或资金池,从而轻松自动管理各类代币的交易余额。

  • 标签不是建模必须

    但定义后可以方便建模时选择操作,避免赋值时重复输入和字眼细节的错误

  • 全局标签集和模型标签集的关系

    • Holo文件的所有情景共用模型标签集
    • 模型标签集为了建模方便,本身并不影响模型运行逻辑,如果一个使用了标签集的模型删该了标签集,会出现警告,还是能正常运行
    • 全局标签集属于工作空间,和具体模型无关,像一份模版,供任何模型导入后使用,避免重复构建
    • 模型标签集可以推送合并到全局标签集,反之全局标签集也可以导入当前模型,系统按同名合并