跳到主要内容

Cells

图标

cell

说明

要点

空间的构成

  • Cell个体是组成空间的基本单元,每个单元都是边长为1的正方形
  • Cells以矩形点阵形式排列,Cell种群组成连续的2维平面空间
  • Cell个体的名义坐标(内置属性Coordinates)为正方形的中心,x坐标和y坐标都是整数
  • Cell个体的范围覆盖,x维度[x-0.5, x+0.5),y维度[y-0.5, y+0.5),当一个Agent个体坐标在该范围内时它就处于这个Cell上
  • 一个2D空间的x方向宽度为,cell_entity.MaxX - cell_entity.MinX + 1,y方向类似
  • Cell2D空间中的绝对方向为,东0°,北90°
示例
  • 下图是一个坐标原点在左下角、个体的最大x和y坐标均为5的2D空间所有Cell个体的分布和坐标示意
  • 空间宽6,高6
  • 当一个Agent的坐标恰好为[0.5, 0.5]时,它处于中心坐标为[1,1]的Cell上,而不是其它3个

Cells001.png

空间的环绕

  • Cell空间范围虽然有限,但可以在水平和竖直方向被设置为是否环绕
  • Agent沿固定方向持续运动时,如果空间在该方向上环绕,则Agent将从边界穿出从另一侧边界重新进入空间,否则会停止在边界
  • 实体间交互章的"空间运动交互"节提供了Agent在不同环绕模式下的Cell空间中运动机制细节,这里不再赘述
提示

通过坐标指定Agent的空间位置时,如果输入的坐标超过Cell设定的范围,在模拟运行时

  • 如果Cell设置为不环绕,系统将会报错
  • 如果Cell设置为环绕,不会报错,系统将自动换算到空间坐标范围之内

空间的距离

衡量空间中任意两点距离时,与空间本身是否环绕相关

  • 空间不环绕时

    空间距离即为欧式距离,即 (x2x1)2+(y2y1)2\sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}

  • 空间环绕时

    显然从一点以直线到达另一点有正反向两种方式,其中较小的是两点间的真实距离

  • 系统提供的相关动作组件函数都考虑了是否环绕

提示

以下系统提供的功能已考虑了Cell空间是否环绕,合理使用会减少很大工作量

  • 函数NearestDistance返回两实体/坐标间的最短距离
  • 函数AngleTowards 返回基于最短距离的绝对方向角度
  • Agent和Cell内置方法 GetNeighbors返回空间邻居Agent,GetNeighborCells返回空间邻居Cell
  • 移动组件

与其他组件的关系

  • 显然,当模型中不存在Cell组件时,与空间相关的逻辑(如Agent的空间坐标、行为中的移动置于动作等)将触发运行报错
  • 可以在“技术说明”章节的说明表中获得依赖Cell实体的内置属性内置行为相关详细信息

Cell对象的设置方法

Cells002.png

坐标系设置

原点位置

可以选择在Cell群体矩阵的中心、四个角、四条边中心的个体中心作为坐标系原点

Cells003.png

X和Y轴的极限坐标

  • 指的是距离原点最远的Cell个体的中心坐标,由于Cell以矩阵排列,因此均为整数
  • 根据原点位置确定,如原点在左下角,则最小X坐标和Y坐标必为0,但可以设置正整数的最大XY坐标,如下图,所以设置后该Cell空间共有11×11个Cell,右上角Cell的Coordinate内置属性值为[11,11]

    Cells004.png

  • 其余情况类似,这里不再一一列举
  • 以上设置值对应Cell的MinXMaxXMinYMaxY内置属性,以供建模时公式访问

空间环绕设置

Cells005.png

  • 可以分别设置在水平和竖直方向是否环绕
  • 实体间交互章的"空间运动交互"节提供了Agent在不同环绕模式下的Cell空间中运动机制细节
模型案例

观察在Cell空间环绕模式下Agent出入视野的规律,如果觉得速度太快可以尝试步进式运行

个体属性设置

Cells006.png

设置方法与Agent个体属性设置类似

案例

模型案例

经典元胞自动机:生命的游戏——约翰·康威(John Horton Conway)