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

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

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

高并发环境中保持幂等性

在高并发环境中保持幂等性是一项重要的挑战。幂等性指的是无论操作执行多少次,其效果都是相同的。确保操作的幂等性可以避免重复执行带来的副作用。以下是一些保持幂等性的常用方法: 唯一标识符: 请求唯一标识:在每次请求中引入唯一标识符(如 UUID 或者生成的唯一 ID),在处理请求时,系统可以检查这个标识符是否已经处理过,如果是,则忽略重复请求。幂等键(Idempotency Key):客户端在每次

智能交通(二)——Spinger特刊推荐

特刊征稿 01  期刊名称: Autonomous Intelligent Systems  特刊名称: Understanding the Policy Shift  with the Digital Twins in Smart  Transportation and Mobility 截止时间: 开放提交:2024年1月20日 提交截止日

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip