基于Qlearning强化学习的电梯群控系统高效调度策略matlab仿真

news/2025/10/31 22:54:15/文章来源:https://www.cnblogs.com/51matlab/p/19181414

1.算法仿真效果

matlab2022a仿真结果如下(完整代码运行后无水印):

1

2

3

4

5

2.算法涉及理论知识概要

随着高层建筑的不断增多,电梯成为人们日常生活中不可或缺的垂直交通工具。电梯群控系统(Elevator Group Control System,EGCS)旨在对多台电梯进行统一调度,以提高电梯的运行效率,减少乘客的等待时间和乘梯时间,提升服务质量。传统的电梯群控算法往往基于固定的规则和经验,难以适应复杂多变的交通流量模式。而强化学习作为一种能够通过智能体与环境交互来学习最优策略的方法,为电梯群控系统的优化提供了新的思路。Q - learning 是一种经典的无模型强化学习算法,它通过不断更新 Q 表来学习最优动作价值函数,从而实现对环境的最优控制。

电梯群控系统的主要调度目标包括:

1.减少乘客等待时间:使乘客从发出请求到进入电梯的时间尽可能短。

2.减少乘客乘梯时间:使乘客在电梯内的旅行时间尽可能短。

2.1 Q-learning强化学习原理
强化学习是一种通过智能体(Agent)与环境(Environment)进行交互来学习最优策略的机器学习方法。智能体在环境中执行动作(Action),环境根据智能体的动作给出奖励(Reward)和下一个状态(State)。智能体的目标是通过不断地与环境交互,学习到一种最优策略,使得累积奖励最大化。

Q-learning 是一种无模型的强化学习算法,它通过学习动作价值函数Q(s, a) 来确定最优策略。动作价值函数Q(s, a)表示在状态s下执行动作a后,能够获得的累积奖励的期望值。

Q-learning 算法的核心思想是使用一个Q表来存储每个状态 - 动作对的Q值。在每个时间步,智能体根据当前状态s选择一个动作a,执行该动作后,环境返回下一个状态s'和奖励r。然后,智能体使用以下公式更新Q表中的Q值:
6

2.2 基于Q-learning的电梯群控系统建模
状态定义

在电梯群控系统中,状态 s 可以由多个因素组成,例如:

1.电梯位置:每台电梯当前所在的楼层。

2.电梯运行方向:每台电梯的运行方向(上行、下行或静止)。

3.请求队列:当前所有未处理的乘客请求,包括请求的起始楼层和目标楼层。

动作定义

动作a表示为哪个电梯去响应当前的一个请求。假设系统中有n台电梯,则动作空间A={1,2,⋯,n},其中动作i表示选择第i台电梯去响应请求。

奖励定义

奖励r是环境对智能体执行动作的反馈,用于引导智能体学习最优策略。在电梯群控系统中,奖励可以根据以下因素进行设计:

1.乘客等待时间:乘客等待时间越短,奖励越高。

2.乘客乘梯时间:乘客乘梯时间越短,奖励越高。

3.电梯运行效率:电梯的空驶时间和不必要的停靠次数越少,奖励越高。

3.MATLAB核心程序

.............................................................
%%
load R2.mat
% 测试调度策略并生成动画
elevator_positions = ones(1, num_elevators);
request_queue = [];
num_requests = randi([Num_people/2, Num_people]);
for i = 1:num_requestsstart_floor = randi([1, num_floors]);end_floor = randi([1, num_floors]);while end_floor == start_floorend_floor = randi([1, num_floors]);endrequest_queue = [request_queue; start_floor, end_floor];
endtotal_waiting_time = 0;
total_travel_time = 0;
num_requests = size(request_queue, 1);while ~isempty(request_queue)% 获取当前状态state = get_state(elevator_positions, request_queue);% 选择动作[~, action] = max(Q(state, :));% 执行动作[new_elevator_positions, new_request_queue, reward, waiting_time, travel_time] = take_action(elevator_positions, request_queue, action);% 更新电梯位置和请求队列elevator_positions = new_elevator_positions;request_queue = new_request_queue;% 累计指标total_waiting_time = total_waiting_time + waiting_time;total_travel_time = total_travel_time + travel_time;end% 输出最终指标total_waiting_time2=total_waiting_time;
total_travel_time2=total_travel_time;figure;
bar([total_waiting_time1,total_waiting_time2;total_travel_time1,total_travel_time2]);
ylabel('times/s');
xlabel('1:客户等待时间,    2:电梯运行时间');
legend('强化学习训练前','强化学习训练后');
0Z_020m

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/952277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Qlearning强化学习的Cart-Pole推车杆平衡控制系统matlab仿真

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印):通过不断与环境交互并更新Q值函数,智能体能够逐渐学习到在不同状态下的最优动作,从而实现杆的平衡控制。 仿真操作步骤可参考程序配套的操作视频。…

绿源电动车 NFC 学卡 All In One

绿源电动车 NFC 学卡 All In One NFC 钥匙 / NFC 母卡 / NFC 子卡 Apple 钱包,iPhone 上海公共交通卡 ✅绿源电动车 NFC 学卡 All In OneNFC 钥匙 / NFC 母卡 / NFC 子卡demosApple 钱包,iPhone 上海公共交通卡 ✅…

洛谷 P8867 建造军营

传送门。 边双直接缩掉,成为一棵树。下面的【结点】都是指缩之后的。 于是可以定义一个 \(a_u\) 为,\(u\) 点内有军营的方案数,\(b_u\) 为无。 总方案数就对应着,树上每种方案的权值和。 首先考虑一个 DP,设 \(f_…

代码大全2阅读感悟2

读国《代码大全 2》后,最深刻的感悟是 “细节成就卓越”。书中对变量命名、注释撰写、循环优化等细节的剖析,打破了我 “功能实现即可” 的片面认知。一个模糊的变量名、一段缺失的注释,都可能成为后期调试的 “拦路…

代码大全2阅读感悟3

《代码大全 2》让我跳出 “埋头写代码” 的局限,理解了编程的系统性。书中将需求分析、架构设计、编码实现、测试优化视为有机整体,强调每个环节的关联性。原来,脱离整体规划的编码,再精妙也可能偏离目标。这启示我…

【Python】某站音视频爬取(转载)

import pprint import requests import re import jsonsession = requests.session() url = 你需要爬取的音视频网址 headers = {user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, …

代码大全2阅读感悟

《代码大全 2》让我明白,编程规则从不是自由的枷锁。书中对代码规范、命名原则的细致讲解,揭示了 “有序” 背后的高效逻辑。遵循统一标准的代码,不仅能降低协作成本,更能减少后期维护的麻烦。这让我意识到,真正的…

RT-Thread之消息队列使用示例

消息队列(Message Queue)是一种异步通信机制,本教程介绍其API接口及使用示例。消息队列(Message Queue)是一种异步通信机制,其核心功能是:解耦生产者和消费者:发送方和接收方无需同时在线 缓冲与流量整形:应对…

STM32之GPIO输出

在 STM32 的开发中,GPIO(通用输入/输出)是一种极其重要且常用的外设资源。无论是用于控制 LED、按键、电机驱动,还是与其他外设之间通信,GPIO 都是实现这些功能的核心接口。在 STM32 的开发中,GPIO(通用输入/输…

神秘数据结构手法之区间 LIS

给定 \(1\sim n\) 的排列,\(q\) 次询问,每次查询区间 \([l,r]\) 内的最长上升子序列长度。 \(n \leq 10^5\)。这里只讨论排列的情况,如果不是排列,也容易通过重新编号变成在 LIS 上等价的一排列。 \(O(n\sqrt{n}\ …

软考九

软考九Posted on 2025-10-31 22:31 心默默言 阅读(0) 评论(0) 收藏 举报1. 系统设计2. 数据流图

[该退役了]

[该退役了]好了,最近本来说找队友的,结果教练给我找了上次的那个谁 反正是直接导致黑化的决定性因素,也有记录 但是这个人好像是教练的掌中宝啊,不组队还说我伤害了她,然后就宣告不管我了, 简单讲就是这一波是彻…

逆向基础--汇编语言介绍(003)

逆向基础--汇编语言介绍(003)一.前言汇编语言是直接工作在硬件上的一门编程语言,是除了机器语言外的最低层的编程语言了,学习汇编可以帮助我们更加深入的了解cpu,内存等硬件的工作原理。汇编语言和机器语言一般都是一…

文档抽取技术的实现原理及其在法律行业的应用价值分析

想象一位律师,面对堆积如山的案卷:数千页的交易合同、错综复杂的证据材料、浩如烟海的裁判文书。他必须从中精准找出关键条款、锁定矛盾陈述、串联案件事实。这曾是法律工作的常态,耗时耗力且充满疏漏风险。而今,文…

【算法导论】2分治法

【算法导论】2分治法二分查找 using System;class BinarySearch {// 分治法实现二分查找public static int Search(int[] arr, int target, int left, int right){// 基本情况:查找范围为空if (left > right)retur…

c++写得多不如写得少,同样的逻辑写的多报错逆天

#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<uno…

整理数学数据结构

#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 5;//树 struct tree{int to[N << 1], nxt[N << 1], hd[N], idx, w[N << 1];void add(int u, int v, int val) { to[++ idx]…

viewerjs+vue3 using typescript

安装包npm install v-viewer viewerjs npm i fontawesome-4.7 npm install @fortawesome/fontawesome-svg-core npm install @fortawesome/free-solid-svg-icons npm install @fortawesome/vue-fontawesome@prerelease…

题解:B4207 [常州市赛 2021] 战士

题解:B4207 [常州市赛 2021] 战士 前言 题目传送门 思路讲解 思路其实很好想,因为怪物的攻击是固定的,所以战士的死亡时间也是固定的,我们就需要通过计算战士每次死亡前能造成的最大伤害如果可以击败怪物,那就直接…

最小二乘问题详解7:正则化最小二乘

本文系统阐述了正则化最小二乘(岭估计)的动机、理论推导、求解方法与数值实例,揭示其通过L2惩罚项改善病态问题和过拟合的机制。1. 引言 在之前的文章《最小二乘问题详解4:非线性最小二乘》、《最小二乘问题详解5:…