首页 > 编程语言 >(10-2-01)智能行为决策算法:常用的智能行为决策算法-------马尔可夫决策过程(MDP)

(10-2-01)智能行为决策算法:常用的智能行为决策算法-------马尔可夫决策过程(MDP)

时间:2024-07-30 19:58:26浏览次数:11  
标签:状态 奖励 路径 决策 down 智能 算法 grid MDP

10.2  常用的智能行为决策算法

在实际应用中,智能行为决策算法在自动驾驶系统中各有其独特的优势和应用场景,通过合理组合和优化,能够有效提升自动驾驶的安全性、可靠性和效率。在本节的内容中,将详细讲解常用的智能行为决策算法的用法。

10.2.1  马尔可夫决策过程(MDP)

马尔可夫决策过程(Markov Decision Process,MDP)是一种用于建模决策过程的数学框架,特别适用于在不确定环境中进行序列决策。它通过定义状态、动作、转移概率和奖励来描述一个系统的动态行为。以下是对MDP的详细介绍:

1. MDP的基本要素

一个MDP由以下四个基本要素组成:

  1. 状态集(S):表示系统可能处于的所有状态的集合。例如,在自动驾驶中,状态可以表示车辆的位置、速度、周围环境等信息。
  2. 动作集(A):表示在每个状态下可执行的动作的集合。例如,自动驾驶车辆可以选择加速、减速、转向等动作。
  3. 转移概率(P):描述系统在执行某个动作后,从一个状态转移到另一个状态的概率。通常表示为P(s'|s,a),即在状态s下执行动作a后转移到状态s'的概率。
  4. 奖励函数(R):定义每个状态和动作对的奖励。R(s,a)表示在状态s下执行动作a所获得的即时奖励。例如,自动驾驶车辆在避开障碍物时可能会获得较高的奖励。

2. MDP的目标

MDP的目标是找到一个策略(Policy),使得在给定时间范围内(或无限时间内)的累积奖励最大化。策略π是状态到动作的映射,表示在每个状态下应该选择的动作。

3. 求解MDP的方法

常用的求解MDP的方法包括:

  1. 值迭代(Value Iteration):通过迭代更新状态价值函数,直到收敛到最优价值函数。
  2. 策略迭代(Policy Iteration):交替进行策略评估和策略改进,直到找到最优策略。
  3. Q-Learning:一种无模型的强化学习算法,通过学习状态-动作价值函数来找到最优策略。

4. MDP在自动驾驶中的应用

在自动驾驶中,MDP被广泛用于路径规划和决策制定。具体应用场景包括:

  1. 路径规划:通过MDP优化车辆的行驶路径,避免障碍物并最小化行驶时间或能耗。
  2. 交通信号处理:MDP可以帮助车辆在交叉口处做出决策,如何时停车、加速或转弯。
  3. 应急处理:在突发情况下,MDP可以帮助车辆迅速评估各种可能的动作并选择最优应对方案。

例如下面的例子实现了一个简单的自动驾驶场景,车辆在一个网格地图上行驶,每个格子代表一个状态,车辆可以选择向上、向下、向左或向右移动(动作)。奖励函数定义为到达目标位置时获得正奖励,碰到障碍物时获得负奖励。通过MDP可以计算出车辆从起点到终点的最优路径,避开障碍物并最大化累积奖励。

实例10-1:使用MDP计算车辆从起点到终点的最优路径(源码路径:codes\10\mdp.py

实例文件mdp.py的具体实现代码如下所示。

import numpy as np
import matplotlib.pyplot as plt

# 定义网格大小
grid_size = (5, 5)
grid = np.zeros(grid_size)

# 定义起点和终点
start = (0, 0)
goal = (4, 4)

# 定义障碍物
obstacles = [(1, 2), (2, 2), (3, 2)]

# 设置奖励函数
reward = np.full(grid_size, -1)
reward[goal] = 100  # 到达目标位置时的正奖励
for obs in obstacles:
    reward[obs] = -100  # 碰到障碍物时的负奖励

# 定义动作集
actions = ['up', 'down', 'left', 'right']
action_vectors = {
    'up': (-1, 0),
    'down': (1, 0),
    'left': (0, -1),
    'right': (0, 1)
}

# 定义值迭代算法
def value_iteration(grid, reward, gamma=0.9, theta=0.0001):
    value = np.zeros_like(reward)
    policy = np.full(reward.shape, '', dtype=object)
    delta = theta + 1
    while delta > theta:
        delta = 0
        for i in range(grid.shape[0]):
            for j in range(grid.shape[1]):
                if (i, j) == goal or (i, j) in obstacles:
                    continue
                v = value[i, j]
                action_values = []
                for action in actions:
                    di, dj = action_vectors[action]
                    ni, nj = i + di, j + dj
                    if 0 <= ni < grid.shape[0] and 0 <= nj < grid.shape[1]:
                        action_values.append(reward[ni, nj] + gamma * value[ni, nj])
                    else:
                        action_values.append(-np.inf)
                value[i, j] = max(action_values)
                policy[i, j] = actions[np.argmax(action_values)]
                delta = max(delta, abs(v - value[i, j]))
    return value, policy

# 执行值迭代算法
value, policy = value_iteration(grid, reward)

# 输出最优价值函数和策略
print("Optimal Value Function:")
print(value)
print("\nOptimal Policy:")
print(policy)

# 显示最优路径
def display_policy(policy, start, goal):
    path = []
    current = start
    while current != goal:
        path.append(current)
        action = policy[current]
        di, dj = action_vectors[action]
        current = (current[0] + di, current[1] + dj)
    path.append(goal)
    return path

path = display_policy(policy, start, goal)
print("\nOptimal Path:")
print(path)

# 可视化函数
def plot_grid(grid, start, goal, obstacles, path):
    fig, ax = plt.subplots()
    ax.set_xlim(-0.5, grid.shape[1] - 0.5)
    ax.set_ylim(-0.5, grid.shape[0] - 0.5)
    ax.set_xticks(np.arange(-0.5, grid.shape[1], 1))
    ax.set_yticks(np.arange(-0.5, grid.shape[0], 1))
    ax.grid(which="both")
    
    # 绘制起点、终点和障碍物
    ax.plot(start[1], start[0], "go", markersize=10)  # 起点标记为绿色圆圈
    ax.plot(goal[1], goal[0], "ro", markersize=10)    # 终点标记为红色圆圈
    for obs in obstacles:
        ax.plot(obs[1], obs[0], "ks", markersize=10)  # 障碍物标记为黑色方块

    # 绘制路径
    path_x, path_y = zip(*path)
    ax.plot(path_y, path_x, "b-", marker="o", markersize=5)  # 路径标记为蓝色线条和圆圈

    plt.gca().invert_yaxis()
    plt.show()

# 绘制网格地图和路径线路
plot_grid(grid, start, goal, obstacles, path)

上述代码的实现流程如下所示:

  1. 首先,定义了一个网格地图,包括起点、终点和障碍物的位置,并设置了奖励函数。
  2. 然后,通过值迭代算法计算每个状态点的最优值函数和相应的策略,策略指示每个状态点应采取的动作。
  3. 最后,利用 Matplotlib 库将网格地图和从起点到终点的最优路径进行 Visual Studio 展示,包括标记起点、终点、障碍物以及路径线路,提供 Williams 的路径规划结果。

执行后会计算并打印输出如下在网格地图上从起点到终点的最优路径,并进行可视化展示。

Optimal Value Function:
[[ 41  47  54  62  70]
 [ 47  54   0  70  79]
 [ 54  62   0  79  89]
 [ 62  70   0  89 100]
 [ 70  79  89 100   0]]

Optimal Policy:
[['down' 'down' 'right' 'down' 'down']
 ['down' 'down' '' 'down' 'down']
 ['down' 'down' '' 'down' 'down']
 ['down' 'down' '' 'down' 'down']
 ['right' 'right' 'right' 'right' '']]

Optimal Path:
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4)]

在本实例中,函数plot_grid使用Matplotlib绘制了网格地图和路径线路。绘制了一个5*5的网格可视化图,其中绿色圆圈表示起点,红色圆圈表示终点,黑色方块表示障碍物。蓝色线条和圆圈标是为了从起点到终点的最优路径,路径遵循了计算出的最优策略。如图10-1所示。

图10-1  绘制的可视化图

标签:状态,奖励,路径,决策,down,智能,算法,grid,MDP
From: https://blog.csdn.net/asd343442/article/details/140798395

相关文章

  • 2024“钉耙编程”中国大学生算法设计超级联赛(1)1012并
    题目大意:给出n个矩形,求被k个矩形覆盖的面积的并集的期望,输出k为1-n的所一答案思路:由于是求期望所以是求出所有情况的和再除以可能的情况,每一种情况中的面积都由--同时被1个矩形覆盖,同时被两个矩形覆盖······同时被k个矩形覆盖组成,而且不难得出当k一定时,取被m个矩形覆盖的......
  • 数组的算法
    冒泡法冒泡排序(BubbleSort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的......
  • 从百川智能融资50亿来看国内大模型的发展前景
     7月25日,AI初创公司百川智能确认:已完成A轮融资,总融资金额达50亿元。A轮融资完成后,百川智能将以200亿元估值开启B轮融资。 从参与A轮投资的资方来看,有阿里、小米、腾讯、亚投资本、中金等头部大厂和市场化投资机构,也有北京市人工智能产业投资基金、上海人工智能产业投资基金......
  • 【智能算法应用】基于球形矢量的灰狼算法求解UAV路径规划问题
    目录1.算法原理2.数学模型3.结果展示4.参考文献5.代码获取1.算法原理【智能算法】灰狼算法(GWO)原理及实现2.数学模型路径最优性为了实现UAV的高效运行,计划的路径需要在某一特定标准上达到最优。UAV飞行路径Xi表示为UAV需要飞过的一系列n个航路点,每个航路点对应搜......
  • 【智能算法应用】A*和改进A*求解大规模栅格地图路径规划问题
    目录1.算法原理2.二值图像构建大规模栅格地图3.结果展示4.代码获取1.算法原理精准导航:用A*算法优化栅格地图的路径规划【附Matlab代码】改进A*算法通过删除必要的拐点或简化路径来减少路径长度,使得路径更为直观和高效。2.二值图像构建大规模栅格地图给定一幅二......
  • 算法:请找出数组a所有重复元素和比较数组a和数组b得到不重复的新数组和比较数组a和数组
    /***1.给定数组int[]a,int[]b*(1)请找出数组a所有重复元素,例:int[]a={1,2,3,4,8,9,3,5,1,3},结果int[]a1={1,1,3,3,3}*(2)比较数组a和数组b得到不重复的新数组,例:int[]a={1,2,3,4,8,9,3,5,1,3},int[]b={2,7,6,0,5},结果int[]c={1,2,3,4,5,6,......
  • 智能软件元宇宙的作用
    智能软件元宇宙是指通过人工智能技术与元宇宙的结合,构建一个高度智能化、互动性强且沉浸感十足的虚拟空间。这一领域的发展前景广阔,主要体现在以下几个方面:技术融合:元宇宙是将区块链技术、交互技术、电子游戏技术、人工智能技术、网络及运算技术等一系列数字技术相结合......
  • 构建铁塔基站安全防护网:视频AI智能监控技术引领智慧化转型
    一、背景现状随着通信技术的快速发展,铁塔基站作为重要的通信基础设施,其安全、稳定、高效的运行对于保障通信网络的畅通至关重要。然而,铁塔基站大多分布在公路边、高山、野外等区域,巡检难度大,维护效率低,且面临着非法闯入、被盗、私挂设备等管理风险。铁塔基站通常分布广泛,且环境复......
  • 智慧矿山,安全先行:矿山风险预警视频智能监控系统的应用解析
    随着科技的飞速发展,矿山行业作为国民经济的重要支柱之一,其安全生产问题日益受到社会各界的广泛关注。为了有效降低矿山作业中的风险,提升安全管理水平,矿山风险预警视频智能监控系统应运而生。该系统集成了高清视频监控、人工智能分析、大数据分析等先进技术,为矿山的安全生产提供了......
  • 利用DYNAMIXEL智能伺服舵机从《传送门2》中打造一个更优质的动画机器人小麦克利(Wheatl
    原文链接:https://www.youtube.com/watch?v=OEn9hZ-Tw1E   这段视频由ROBOTIS提供!大家好,我想给大家推荐一个精彩视频,在视频中展示了如何制作《传送门2》中的动画机器人小麦克利(Wheatley)。看看是如何利用DYNAMIXEL智能伺服系统让小麦克利活起来的。  对于那些可能想设......