Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在由集合组成的网络中寻找半径为n的代理的有效方法_Python_Python 3.x_Performance_Networkx_Agent Based Modeling - Fatal编程技术网

Python 在由集合组成的网络中寻找半径为n的代理的有效方法

Python 在由集合组成的网络中寻找半径为n的代理的有效方法,python,python-3.x,performance,networkx,agent-based-modeling,Python,Python 3.x,Performance,Networkx,Agent Based Modeling,上下文是基于代理的模型,下面的代码示例是代理的基类。代理具有一个“邻居”属性,该属性包含一个字典,该字典由一个键、网络名称和一个值(一个集合)组成,该值包含该网络中的邻居 我提出的问题与以下方法有关:Agent.Agent\u in_radius()。 例如: 给定一个由以下部分组成的网络: 代理0通过“友谊”连接连接到代理1 代理1通过“友谊”连接连接到代理2 距离代理0(d)1的代理: 代理人1 与代理0相距(d)2的代理: 探员1,探员2 目前,我已经实现了这个函数Agent.agents

上下文是基于代理的模型,下面的代码示例是代理的基类。代理具有一个“邻居”属性,该属性包含一个字典,该字典由一个键、网络名称和一个值(一个集合)组成,该值包含该网络中的邻居

我提出的问题与以下方法有关:
Agent.Agent\u in_radius()。
例如:

给定一个由以下部分组成的网络: 代理0通过“友谊”连接连接到代理1 代理1通过“友谊”连接连接到代理2

距离代理0(d)1的代理: 代理人1

与代理0相距(d)2的代理: 探员1,探员2

目前,我已经实现了这个函数
Agent.agents\u in\u radius()
,它除了没有效率之外,甚至是不可伸缩的(我不能要求距离n,除非有if条件)是否有更高效、更可扩展的方法?


从numpy.random导入默认值
类代理:
max_id=0
网络名称=[
“兄弟姐妹”,
“后代”,
“家长”,
“合伙人”,
“家庭”,
"友谊",,
“罪犯”,
"专业",,
“学校”]
代理=列表()
rng=默认值
定义初始化(自):
self.networks_init()
self.unique\u id=Agent.max\u id
Agent.max\u id=Agent.max\u id+1
Agent.agents.append(self)
定义报告(自我):
return“Agent:+str(self.unique\u id)
def网络初始化(自):
"""
初始化网络为空
:返回:无
"""
self.neighbories={i:set()代表Agent.network_names}中的i
def随机链接(自):
"""
在集合中添加随机代理
:返回:无
"""
对于Agent.network\u名称中的网络:
对于范围内的i(0,Agent.rng.整数(0,min(len(Agent.agents),10)):
self.neights.get(net.add(Agent.rng.choice(Agent.agents))
self.neights.get(net).discard(self)
半径1中的定义代理(自身,上下文=网络名称):
"""
在距离self 1远的地方搜索代理。那些“self”只需迈出一步就可以到达
:param context:str,网络上下文
:返回:设置
"""
代理在半径=集合()中
对于上下文中的net:
如果self.neights.get(净):
对于self.neights.get(net)中的代理:
代理在半径中添加(代理)
返回代理在半径内
def代理位于半径内(self,d,context=网络名称):
"""
在距离self d的地方搜索代理。只搜索我通过“d”步到达的代理。
:参数d:int,距离
:param context:str,网络上下文
:返回:设置
"""
半径1=自身。半径1()中的代理
如果d==1:
返回半径_1
如果d>=2:
半径_2=集合()
对于半径_1中的代理_lv1:
对于agent_lv1中的agent_lv2._radius1中的agent_(上下文):
半径2.添加(代理2级)
如果d==2:
半径_2.移除(自身)
返回半径_2
如果d>=3:
半径_3=集()
对于半径_2中的代理_lv2:
对于代理2中的代理3级。代理1中的代理(上下文):
半径3.添加(代理层3)
如果d==3:
返回半径_3
如果_uname _uu==“main”:
对于范围(100)内的a:
agent=agent()
agent.random_links()