基于Qlearning強(qiáng)化學(xué)習(xí)的電梯群控系統(tǒng)高效調(diào)度策略matlab仿真
1.算法仿真效果
matlab2022a仿真結(jié)果如下(完整代碼運(yùn)行后無水印):





2.算法涉及理論知識概要
隨著高層建筑的不斷增多,電梯成為人們?nèi)粘I钪胁豢苫蛉钡拇怪苯煌üぞ摺k娞萑嚎叵到y(tǒng)(Elevator Group Control System,EGCS)旨在對多臺電梯進(jìn)行統(tǒng)一調(diào)度,以提高電梯的運(yùn)行效率,減少乘客的等待時(shí)間和乘梯時(shí)間,提升服務(wù)質(zhì)量。傳統(tǒng)的電梯群控算法往往基于固定的規(guī)則和經(jīng)驗(yàn),難以適應(yīng)復(fù)雜多變的交通流量模式。而強(qiáng)化學(xué)習(xí)作為一種能夠通過智能體與環(huán)境交互來學(xué)習(xí)最優(yōu)策略的方法,為電梯群控系統(tǒng)的優(yōu)化提供了新的思路。Q - learning 是一種經(jīng)典的無模型強(qiáng)化學(xué)習(xí)算法,它通過不斷更新 Q 表來學(xué)習(xí)最優(yōu)動作價(jià)值函數(shù),從而實(shí)現(xiàn)對環(huán)境的最優(yōu)控制。
電梯群控系統(tǒng)的主要調(diào)度目標(biāo)包括:
1.減少乘客等待時(shí)間:使乘客從發(fā)出請求到進(jìn)入電梯的時(shí)間盡可能短。
2.減少乘客乘梯時(shí)間:使乘客在電梯內(nèi)的旅行時(shí)間盡可能短。
2.1 Q-learning強(qiáng)化學(xué)習(xí)原理
強(qiáng)化學(xué)習(xí)是一種通過智能體(Agent)與環(huán)境(Environment)進(jìn)行交互來學(xué)習(xí)最優(yōu)策略的機(jī)器學(xué)習(xí)方法。智能體在環(huán)境中執(zhí)行動作(Action),環(huán)境根據(jù)智能體的動作給出獎勵(Reward)和下一個(gè)狀態(tài)(State)。智能體的目標(biāo)是通過不斷地與環(huán)境交互,學(xué)習(xí)到一種最優(yōu)策略,使得累積獎勵最大化。
Q-learning 是一種無模型的強(qiáng)化學(xué)習(xí)算法,它通過學(xué)習(xí)動作價(jià)值函數(shù)Q(s, a) 來確定最優(yōu)策略。動作價(jià)值函數(shù)Q(s, a)表示在狀態(tài)s下執(zhí)行動作a后,能夠獲得的累積獎勵的期望值。
Q-learning 算法的核心思想是使用一個(gè)Q表來存儲每個(gè)狀態(tài) - 動作對的Q值。在每個(gè)時(shí)間步,智能體根據(jù)當(dāng)前狀態(tài)s選擇一個(gè)動作a,執(zhí)行該動作后,環(huán)境返回下一個(gè)狀態(tài)s'和獎勵r。然后,智能體使用以下公式更新Q表中的Q值:
2.2 基于Q-learning的電梯群控系統(tǒng)建模
狀態(tài)定義
在電梯群控系統(tǒng)中,狀態(tài) s 可以由多個(gè)因素組成,例如:
1.電梯位置:每臺電梯當(dāng)前所在的樓層。
2.電梯運(yùn)行方向:每臺電梯的運(yùn)行方向(上行、下行或靜止)。
3.請求隊(duì)列:當(dāng)前所有未處理的乘客請求,包括請求的起始樓層和目標(biāo)樓層。
動作定義
動作a表示為哪個(gè)電梯去響應(yīng)當(dāng)前的一個(gè)請求。假設(shè)系統(tǒng)中有n臺電梯,則動作空間A={1,2,?,n},其中動作i表示選擇第i臺電梯去響應(yīng)請求。
獎勵定義
獎勵r是環(huán)境對智能體執(zhí)行動作的反饋,用于引導(dǎo)智能體學(xué)習(xí)最優(yōu)策略。在電梯群控系統(tǒng)中,獎勵可以根據(jù)以下因素進(jìn)行設(shè)計(jì):
1.乘客等待時(shí)間:乘客等待時(shí)間越短,獎勵越高。
2.乘客乘梯時(shí)間:乘客乘梯時(shí)間越短,獎勵越高。
3.電梯運(yùn)行效率:電梯的空駛時(shí)間和不必要的停靠次數(shù)越少,獎勵越高。
3.MATLAB核心程序
............................................................. %% load R2.mat % 測試調(diào)度策略并生成動畫 elevator_positions = ones(1, num_elevators); request_queue = []; num_requests = randi([Num_people/2, Num_people]); for i = 1:num_requests start_floor = randi([1, num_floors]); end_floor = randi([1, num_floors]); while end_floor == start_floor end_floor = randi([1, num_floors]); end request_queue = [request_queue; start_floor, end_floor]; end total_waiting_time = 0; total_travel_time = 0; num_requests = size(request_queue, 1); while ~isempty(request_queue) % 獲取當(dāng)前狀態(tài) state = get_state(elevator_positions, request_queue); % 選擇動作 [~, action] = max(Q(state, :)); % 執(zhí)行動作 [new_elevator_positions, new_request_queue, reward, waiting_time, travel_time] = take_action(elevator_positions, request_queue, action); % 更新電梯位置和請求隊(duì)列 elevator_positions = new_elevator_positions; request_queue = new_request_queue; % 累計(jì)指標(biāo) total_waiting_time = total_waiting_time + waiting_time; total_travel_time = total_travel_time + travel_time; end % 輸出最終指標(biāo) 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:客戶等待時(shí)間, 2:電梯運(yùn)行時(shí)間'); legend('強(qiáng)化學(xué)習(xí)訓(xùn)練前','強(qiáng)化學(xué)習(xí)訓(xùn)練后'); 0Z_020m

浙公網(wǎng)安備 33010602011771號