利用联盟博弈中的双边shapley值作为评估agent联盟形成的工具

bilateralshaple的Python项目详细描述


#双边shapley
根据联盟博弈理论建立了一个双边shapley值包。包通常与mesa一起使用,mesa是python基于代理的模型包(mesa 0.8.3或更高版本)。



shapley值是联盟博弈论的一个关键部分,由lloyd shapley开发(https://en.wikipedia.org/wiki/lloyd嫒u shapley)。联盟博弈理论的核心问题是代理联盟的收益分配[Shoham和Leyton Brown,2009]。换言之,当我们一起努力获得一些回报时,我们如何分割回报?shapley值按边际贡献划分,因此收益按每个代理的相对贡献划分。shapley值的这个特殊实例化借用了两个基于代理的实现。首先,史蒂文·凯奇佩尔(Steven Ketchpel)在《技术-社会能源基础设施选址:可持续能源模型规划》(Sempro)中描述了"自治机构间的联盟形成"[1995]和第二位马克·阿卜杜拉欣(Mark Abdollahian)、杨紫宁(Zining Yang)和哈尔·纳尔逊(Hal Nelson)的实施情况[2013]。在实现描述下面可以找到模块具体运行方式的更详细描述。



需求

shapley import bsv

coalition=bsv(agents,power_属性,preference_属性,
efficiency_参数,agent_id,declaite_参数,verbose)


OW代理分组在一起,每个组的权限和偏好属性
打印(coalition.result\u verbose)


/>打印(coalition.subresults)

/>
**preference_attribute:*需要字符串;代理属性,该属性在每个代理的一维谱上分配数字首选项相对首选项

信息通常介于>;1.0和<;2.0之间。1.0或更少将不会导致加入联盟的动机(即没有联盟),通常超过2.0将导致每个人加入同一联盟

**代理ID:*默认值为"唯一ID",需要字符串

使用mesa unique ID属性作为默认值,模块将此值视为string

**折衷参数:**默认值=0.95,要求在0和1之间浮动


在1.0时,当代理加入联盟时,其偏好将变为联盟的偏好;在0.0时,代理不会更改其偏好

**详细:**默认值=真、真或假输入

如果真模块将打印出算法的进度,显示在从mesa导入模型
mesa导入模型
mesa导入代理
mesa导入随机激活时间
mesa导入代理
请导入bsv
将numpy导入为np



类测试代理(代理):
"使用幂和首选项的值初始化代理(在本例中,关联为首选项)"
def\uu init(self,unique\u id,model,MaxAffinity,MaxEconomic,MaxMilitary):
使用Mesa代理模块
super()。每个代理的首选属性
self.affinity=np.random.uniform(1,MaxAffinity)
与军事力量相结合平均经济和军事力量self.schedule=随机激活(self)
对于范围内的i(self.numagents):
a=测试代理(i,self,maxafinity,maxeconomic,maxmarmial)
self.schedule.add(a)


"调用bsv模块"
def执行(self):
testnet=bsv(self.schedule.agents,"power","affinity",verbose=false)
return testnet


test=testmodel(500,20,100,100)
test=test.execution()
print("组数:",len(test.result))
print("组列表:",test.result)



\

**方法1:self.assessment_联盟(self.net)**


*每个代理与每个其他代理计算shapley值(请参见流程图),并创建最首选联盟的排序列表

**方法2:self.make_联盟(self.net,"one")**

在优先联盟的排序列表中,具有最优先代理的联盟。这些组合可能会变得棘手,因为每个代理可能希望与一个代理组成联盟。例如,在3个代理对象的列表中,代理1和代理2的最首选代理可以是代理3。无论哪个特工,特工3最喜欢的就是组成联盟的两个人。如果它们都相等,那么联盟将根据python排序函数确定的顺序形成。由于函数将迭代,直到不能形成更多的联盟,因此如果每个代理都具有相同的值,则特定的顺序将变得无关紧要。一个输入表示算法在组级别执行,而不是在组内部执行。

**方法3:self.new_node(self.net)**


一旦每个代理找到了它们的首选联盟,它们就会在网络图中用一个新名称形成一个新节点,新名称是每个代理的标识符,用"."分隔(例如agent1.agent2)。计算出联盟的偏好和权值,并创建一个保留每个个体代理信息的新图,存储在子结果中。

**打破联盟**

偏好和权力。如果特工不想再参与,那么他就离开联盟。

**模块流程图**

![双边shapleflow](https://user images.githubusercontent.com/22775448/35524085-D16BA7CC-04F6-11E8-801B-32569EC3594C.jpg)




因此,该模块不能有效地处理数千个代理。

为了减少计算负担并防止无限循环的可能性,该模块使他选择代理人只是为了在最佳联盟形成后重新审视他们的联盟。而不是在双边联盟形成的每一次迭代之后重新检查一个代理是否应该留下。如果用户希望代理在每次迭代后重新检查他们在联盟中的参与度,那么只需将线403到408标记到主循环中就可以做到这一点。






[2013]Abdollahian、Mark、Yang Zinig和Hal Nelson。2013。"技术社会能源基础设施选址:可持续能源建模规划(Sempro)","人工社会与模拟杂志16(3):1-12.

[1995]Ketchpel,S P.1995."自主代理人之间的联盟形成",《从反应到认知》,第957期:73-88页。

[shoham和leyton brown,2009]yoav、shoham和kevin leyton brown。2009。多智能体系统:算法、博弈论和逻辑基础。点燃。纽约:剑桥大学出版社。

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

推荐PyPI第三方库


热门话题
java本机方法的源代码可用吗?   java如何使父方法抛出异常?   java Android以编程方式设置不同屏幕大小/密度的布局   java如何使用一个变量来管理所有客户端请求   java输入一个txt文件,每行有一组数字   json java从jsonobject获取jsonarray错误   java将一个(WAV)写入一个文件只会说一个单词(最后一个单词)   java Telnet忽略原始字节   proguard java。运行桌面应用程序时出现lang.VerifyError   java用左键移动JLabel?   java如何在jText区域验证选项卡?   文件服务器客户端Javasocket编程中的字符串搜索   java省略了JSTL中的最后一个逗号<c:out>   java如何找到if或else代码已执行的次数?   java JavaScript WebSocket send()方法未执行   浮点数声明上的java标识符预期错误   java这是指二进制搜索算法吗?   编译mod at:reobfJar java时的minecraft问题。util。拉链ZipException:重复条目   java检测特定的震动运动(如图所示:D)