第98行: |
第98行: |
| ====Swarm的背景==== | | ====Swarm的背景==== |
| | | |
− | Swarm是为复杂适应系统建立模型而设计的软件平台。1995年[[圣塔菲研究所]]发布了Swarm的beta版,此后,大约30个用户团体已经安装了Swarm并用它积极地开展建模工作,并完成了一定的论文。Swarm已经帮助提供了讨论模拟技术和方法论的焦点,还提供在特定的研究团体中模型组件和库的共享,这是智力交换的一个重要形式。 | + | Swarm是为复杂适应系统建立模型而设计的软件平台。1995年[[圣塔菲研究所]]发布了Swarm的beta版,此后,大约30个用户团体已经安装了Swarm并用它积极地开展建模工作,并完成了一定的工作。Swarm已经帮助提供了讨论模拟技术和方法论的焦点,还提供在特定的研究团体中模型组件和库的共享。 |
| | | |
− | 开发Swarm的目的就是通过科学家和软件工程师的合作制造一个高效率的可信的、可复用的软件实验仪器,它能给予科学家们一个标准的软件工具集,就像提供了一个设备精良的软件实验室帮助人们集中精力于研究工作而非制造工具。
| + | 开发Swarm的目的就是通过科学家和软件工程师的合作制造一个高效率的、可信的、可复用的软件实验仪器,它能给予科学家们一个标准的软件工具集,就像提供了一个设备精良的软件实验室帮助人们集中精力于研究工作而非制造工具。 |
| | | |
| Swarm实际上是一组用Objective-C语言写成的类库,这是一种面向对象的C语言。Swarm的建模思想就是让一系列独立的主体通过独立事件进行交互,帮助研究由多主体组成的复杂适应系统的行为。通过这些类库包括许多可复用的类,以支持模拟实验的分析、显示和控制,即用户可以使用Swarm提供的类库构建模拟系统,使系统中的主体和元素通过离散事件进行交互。由于Swarm没有对模型和模型要素之间的交互作任何约束,所以Swarm可以模拟任何物理系统、经济系统或社会系统。 | | Swarm实际上是一组用Objective-C语言写成的类库,这是一种面向对象的C语言。Swarm的建模思想就是让一系列独立的主体通过独立事件进行交互,帮助研究由多主体组成的复杂适应系统的行为。通过这些类库包括许多可复用的类,以支持模拟实验的分析、显示和控制,即用户可以使用Swarm提供的类库构建模拟系统,使系统中的主体和元素通过离散事件进行交互。由于Swarm没有对模型和模型要素之间的交互作任何约束,所以Swarm可以模拟任何物理系统、经济系统或社会系统。 |
第109行: |
第109行: |
| ====Swarm的逻辑结构 ==== | | ====Swarm的逻辑结构 ==== |
| | | |
− | Swarm中最主要的四个部分,往往也是一个Swarm模拟程序经常包括的四个部分是:模型Swarm(ModelSwarm)、观察员Swarm(ObserverSwarm)、模拟主体和环境。
| + | Swarm中最主要的四个部分,往往也是一个Swarm模拟程序经常包括的四个部分是:模型Swarm(ModelSwarm)、观察员Swarm(ObserverSwarm)、模拟主体和环境,其中的ModelSwarm和ObserverSwarm是swarm类的子类,swarm类是Swarm模拟的基本构造块。 |
| | | |
− | =====模型Swarm=====
| |
| | | |
− | Swarm就是许多主体(对象)组成的一个群体,这些个体共享一个行为时间表和内存池。显然“Swarm”有两个主要的组成部分:(1)是一系列对象(Object);(2)这些对象的行为时间表(Action)。时间表就像一个索引引导对象动作的顺序执行。
| + | =====ModelSwarm===== |
| | | |
− | *对象
| + | Swarm就是许多主体(对象)组成的一个整体,这些主体共享一个行为时间表和内存池。显然swarm有两个主要的组成部分:(1)是一系列对象(Object);(2)这些对象的行为时间表(Action)。时间表就像一个索引引导对象动作的顺序执行。 |
| | | |
− | 模型“swarm”中的每一项对应模型世界中的每一个对象(个体)。“swarm”中的个体就象系统中的演员,是能够产生动作并影响自身和其他个体的一个实体。模拟包括几组交互的个体。例如,在一个经济学模拟中,个体可能是公司、证券代理人、分红利者和中央银行。
| + | *'''对象''' |
| | | |
− | *时间表
| + | ModelSwarm中的每一个对象对应模型世界中的每一个主体。swarm中的主体就像系统中的演员,是能够产生动作并影响自身和其他个体的一个实体。当用户定义了全部对象并为它们建立起关系后,建模的最后一步就是把这些主体放到这个ModelSwarm对象中。 |
| | | |
− | 除了对象的集合,模型“swarm”还包括模型中行为的时间表。时间表是一个数据结构,定义了各个对象的独立事件发生的流程,即各事件的执行顺序。通过确定合理的时间调度机制,可以使用户在没有并行环境的状况下也能进行研究工作,也就是说,在并行系统下agent之间复杂的消息传送机制在该swarm中通过行为表的方式可以在单机环境下实现。例如,在狼/兔子这个模拟系统中可能有三种行为:“兔子吃胡萝卜”,“兔子躲避狼的追踪”和“狼吃兔子”。每种行为是一个独立的动作。在时间表中,对这三种行为按照以下顺序排序:“每天,兔子先吃胡萝卜,然后它们躲避狼的追踪,最后狼试图吃兔子”。模型按照这种安排好的事件的执行顺序向前发展,并尽量使这些事件看起来象同步发生的。
| + | *'''时间表''' |
| | | |
− | *输入输出
| + | 除了对象的集合,ModelSwarm还包括模型中行为的时间表。时间表是一个数据结构,定义了各个对象的独立事件发生的流程,即各事件的执行顺序。通过确定合理的时间调度机制,可以使用户在没有并行环境的状况下也能进行研究工作,也就是说,在并行系统下主体之间复杂的消息传送机制在该swarm中通过行为表的方式可以在单机环境下实现。 |
| | | |
− | 模型“swarm”还包括一系列输入和输出。输入是模型参数:如世界的大小,主体的个数等环境参数。输出是可观察的模型的运行结果:如个体的行为等等。
| + | 例如,在狼/兔子这个模拟系统中可能有三种行为:“兔子吃胡萝卜”,“兔子躲避狼的追踪”和“狼吃兔子”。每种行为是一个独立的动作。在时间表中,对这三种行为按照以下顺序排序:“每天,兔子先吃胡萝卜,然后它们躲避狼的追踪,最后狼试图吃兔子”。模型按照这种安排好的事件的执行顺序向前发展,并尽量使这些事件看起来像同步发生的。 |
| | | |
| + | *'''输入输出''' |
| | | |
− | =====观察员“swarm”=====
| + | ModelSwarm还包括一系列输入和输出。输入是模型参数:如世界的大小,主体的个数等环境参数。输出是可观察的模型的运行结果:如个体的行为等等。 |
| | | |
− | 模型“swarm”只是定义了被模拟的世界。但是一个实验不应只包括实验对象,还应包括用来观察和测量的实验仪器。在Swarm计算机模拟中,这些观察对象放在一个叫观察员“swarm”的“Swarm”中。 观察员“swarm”中最重要的组件是模型“swarm”。 它就像实验室中一个培养皿中的世界,是被观测的对象。观察员对象可以向模型“swarm”输入数据(通过设置模拟参数),也可以从模型“swarm”中读取数据(通过收集个体行为的统计数据)。
| |
| | | |
| + | =====ObserverSwarm===== |
| | | |
− | 与模型“swarm”的设置相同,一个观察员“swarm”也由对象(即实验仪器),行为的时间表和一系列输入输出组成。观察员行为的时间表主要是为了驱动数据收集,即从模型中将数据读出,并画出图表。观察员“swarm”的输入是对观察工具的配置,例如生成哪类图表,输出是观察结果。
| + | ModelSwarm只是定义了被模拟的世界。但是一个实验不应只包括实验对象,还应包括用来观察和测量的实验仪器。在Swarm计算机模拟中,这些观察对象放在一个叫ObserverSwarm的Swarm中。 ObserverSwarm中最重要的组件是ModelSwarm。 它就像实验室中一个培养皿中的世界,是被观测的对象。ObserverSwarm可以向ModelSwarm输入数据(通过设置模拟参数),也可以从ModelSwarm中读取数据(通过收集个体行为的统计数据)。 |
− | 在图形模式下运行时,观察员“swarm”中的大部分对象被用来调节用户界面。这些对象可能是平面网格图,折线图或探测器,它们一方面与模型“swarm” 相连以读取数据,同时把数据输出到图形界面,为用户提供了很好的实验观察方式。 实验结果的图形化有助于直觉地判断,但重要的实验都需要收集统计结果。这意味着要做更多地工作并存储用于分析的数据。作为图形观察员“swarm”的另一种选择,你可以建立批处理“swarm”(batch swarms)。它和用户之间没有交互操作。它从文件中读取控制模型的数据并将生成的写入另一个文件中用于分析。它这只是观察方式不同罢了。
| + | |
| + | |
| + | 与ModelSwarm的设置相同,一个ObserverSwarm也由对象(即实验仪器),行为的时间表和一系列输入输出组成。Observer行为的时间表主要是为了驱动数据收集,即从模型中将数据读出,并画出图表。ObserverSwarm的输入是对观察工具的配置,例如生成哪类图表,输出是观察结果。 |
| + | |
| + | 在图形模式下运行时,ObserverSwarm中的大部分对象被用来调节用户界面。这些对象可能是平面网格图,折线图或探测器,它们一方面与ModelSwarm相连以读取数据,同时把数据输出到图形界面,为用户提供了很好的实验观察方式。 实验结果的图形化有助于直觉地判断,但重要的实验都需要收集统计结果。这意味着要做更多地工作并存储用于分析的数据。作为图形ObserverSwarm的另一种选择,你可以建立批处理swarm(batch swarms)。它和用户之间没有交互操作。它从文件中读取控制模型的数据并将生成的写入另一个文件中用于分析。它这只是观察方式不同罢了。 |
| | | |
| | | |
| =====模拟主体===== | | =====模拟主体===== |
| | | |
− | swarm不仅是一个包含其它对象的容器,还可以是一个不包含其它对象的主体本身。这是最简单的“swarm”情形,它包括一系列规则、刺激和反应。而一个主体自身也可以作为一个“swarm”:一个对象的集合和动作的时间表。在这种情况下,一个主体“swarm”的行为可以由它包含的其它个体的表现来定义。层次模型就是这样由多个“swarm”嵌套构成。例如,你可以为一个居住着单细胞动物的池塘建立模型。在最高层,生成包括个体的“swarm”:“swarm”代表池塘而每个个体代表池塘里的一个动物。动物的细胞也可以看作是由多个个体(细胞质)组成的“swarm”。这时需要连接两个模型,池塘作为一个由细胞组成的“swarm”,细胞也作为一个可分解的“swarm”。
| + | Swarm不仅是一个包含其它对象的容器,还可以是一个不包含其它对象的主体本身。这是最简单的swarm情形,它包括一系列规则、刺激和反应。而一个主体自身也可以作为一个swarm:一个对象的集合和动作的时间表。 |
| + | |
| + | 在这种情况下,一个主体swarm的行为可以由它包含的其它个体的表现来定义。层次模型就是这样由多个swarm嵌套构成。例如,你可以为一个居住着单细胞动物的池塘建立模型。在最高层,生成包括个体的swarm:swarm代表池塘而每个个体代表池塘里的一个动物。动物的细胞也可以看作是由多个个体(细胞质)组成的swarm。这时需要连接两个模型,池塘作为一个由细胞组成的swarm,细胞也作为一个可分解的swarm。 |
| | | |
| | | |
− | 还由于“swarm”可以在模拟运行过程中建立和释放,Swarm可用来建立描述多层次的动态出现的模型。 通过建造模型“swarm” 和观察员“swarm”, 将模型和数据收集分离开,一个完整的实验仪器就建立起来了。就像一个玻璃下的模拟世界,不同的观察员“swarm” 可用来实现不同的数据收集和实现控制协议,但是模型本身没有发生变化。
| + | 还由于Swarm可以在模拟运行过程中建立和释放,swarm可用来建立描述多层次的动态出现的模型。 通过建造ModelSwarm和ObserverSwarm,将模型和数据收集分离开,一个完整的实验仪器就建立起来了。就像一个玻璃下的模拟世界,不同的ObserverSwarm可用来实现不同的数据收集和实现控制协议,但是模型本身没有发生变化。 |
| | | |
| | | |