基于(yu)Qlearning強化學(xue)習的1DoF機(ji)械臂運(yun)動控制系(xi)統matlab仿真
1.算法仿真效果
matlab2022a仿真(zhen)結果如下(xia)(完整代碼運行后無水印):



仿真操作步驟可(ke)參考程序配套的操作視頻(pin)。
2.算法涉及理(li)論知識概要
隨著工業(ye)自動化(hua)和(he)機器人技術的快速發展,機械臂在生(sheng)產制造(zao)、物流(liu)倉儲、醫療服務等領域得到(dao)了廣泛應用。單自由(you)度(1DoF)機械臂(bei)(bei)作為最(zui)簡單的機械臂(bei)(bei)模(mo)型(xing),是(shi)研(yan)究復(fu)雜(za)機械臂(bei)(bei)控(kong)(kong)制的基礎。傳統的機械臂(bei)(bei)控(kong)(kong)制方法通常依賴(lai)于精確的動力(li)學模(mo)型(xing)和先(xian)驗(yan)知識(shi),在面對(dui)復(fu)雜(za)環境和不確定性時,其控(kong)(kong)制效果(guo)往往受(shou)到限制。
強(qiang)化學習(xi)作為一種(zhong)無模型的(de)學習(xi)方法(fa),通過智能(neng)體(ti)與環境進(jin)行(xing)交互(hu),不(bu)(bu)斷嘗試不(bu)(bu)同的(de)動作并(bing)根據(ju)環境反饋的(de)獎勵(li)來(lai)學習(xi)最(zui)優策略,能(neng)夠在不(bu)(bu)確定環境中實現高效的(de)決策和控制。Q-learning 是一種經典的(de)強化學習算法(fa),它通過學習一個動作價(jia)值函數(shu)(Q 函數(shu))來(lai)確(que)定最優策(ce)略,具有(you)(you)實現簡單、收斂性好等優點(dian)。因此,將 Q-learning 算法(fa)應(ying)用于1DoF機械(xie)臂運動控制中,能(neng)夠有(you)(you)效提高機械(xie)臂在復雜(za)環境下的(de)適應(ying)性和控制性能(neng)。
2.1 1DoF機(ji)械臂動(dong)力(li)學模型

2.2 Q-learning強化學習算法(fa)原理
強化學習是一(yi)種(zhong)機(ji)器學習范式,主要涉及智能(neng)體(Agent)、環境(jing)(Environment)、狀(zhuang)態(State)、動(dong)(dong)作(Action)和(he)獎(jiang)(jiang)勵(Reward)等概念(nian)。智能體在環境(jing)中(zhong)進行交互(hu),根據(ju)當前狀(zhuang)態選(xuan)擇一(yi)個(ge)動(dong)(dong)作并(bing)執(zhi)行,環境(jing)會(hui)根據(ju)智能體的(de)動(dong)(dong)作反饋一(yi)個(ge)新的(de)狀(zhuang)態和(he)一(yi)個(ge)獎(jiang)(jiang)勵信號。智能體的(de)目標是(shi)通過(guo)不斷地與環境(jing)交互(hu),學習到一(yi)個(ge)最優策略,使得長(chang)期累(lei)積獎(jiang)(jiang)勵最大化(hua)。

在訓練(lian)(lian)過(guo)程中(zhong),記(ji)錄每個回合(he)的(de)累積獎(jiang)勵(li),得(de)到學(xue)習(xi)曲線。隨著訓練(lian)(lian)回合(he)數的(de)增(zeng)加(jia),累積獎(jiang)勵(li)逐漸增(zeng)加(jia),說明智(zhi)能體在不斷學(xue)習(xi)并改進控制策(ce)略。當訓練(lian)(lian)回合(he)數足(zu)夠多時,累積獎(jiang)勵(li)趨于穩定,表明智(zhi)能體已經學(xue)習(xi)到了較優的(de)控制策(ce)略。
在訓練(lian)結束后,使用學習(xi)到(dao)的最優策略對(dui)機(ji)械(xie)臂進行控制,記錄機(ji)械(xie)臂的關(guan)節角度軌跡。實驗結果表(biao)明,機(ji)械(xie)臂能(neng)(neng)夠(gou)快(kuai)速(su)、準確地跟蹤目標關(guan)節角度,并且在到(dao)達目標位置后能(neng)(neng)夠(gou)保持穩定。
3.MATLAB核心程序
% 定義學習率,用于在更新Q矩陣時權衡新舊值的權重
Lr = 0.99;
% 初始的探索概率
Epsr = 1;
% 每次迭代的探索概率衰減因子
Rdec = 0.9999;
% 初始化當前的探索概率
Pes = Epsr;
%在評估狀態和動作的價值時,考慮未來狀態價值的重要性
dcnt = 0.3;
% 定義成功執行預期動作的概率
Su_rate = 1;
% 當系統到達期望狀態(擺錘直立)時給予的巨大獎勵
Rewardr = 1000000;
.........................................................................
% 初始化一個長度為 Miter 的零向量,用于存儲每個回合的平均獎勵
Rwdm = zeros(1,Miter);
Action_set0= zeros(1,Mact);
Action_set = zeros(1,Miter);
% 計算當前回合的平均獎勵
Rwd_avg = Rwd_sum/Rwd_cnt;
% 將當前回合的平均獎勵存儲到 Rwdm 向量中
Rwdm(ij) = Rwd_avg;
Action_set(ij) = mean(Action_set0);
end
% 創建一個新的圖形窗口
figure
plot(1:Miter, Rwdm,'-r>',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.9,0.0]);
hold on
xlabel('Epoch');
ylabel('獎勵值');
figure
plot(1:Miter, Action_set,'-r>',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.9,0.0]);
hold on
xlabel('Epoch');
ylabel('動作值');
