目錄
1.算法仿真效果
2.算法涉及理論知識概要
2.1 Q-learning強化學習原理
2.2?基于Q-learning的電梯群控系統建模
3.MATLAB核心程序
4.完整算法代碼文件獲得
1.算法仿真效果
matlab2022a仿真結果如下(完整代碼運行后無水印):
仿真操作步驟可參考程序配套的操作視頻。
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值:
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
4.完整算法代碼文件獲得
V