[论文复现]演化博弈方法用于多智能体系统最优资源分配

2023-05-16

原文 演化博弈方法用于多智能体系统最优资源分配 -CSDN博客
https://ieeexplore.ieee.org/document/8243778/

问题描述

  有2种资源分配给6个个体,2种资源的总量分别为 y 1 = 545 , y 2 = 467 y_1=545,y_2=467 y1=545,y2=467,不同的个体收到不同的资源会产生不同的收益,分配的资源量均大于等于0。以第3个个体为例,它接受的资源为 x ⃗ 3 = [ x 31 , x 32 ] T \vec{x}_3=[x_{31},x_{32}]^\text{T} x 3=[x31,x32]T,两种资源的上限分别为 x 31 max = 66 , x 32 max = 120 x_{31}^\text{max}=66,x_{32}^\text{max}=120 x31max=66,x32max=120。可行资源组合 R 3 = x ⃗ 3 \mathcal{R}_3=\vec{x}_3 R3=x 3(这我没看懂 R 3 \mathcal{R}_3 R3 有什么用),收到2种资源的收益为
u 3 ( x ⃗ 3 ) = x 31 ( 2 x 31 max − x 31 ) c 31 x 31 max + x 32 ( 2 x 32 max − x 32 ) c 32 x 32 max = x 31 ( 2 ⋅ 66 − x 31 ) 0.4 ⋅ 66 + x 32 ( 2 ⋅ 120 − x 32 ) 0.5 ⋅ 120 \begin{aligned} u_3(\vec{x}_3) =& \frac{x_{31}(2x_{31}^\text{max}-x_{31})} {c_{31}x_{31}^\text{max}} +\frac{x_{32}(2x_{32}^\text{max}-x_{32})} {c_{32}x_{32}^\text{max}} \\ =& \frac{x_{31}(2\cdot 66-x_{31})}{0.4\cdot 66} +\frac{x_{32}(2\cdot 120-x_{32})}{0.5\cdot 120} \\ \end{aligned} u3(x 3)==c31x31maxx31(2x31maxx31)+c32x32maxx32(2x32maxx32)0.466x31(266x31)+0.5120x32(2120x32)
需要求的是在
x 11 + x 21 + x 31 + x 41 + x 51 + x 61 = 545 x 12 + x 22 + x 32 + x 42 + x 52 + x 62 = 467 x_{11}+x_{21}+x_{31}+x_{41}+x_{51}+x_{61}=545 \\ x_{12}+x_{22}+x_{32}+x_{42}+x_{52}+x_{62}=467 x11+x21+x31+x41+x51+x61=545x12+x22+x32+x42+x52+x62=467
的约束条件下,求
u 1 + u 2 + u 3 + u 4 + u 5 + u 6 u_1+u_2+u_3+u_4+u_5+u_6 u1+u2+u3+u4+u5+u6
的最大值。

一个证明的解读

原文中求和不变性的证明式(16)中
x ˙ 31 = x 31 ( p 31 x 21 + x 41 y 1 − x 21 p 21 + x 41 p 41 y 1 ) p 31 = ∂ u 3 ∂ x 31 = 2 ( x 31 max − x 31 ) c 31 x 31 max \begin{aligned} \dot{x}_{31} =& x_{31}\left(p_{31}\frac{x_{21}+x_{41}}{y_1} -\frac{x_{21}p_{21}+x_{41}p_{41}}{y_1}\right) \\ p_{31} =& \frac{\partial u_3}{\partial x_{31}} =\frac{2(x_{31}^\text{max}-x_{31})}{c_{31}x_{31}^\text{max}} \end{aligned} x˙31=p31=x31(p31y1x21+x41y1x21p21+x41p41)x31u3=c31x31max2(x31maxx31)
假设对个体3和它的邻居2,包含这两个个体的式子为
x ˙ 31 = x 31 ( p 31 x 21 + x 41 y 1 − x 21 p 21 + x 41 p 41 y 1 ) x ˙ 21 = x 21 ( p 21 x 11 + x 31 y 1 − x 11 p 11 + x 31 p 31 y 1 ) \dot{x}_{31} = x_{31}\left(p_{31}\frac{x_{21}+x_{41}}{y_1} -\frac{x_{21}p_{21}+x_{41}p_{41}}{y_1}\right) \\ \dot{x}_{21} = x_{21}\left(p_{21}\frac{x_{11}+x_{31}}{y_1} -\frac{x_{11}p_{11}+x_{31}p_{31}}{y_1}\right) \\ x˙31=x31(p31y1x21+x41y1x21p21+x41p41)x˙21=x21(p21y1x11+x31y1x11p11+x31p31)
取出所有包含 x 21 x_{21} x21 x 31 x_{31} x31 的项就是式(16)中
( x 31 p 31 x 21 − x 31 x 21 p 21 ) + ( x 21 p 21 x 31 − x 21 x 31 p 31 ) = 0 (x_{31}p_{31}x_{21}-x_{31}x_{21}p_{21}) + (x_{21}p_{21}x_{31}-x_{21}x_{31}p_{31})=0 (x31p31x21x31x21p21)+(x21p21x31x21x31p31)=0

与拉格朗日乘子法比较

  原论文中给出的例子的收益函数里两个资源的收益相互独立,因此本文只分析第一种资源的收益。除了原文介绍的演化博弈法以外,注意到这个问题就是一个约束优化问题。可以试一下拉格朗日乘子法。为便于说明只写3个变量,代码里完整给出。
U = x 1 ( 2 x m 1 − x 1 ) c 1 x m 1 + x 2 ( 2 x m 2 − x 2 ) c 2 x m 2 + x 3 ( 2 x m 3 − x 3 ) c 3 x m 3 U=\frac{x_1(2x_{m1}-x_1)}{c_1x_{m1}} +\frac{x_2(2x_{m2}-x_2)}{c_2x_{m2}} +\frac{x_3(2x_{m3}-x_3)}{c_3x_{m3}} U=c1xm1x1(2xm1x1)+c2xm2x2(2xm2x2)+c3xm3x3(2xm3x3)
∂ L ∂ x i = x m i − x i k i + λ = 0 x i − k i λ = x m i \frac{\partial L}{\partial x_i}=\frac{x_{mi}-x_i}{k_i} + \lambda = 0 \\ x_i-k_i\lambda = x_{mi} xiL=kixmixi+λ=0xikiλ=xmi
其中 k i = c i x m i 2 k_i=\displaystyle\frac{c_ix_{mi}}{2} ki=2cixmi。写成矩阵形式
[ 1 k 1 1 k 2 1 k 3 1 1 1 0 ] [ x 1 x 2 x 3 λ ] = [ x m 1 x m 2 x m 3 545 ] \left[\begin{matrix} 1 &&& k_1 \\ & 1 && k_2 \\ && 1 & k_3 \\ 1 & 1 & 1 & 0 \\ \end{matrix}\right] \left[\begin{matrix} x_1 \\ x_2 \\ x_3 \\ \lambda \end{matrix}\right] =\left[\begin{matrix} x_{m1} \\ x_{m2} \\ x_{m3} \\ 545 \end{matrix}\right] 111111k1k2k30 x1x2x3λ = xm1xm2xm3545
解得
X = [ 167.604914004914 45.1985257985260 62.6270270270270 104.645700245700 93.6117936117936 71.3120393120392 0.255528255528253 ] X=\left[\begin{matrix} 167.604914004914 \\ 45.1985257985260 \\ 62.6270270270270 \\ 104.645700245700 \\ 93.6117936117936 \\ 71.3120393120392 \\ 0.255528255528253 \end{matrix}\right] X= 167.60491400491445.198525798526062.6270270270270104.64570024570093.611793611793671.31203931203920.255528255528253
演化博弈法的仿真结果为
X = [ 167.75139 45.21687 62.42745 104.58382 93.432434 71.588005 ] X=\left[\begin{matrix} 167.75139 \\ 45.21687 \\ 62.42745 \\ 104.58382 \\ 93.432434 \\ 71.588005 \\ \end{matrix}\right] X= 167.7513945.2168762.42745104.5838293.43243471.588005
可见结果基本相同。

仿真

在这里插入图片描述
在这里插入图片描述
计算出的最大值是 3615.688 3615.688 3615.688,论文里没给出最大值的具体值但结果差不多。

参考链接

  1. 演化博弈方法用于多智能体系统最优资源分配 -CSDN博客
  2. https://ieeexplore.ieee.org/document/8243778/
  3. 演化博弈、复制动态方程与仿真 -CSDN博客

附代码

拉格朗日乘子法的matlab代码:

clear;clc;
Cij = [0.2;0.3;0.4;0.1;0.5;0.85];
Xmaxij = [172;47;66;106;100;80];
K = zeros(6,1);
for n = 1:6
    K(n) = Cij(n)*Xmaxij(n)*0.5;
end
A = [eye(6), K; ones(1, 6), 0];
B = [Xmaxij; 545];
X = pinv(A)*B

演化博弈法的python代码:

import matplotlib.pyplot as plt
import numpy as np

def Marginal_Utility(i, j):
    return 2*(Xmaxij[i, j] - Xij[i, j]) / (Cij[i, j]*Xmaxij[i, j])
def StateSum():
    sum = 0
    for n in range(Xij.shape[0]):
        sum += Xij[n, 0]
    for n in range(Xij.shape[0]):
        sum += Xij[n, 1]
    return sum
def Utility():
    u = 0
    for j in range(2):
        for i in range(6):
            u += Xij[i, j]*(2*Xmaxij[i, j] - Xij[i, j]) / Cij[i, j] / Xmaxij[i, j]
    return u

Cij = np.array([
    [0.2 , 0.85],
    [0.3 , 0.4 ],
    [0.4 , 0.5 ],
    [0.1 , 0.2 ],
    [0.5 , 0.4 ],
    [0.85, 0.8 ],
], dtype=np.float32)
Xmaxij = np.array([
    [172, 86 ],
    [47 , 70 ],
    [66 , 120],
    [106, 45 ],
    [100, 90 ],
    [80 , 100],
], dtype=np.float32)
Xij = np.array([
    [10, 10],
    [10, 10],
    [10, 10],
    [10, 10],
    [10, 10],
    [10, 10],
], dtype=np.float32)
Y = np.array([545, 467])
sum = 0
for n in range(Xij.shape[0] - 1):
    sum += Xij[n, 0]
Xij[-1, 0] = Y[0] - sum
sum = 0
for n in range(Xij.shape[0] - 1):
    sum += Xij[n, 1]
Xij[-1, 1] = Y[1] - sum
Xnew = Xij.copy()
nvec = []
Uvec = []
Xvec = []
for i in range(6):
    Xvec.append([])
for n in range(100):
    for j in range(2):
        for i in range(6):
            Ineigh0 = (i+5) % 6
            Ineigh1 = (i+1) % 6
            f = Marginal_Utility(i, j) * (Xij[Ineigh0, j] + Xij[Ineigh1, j])
            fbar = Xij[Ineigh0, j] * Marginal_Utility(Ineigh0, j)
            fbar += Xij[Ineigh1, j] * Marginal_Utility(Ineigh1, j)
            deltax = Xij[i, j] * (f - fbar) / Y[j]
            Xnew[i, j] += deltax*0.1
    Xij = Xnew.copy()
    for i in range(6):
        Xvec[i].append([Xij[i, 0]])
    # print(StateSum())
    nvec.append(n)
    Uvec.append(Utility())
print(Uvec[-1])
# plt.plot(nvec, Uvec)
for i in range(6):
    plt.plot(nvec, Xvec[i])
plt.legend([str(i) for i in range(6)])
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[论文复现]演化博弈方法用于多智能体系统最优资源分配 的相关文章

  • HTML页面中文字增多,字号会突然变大

    DIV中的文字超过一定数量之后 xff0c 在浏览器上显示突然变大 xff0c 与CSS设定的字号大小严重不符合 解决办法 xff1a 父级DIV添加CSS属性 height 100 或者 随便设置一个高度 这个问题很奇怪 xff0c 之前
  • C++分割字符串

    Python有自带的字符串分割函数 xff0c 但是C 43 43 却没有 xff0c 于是参考网上各种C 43 43 分割字符串的资源 xff0c 将其整理如下 方法1 xff1a include lt string h gt inclu
  • angular6解析模板字符串,$compile服务在angular6中的实现方法

    angular6解析动态字符串模板 依赖 xff1a Compiler服务viewContanierRef服务 步骤 xff1a 创建指令 xff0c 并通过指令接受字符串接受字符串 xff0c 并通过此字符串动态创建组件及模块compil
  • “JSON parse error: Unexpected character (‘1‘ (code 49))的解决方式

    现在是 xff1a 2022年4月30日22 29 49 大家好 xff0c 我是雄雄 刚刚在调用接口的时候 xff0c 出现了个错误 xff1a span class token punctuation span span class t
  • springboot实现用户统一认证、管理-前端实现

    大家好 xff0c 我是雄雄 xff0c 欢迎关注微信公众号 xff1a 雄雄的小课堂 前言 现在是 xff1a 2022年6月2日15 43 51 上篇文章讲述了springboot中实现用户统一认证的具体内容 xff0c 主要从后端角度
  • Settings 添加一级菜单

    Settings添加一级菜单 xff1a 1 一级菜单项的实现是Activity 例如MySettings java xff0c 此类文件直接继承的是Activity xff0c 添加比较简单 xff08 1 xff09 在清单文件中添加如
  • Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 4171 异常的解决方法

    在做本地json文件的解析时遇到了这个问题 原代码为 64 RequestMapping value 61 34 readJson1 34 public String readJson1 String cityJsonCode json解析
  • Visual Studio 中 Tab 转换为空格的设置

    在 Visual Studio 中写代码时 xff0c 按 Tab 键 xff0c 会自动进行缩进 有时希望实现按 Tab 键 xff0c 出现多个空格的效果 Visual Studio 提供了这样的功能 xff0c 具体设置方法为 xff
  • 剑指offer—03

    剑指 Offer 03 数组中重复的数字 找出数组中重复的数字 在一个长度为 n 的数组 nums 里的所有数字都在 0 xff5e n 1 的范围内 数组中某些数字是重复的 xff0c 但不知道有几个数字重复了 xff0c 也不知道每个数
  • JSONArray.remove(index)失败原因分析

    集合在执行remove方法的时候 xff0c 有两种执行方式 xff0c 第一种移除对象remove xff08 object xff09 xff0c 另一种根据下标移除remove xff08 intIndex xff09 错误案例 Li
  • 【批处理bat】暂停功能命令

    一 目的 对暂停功能做修改 二 功能 2 1屏蔽 pause gt nul 在原本的pause上使用右尖括号写入nul即可不显示任何内容 2 2修改 echo press anykey to continue XD 在pause前利用ech
  • AOSP的编译及刷机

    简介 众所周知 xff0c Android是开源的 xff0c AOSP xff08 Android Open Source Project xff09 为Android开源项目的缩写 作为一名Android开发 xff0c 掌握Andro
  • Linux常用命令记录(du、find、grep、hadoop/hdfs、sed、tar、tr)

    Linux常用命令 查询格式 语句1 语句2 语句3 xff1a 对语句1的输出结果进行语句2的判定 xff0c 然后对输出结果进行语句3的判定 如 xff1a cat a txt head 10 wc l 39 cat a txt 39
  • 虚拟机运行出现蓝屏的现象如何解决

    前两天给大家分享了如何在电脑上安装虚拟机 xff0c 听到有部分小朋友私信跟我反馈说 xff0c 自己本身电脑可以安装vm虚拟机但是他安装过后一运行就立马进入蓝屏修复界面 所以今天想跟大家分享一下遇见这种情况如何解决 xff08 本文以华硕

随机推荐

  • 小白也能学懂——子网划分(2)

    我前天讲了一下子网划分 xff0c 昨天比较忙碌就忘记写剩下的内容了 xff0c 今天吃过饭 xff0c 想给他补上 xff0c 主要还是细分一下子网划分的作用 xff0c 以及如果进行计算 xff0c 本章还不是算难 xff0c 但是计算
  • 三分钟告诉你什么是三层交换机!

    昨天上周我们讲了单臂路由和跨交换机传输 xff0c 今天想说一下三层交换机 xff0c 对了还有个小实验 xff0c 收到反馈说我每次都是在图里标注代码不够清晰 xff0c 所以接下来会在实际中把代码贴出来供大家复制使用 目录 一 三层交换
  • 链路聚合(二层链路和三层链路)

    昨天主要介绍了三层交换机 xff0c 今天顺其自然就讲到了链路聚合 xff0c 因为是交换机中一个比较重要的技术 xff0c 下面我们开始 目录 一 单臂路由和三层交换的复习 二 端口绑定技术 三 链路聚合 端口聚合 端口绑定实现的条件 四
  • 静态路由(也许是目前最全的)

    今天在公司 xff0c 新来了个实习生 xff0c 突然问道静态路由的问题 xff0c 他跟我讲他不会设置 然后我就很尴尬 xff0c 因为这个毕竟是基础知识嘛 所以今天整理了一下静态路由的知识 xff0c 跟大家分享一下 目录 一 路由器
  • C# 读取Json文件--代码示例

    1 C 读取Json文件 JsonConvert SerializeObject str object to string JsonConvert DeserializeObject obj string to json 2 Json文件创
  • 网络地址转换协议——NAT(恐怕是最全的版本)

    前天我说第二天要跟大家讲一下NAT的 xff0c 结果放假有些懒 xff0c 所以就放在今天更新 xff0c 希望大家不要凶我 xff0c 哈哈哈 目录 一 什么是NAT 1 NAT简介 2 NAT作用 3 NAT内网地址的范围 4 主要应
  • linux日志文件详解

    目录 一 日志文件的分类二 日志文件位置三 常见日志文件1 分析日志文件2 内核及系统日志 四 日志消息等级五 日志文件分析1 用户日志2 程序日志 六 日志分析注意事项 一 日志文件的分类 日志文件是用于记录Linux系统中各种运行消息的
  • 虚拟化与docker基础

    文章目录 一 虚拟化1 虚拟化概述2 虚拟化的功能3 虚拟化的三种模式4 容器与虚拟化 二 Docker1 容器概述2 Docker概述3 Docker的设计宗旨4 容器与虚拟机的区别5 容器在内核中支持两种重要的技术6 Docker核心概
  • Docker容器网络模式与数据管理

    文章目录 一 Docker容器操作1 容器创建2 查看容器的运行状态3 启动容器4 创建并开启容器5 终止容器运行6 容器的进入7 复制文件到容器中 宿主机中8 容器的导出与导入9 删除容器 二 Docker网络1 Docker网络实现原理
  • docker镜像的创建与dockerfile

    文章目录 一 docker镜像的创建1 创建镜像的方法2 基于现有镜像创建3 基于本地模板创建4 基于dockerfile创建 二 Dockerfile1 概述2 Dockerfile结构3 Dockerfile镜像结构的分层4 Docke
  • matlab中值滤波实现

    中值滤波是一种典型的非线性滤波 xff0c 是基于排序统计理论的一种能够有效抑制噪声的非线性信号处理技术 xff0c 基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值 xff0c 让周围的像素值接近真实的值从而消除孤立的噪声点 该方
  • 程序员的情人节

    今天是一个好的节日 xff0c 七夕呀 xff01 程序是最好的女朋友 xff0c 它是不会骗你的 它偶尔会发些小的情绪 只是你没有懂它
  • stm32-Hardfault及内存溢出的查找方法

    STM32内存结构 1 要点 1 1 两种存储类型 RAM 和 Flash RAM可读可写 xff0c 在STM32的内存结构上 xff0c RAM地址段分布 0x2000 0000 0x2000 0000 43 RAM size Flas
  • raylib部分源代码功能解读

    官网 https www raylib com https github com raysan5 raylib 我根据自己的需求裁剪了多余功能后的代码 xff1a https gitee com xd15zhn raylib https g
  • 无量纲处理、量纲变换与实时仿真理论

    基本原理 万有引力公式 d 2 r
  • 局域网windows平台下时间同步

    最近单位出现很多应为系统时间不统一造成的问题 xff0c 如 客户机时间与服务器时间不同步 xff0c 而客户机使用软件是读取本机时间上传服务器 xff0c 这样就会造成排序错误 每次开机修改很繁琐 我就想到了在局域网内假设时间服务器的想法
  • 水下潜航器的建模与控制

    线性系统理论大作业 待完成 题目 水下潜器模型 xff0c 可能是潜艇或者鱼雷等对象 一个主推进螺旋桨 xff0c 前后两对水平陀翼 xff0c 后面一对垂直陀翼 潜器前进过程中 xff0c 通过调节助推进螺旋桨推力 xff0c 以及三对陀
  • 演化博弈、复制动态方程与仿真

    本文只整理和总结一下我的理解 xff0c 文末列出了可供参考的更详细完整的资料 建议先看参考资料 1 xff08 博弈论公开课 xff09 的博弈论课程 xff0c 可以直接从第11讲开始看 参考链接 2 是关于演化博弈非常经典的一本书 参
  • 演化博弈方法用于多智能体系统最优资源分配

    演化博弈方法用于多智能体系统最优资源分配 Evolutionary game theoretic approach for optimal resource allocation in multi agent systems 论文复现见 论
  • [论文复现]演化博弈方法用于多智能体系统最优资源分配

    原文 演化博弈方法用于多智能体系统最优资源分配 CSDN博客 https ieeexplore ieee org document 8243778 问题描述 有2种资源分配给6个个体 xff0c 2种资源的总量分别为 y 1 61 545