为mesa提供扩展模块,以允许继承人和代理模块

multilevel-mesa的Python项目详细描述


#多级mesa是一个支持python基于代理的建模库mesa的库。多级mesa将复杂系统视为自适应网络,并使用网络图结构来动态管理代理模块(组)和模型调度。首先,跟踪代理、代理(组)模块、代理网络以及属于现有组的代理和计划的管理器集合。第二,一系列功能,为用户提供不同的选项,以形成组或解散组。第三,允许包含不同策略、管理组的行为和状态并在复杂系统中隐式生成层次结构的组类。(图1)

![多级台面示意图](https://github.com/tpike3/multi-level戋mesa/blob/master/multi-level戋mesa/picture/multi-level mesa%20schematic.png)
**图1**



pip安装多级台面

罗伯·阿克赛尔和约书亚·爱泼斯坦的《成长中的人工社会》第4章。



属性:
1。多级台面ID计数器,为每个组提供唯一的ID


关键字参数:
1。multivel_mesa.min_for_group告诉实例组中必须包含的代理的最小数量。min_for_组参数的默认设置为2。
2。multivel_mesa.group_net接受布尔值,默认为false。此参数告诉实例组代理是否可以与其他组代理组成更大的组代理。

六位经理:

1.multivel_mesa.\\u agents,这是一个有序字典(一个哈希表,由一个key:value对组成),它保存添加到实例的每个代理
2。多层台面网是newtorkx图的一个实例。此功能为跟踪和管理代理和组提供了关键结构。
3。多级代理使用字典按类型跟踪代理。此功能允许在操作组或计划时更快地引用特定类型的代理。
4.多级mesa.schedule取代了mesa schedule,是一个有序字典,用于管理代理以及代理执行step函数的时间。
5。multivel_mesa.groups是一个有序字典,它跟踪模型中的组,执行与代理有序字典相同的跟踪组功能。
6.反汇编是一本集词典。第一个字典键是代理ID,第二个字典键是组类型(链接和链接值),集合是代理在这些组类型中所属的组ID。

在这两种方法中,多级mesa将所需的代理转化为构成组的双边链接列表。代理的每个输入都转换为网络边缘,形成组或将代理添加到现有组。使用链接还用于解散组或从组中删除代理。然后,这些函数创建一个层次结构中包含代理模块的更动态的调度。

####用户定义的形成过程多级_-mesa.form_-meta

显式方法的形成函数是多级_-mesa.form_组,采用用户定义的过程,该过程必须生成双边连接的代理列表(框3-2)。这种方法在计算上可能很昂贵,但对于允许网络的精确重建是必要的。由于字典(例如时间表)在迭代过程中无法操作,用户必须使用yield与更常见的return运算符来将代理列表传递给multivel_Mesa.form_Group函数。

需要一个参数,该参数是用户指定的进程,用于确定代理是否应与其他代理在一个组中。\*args和\*\*kwargs允许用户传入此进程的参数。determine_id参数确保每个组都有一个唯一的id。如果默认,它将根据id_counter属性向字符串"group"追加一个数字。要让用户传递id,他或她必须将id作为从用户定义的进程的yield运算符生成的元组的第一个元素来传递。用户必须仔细选择此ID,因为该ID在用于合并组的集合操作中使用。double参数接受布尔值,默认为false。如果为true,则代理将作为独立实体保留在计划中,并作为组的一部分添加;如果为false,则删除代理。此功能是为用户提供代理调度和组进程的最大灵活性。策略参数传入组的步骤进程,该步骤进程只能由内部进程组成,也可以由组进程组成,然后执行各个代理进程。group_type参数接受一个字符串,允许用户指定不同类型的组,以便代理可以属于不同类型的组,如"family"和"firm"。

此函数遍历每个组,然后使用用户定义的进程来评估代理是否仍应属于该组。类似于多级台面组,此函数需要一个收益率来提供应删除的代理列表,然后继续删除这些代理,同时更新相应的管理者。此函数还可确保如果组中没有特定数量的代理,则将删除该组。此最小代理数是多级mesa实例的min_u group属性,默认设置为两个


```

multivel_mesa.reassess_meta函数需要一个参数,该参数由用户定义,用于评估代理是否应留在组内。该函数还有一个重新引入的参数,该参数接受布尔值,并默认为true。此参数告诉函数是否将删除的代理重新引入计划。


有了无向图,如上图所示,有三种可能性可以评估是否t-连接剂应在同一组中。首先,通过代理之间是否存在链接。其次,如果存在特定类型的链接(例如朋友、敌人)。第三,如果存在一个已经达到某个值的链接。

代理之间是否存在链接。由于net_group函数没有传入任何进程,因此无法指定组ID,因此如果组是基于链接的存在而形成的,则该函数使用默认的"group",链接类型不是默认的none或链接类型的link_值,加上来自多级台面的数字。R属性。如果用户决定他们希望传入流程,以便为组提供唯一的ID,则可以在将来的版本中添加此ID,但此版本中不包括此ID,因为它没有为多级别Mesa Dynamics添加任何实质性内容。link_type函数允许用户传递哪些链接键值应该将代理链接在一起。然后可以使用链接值条件进一步指定链接类型。这些值还用作多级"台面反向"组管理器中的字典键。link_值可以是一个字符串来进一步分类链接类型,例如family:friendly或family:angry_青少年,也可以是一个值,例如trades:10(代理之间的交易数),在本例中,该值跟踪代理之间的交互类型。由于net_group是一个加法过程,因此该值被假定为大于或等于一个值的阈值。然后,可以使用networkx对象操作功能通过abm中的其他进程更新和评估网络。为了方便起见,多级桌面还具有多级桌面、添加链接和多级桌面、删除链接等功能。这些函数获取一个代理列表,将它们合并到一个完全连接的元组列表中,然后添加或删除链接。

首先,可以基于链路的存在、特定链路类型的存在以及最终特定链路值的存在来移除代理。该函数还将检查以确保元代理仍具有保留组的最小代理数,该组默认为两个,并具有多级"mesa.min_for_group"属性。

用户还可以指定导致代理被删除的链接类型或链接值,链接值可以是字符串或数字。但是,由于此函数不是加法,因此如果值是一个数字,则必须小于或等于给定值。

这些是添加和删除功能,它们保持在单个代理级别,但由于代理必须保留在多个管理器中,因此具有更高的复杂性,以确保代理在计划中被正确地"介入"或在代理"死亡"时被删除。多层台面也取代了台面的阶跃功能。它的主要计划是随机激活,但对于有序激活可以关闭此功能,并且可以通过代理类型管理器执行分阶段激活。多层台面的未来扩展是根据不同的网络配置存储不同的时间表。这将节省计算时间,以便减少创建特定代理计划的频率。例如,如果一个人正在重新创建一个群体的日常生活,而夜晚和早晨使用一个配置,而白天使用不同的配置,每个配置为代理调用不同的行为例程。

它还有两个关键字参数,它们采用布尔参数,每个参数的默认值为true。关键字参数schedule将代理添加到计划中。这是一个选项,以防用户从一个复杂的网络开始,而代理已经是一个组的一部分。net参数类似地将代理添加到networkx对象。这是在用户有一个他或她不想成为网络一部分的代理时完成的。multi-level.mesa.remove函数需要代理对象。如果调用,这将在适用时从所有管理器中删除代理。多级的mesa.step函数的工作方式与mesa step函数类似,它按计划遍历每个代理并执行它们的step函数。随机激活是由关键字参数shuffled标识的默认值。如果shuffled为false,它将遵循有序字典中的顺序(添加代理的顺序)。关键字参数by_type设置为false,但可以采用代理类型列表来模拟分阶段激活。常量更新提供了在更动态的调度之后激活特定代理类型的能力。例如,一个环境变量,它在每一个时间步上以稳定的速率变化。

元代理类

组类将层次结构引入abm。group类执行类似于多级mesa或mesa的时间模块的功能。group类有三个管理器,其中包括属于该组的代理字典、按类型分组的代理字典和子代理的networkx图形对象。然后,该组有三个属性,以便于用户使用该组。第一个属性是group.active,这是一个布尔值,可帮助用户根据需要激活和停用组。接下来的两个属性是group.type和group.str,这两个属性都等于"group",使用户可以更轻松地识别和执行组上的功能。组的最后一个属性是其策略对象,该对象由用户传入并提供组行为。组及其内部代理的行为是通过两个步骤函数来完成的,即调用策略函数的group.group_步骤和单个代理步骤函数,同样使用随机顺序,但使用与multivel_mesa.step函数相同的选项来指示调度排序过程。

属性:
1。group.sub_agents=字典
2。group.agents_by_type=字典
3.group.net=networkx图形
4.group.policy=组策略的对象
5。group.active=组的状态


主要功能:
1。group.meta_step()=指示子代理行为的策略
2。group.step()=子代理行为

这些函数可以作为正常阶跃函数的一部分,在特定事件或特定时间间隔使用。以网络数据结构为主要管理结构,多级mesa能够将这些相互依赖关系的相互依赖性和变化的动态性集成到abm管理结构中,提供了一种超越传统管理结构的新的动态性。当前的多层次方法。














欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java读取SSLSocket的最快或最佳方式   JavaGuice向类构造函数注入对象   java类不是抽象的,并且不会覆盖OnClickListener中的抽象方法onClick(视图)   java OpenGL 1.1更改颜色更改以前的颜色?   c#将Java/Android连接到。网络服务   java在节点上生成AES密钥   java Liferay与MarkLogic XDBC数据库集成   java使用静态初始化块来提高性能   java如何在需要不同参数的另一个方法中使用同一类中的方法   音频Java多种声音   Java显式引用转换   java Intellij,如何在maven项目中导入模块   java在什么条件下调用ELResolver的setValue方法?   java在beanshell中计算代码字符串并获取beanshell解释器返回的值   javascript将音频文件上载到服务器并从服务器响应设置图像   编码风格清理java代码,多个else if语句   java是否需要使此变量可变?   java线程未更新GlassPane上的进度条   java关闭调试模式@Vaadin Spring启动应用程序