博弈论(二): 车联网环境下一个基于 博弈论的十字路口智能 交通控制算法

2023-12-12 14:08

本文主要是介绍博弈论(二): 车联网环境下一个基于 博弈论的十字路口智能 交通控制算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 问题描述

1、胆小鬼博弈

胆小鬼博弈(The game of  chicken)又译懦夫博弈,是博弈论中一个影响深远的模型,逻辑就是“不要命的最大”。模型中,两名车手相对驱车而行,谁最先转弯的一方被耻笑为“胆小鬼”(chicken),让另一方胜出,因此这博弈模型在英文 中 称 为  The   Game of Chicken(懦夫游戏),但如果两人拒绝转弯,任由两车相撞,最终谁都无法受益。其收益矩阵如图.1 所示。本方法受胆小鬼博弈启发。

该博弈只有两名玩家,#1决定车辆 2 和 4 的动作,而#2决定

车辆 1 和 3 的动作,如图 2 所示。每个玩家想要以这样的方式控制车辆以最小化它们在交叉路口的延迟并保证它们安全地(未发生碰撞)穿过十字路口。

每个玩家最三种可能的动作:加速(表示为1),减速(表示为−1)或以当前速度继续行驶(表示为0)。由于每个玩家有两辆车并且每辆车都有动作组,因此

玩家的动作是车辆动作的笛卡尔乘积。每辆汽车可以采取的动作是{1, 0,−1}, 则 每个 玩家 可 以 采 取 的 动 作 有 9  种,即 { 1 , 0 , −1 }×{ 1 , 0 , −1 }  =

{ (1,1), (1,0) , (0,1) , (1, −1) , (−1,1), (0,0) , (0, −1) , (−1,0) , (−1, −1) } ,例如

#1的动作为(1,0)代表他命令 2 号车加速,3 号车保持当前速度行驶。

  1. 在给定车辆数据与玩家策略后可以运行驾驶模拟

 

3.1数据:

道路结构如图 3 所示。每次模拟中随机生成 4 辆车的数据,每辆车的数据的形式为(d, v),如图所示,为车辆距离停车线stop _line 的距离,范围为[0,90],v为车辆的当前速度,初始化范围为[20,40],规则是加速后速度不能超过40,减速下限无限制。

3.2根据车辆动作速度更新:

为简化计算过程,实验中加速(action = 1)直接将原速度提高 40%,减速(action = −1)直接将原速度减少 40%,保持当前速度则速度不变。速度的更新公式为:

\small v\_new=v\times \left ( 1+action\times 0.4 \right )

3.3碰撞判定:

以图3中4号碰撞点为例,计算3号车与4号车到达碰撞点4的时间差,如时间差小于1s则判定为碰撞,否则判定为通过。

3.4博弈损失(通行时间)

一次模拟中 4 个碰撞点中有一个发生了碰撞则为博弈中双输的情况,该次博弈损失为无穷大( inf )。如未发生碰撞,则博弈损失为 4 辆车通过该十字路口的平均时间。一辆车( d, v )的通行时间为:

此处假设车辆经过一次速度调整后,在驶出路口前不再调整速度。

 

4.1计算博弈损失矩阵

遍历所有的决策组合,计算出博弈损失矩阵(通行时间),并给出最快通过时的玩家的决策:

 

(1, 1)

(1, 0)

(1, -1)

(0, 1)

(0, 0)

(0, -1)

(-1, 1)

(-1, 0)

(-1, -1)

(1, 1)

 

 

 

 

 

 

 

 

 

(1, 0)

 

 

 

 

 

 

 

 

 

(1, -1)

 

 

 

 

 

 

 

 

 

(0, 1)

 

 

 

 

 

 

 

 

 

(0, 0)

 

 

 

 

 

 

 

 

 

(0, -1)

 

 

 

 

 

 

 

 

 

(-1, 1)

 

 

 

 

 

 

 

 

 

(-1, 0)

 

 

 

 

 

 

 

 

 

(-1, -1)

 

 

 

 

 

 

 

 

 

 

通行时间最短:

Player #1 采取的策略 :

Player #2 采取的策略 :

 

4.2与传统方法对比

传统方法:先截断一个方向的车流,让另一个方向的车全部通行后在开流。例如先让车 2,4 通行,后让 1,3 通行。通行时间为

每次实验中,随机生成 4 辆车的数据,计算该数据在传统方法下的通行时间,再计算 4.1 中的矩阵,以矩阵中的最小值为博弈方法的通行时间。

进行 10 次实验,分别记录 10 次实验中博弈方法和传统方法的结果,书写实验报告。

 

  • 实验结果

遍历所有的决策组合,计算出博弈损失矩阵(通行时间),并给出最快通过时的玩家的决策:

 

 

(1, 1)

(1, 0)

(1, -1)

(0, 1)

(0, 0)

(0, -1)

(-1, 1)

(-1, 0)

(-1, -1)

(1, 1)

inf

inf

inf

inf

inf

inf

inf

inf

inf

(1, 0)

inf

inf

inf

inf

inf

inf

inf

inf

inf

(1, -1)

inf

inf

7.3

inf

inf

7.7

inf

inf

inf

(0, 1)

inf

inf

inf

inf

inf

inf

inf

inf

inf

(0, 0)

inf

inf

inf

inf

inf

inf

inf

inf

inf

(0, -1)

inf

inf

7.5

inf

inf

7.9

inf

inf

inf

(-1, 1)

inf

inf

inf

inf

inf

inf

inf

inf

inf

(-1, 0)

inf

inf

inf

inf

inf

inf

inf

inf

inf

(-1, -1)

inf

inf

inf

inf

inf

inf

inf

inf

inf

通行时间最短: 7.3s

Player #1 采取的策略 :[1, -1]

Player #2 采取的策略 :[1, -1]

传统时间:     13.7s

 

重复十次实验

 

最短通行时间

传统时间

1

[[-1, 1], [1, 1]] 8.04

18.85

2

[[1, 1], [0, 0]] 6.34

16.53

3

[[0, -1], [1, -1]] 8.38

14.84

4

[[0, 0], [0, 1]] 6.56

15.90

5

[[-1, 0], [1, 1]] 6.23

13.52

6

[[1, 1], [0, -1]] 7.57

17.08

7

All accident

17.25

8

All accident

15.90

9

[[-1, 0], [1, 1]] 6.20

14.16

10

All accident

11.78

  • 代码展示
import random
# 初始化一辆车
def init():v = random.uniform(20, 40)d = random.uniform(0, 90)return [d, v, 0]def cal_time(car):return (90-car[0])/car[1] + (110+car[0])/car[2]def tradition(car):car1, car2, car3, car4 = carreturn max(200/car1[1], 200/car3[1]) + max(200/car2[1], 200/car4[1])def game_run(player1, player2, car):# 初始化车辆car1, car2, car3, car4 = car# 速度更新car1[2] = car1[1] * (1 + player2[0] * 0.4)car2[2] = car2[1] * (1 + player1[0] * 0.4)car3[2] = car3[1] * (1 + player2[1] * 0.4)car4[2] = car4[1] * (1 + player1[1] * 0.4)# 碰撞分析accident = any([abs((car4[0] + 15) / car4[2] - (car1[0] + 5) / car1[2]) < 1,  abs((car1[0] + 15) / car1[2] - (car2[0] + 5) / car2[2]) < 1,             			  abs((car2[0] + 15) / car2[2] - (car3[0] + 5) / car3[2]) < 1,  abs((car3[0] + 15) / car3[2] - (car4[0] + 5) / car4[2]) < 1])   return (cal_time(car1) + cal_time(car2) + cal_time(car3) + cal_time(car4)) / 4 + accident * 9999999def main():# 设置玩家行动# player1 = [1, 1] # player2 = [1, 1] action = [[1, 1], [1, 0], [1, -1], [0, 1], [0, 0], [0, -1], [-1, 1], [-1, 0], [-1, 1]]car = [init(), init(), init(), init()]print("init car:", car)min_t = 999min_t_action = Nonefor i in range(9):for j in range(9):t = game_run(action[i], action[j], car)  # run(player1, player2)if t < 9999999:print("%.1f" % t, end=" ")if t < min_t:min_t = tmin_t_action = [action[i], action[j]]else:print("inf", end=" ")print()if min_t_action:print("min of game: ", min_t_action, "%.1f" % min_t)else:print("min of game: accident")print("tradition time: ", "%.1f" % tradition(car))if __name__ == "__main__":main()

 

这篇关于博弈论(二): 车联网环境下一个基于 博弈论的十字路口智能 交通控制算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/484898

相关文章

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可