Matlab 強化學習

一、Matlab 上的強化學習

Matlab 是廣泛使用的科學計算和工程分析軟體。在強化學習方面,Matlab 提供了強大的工具和庫,使得在該領域開發演算法和模型變得更加簡單。在Matlab上,可以使用強化學習工具箱、深度學習工具箱、狀態空間工具箱和優化工具箱等工具來完成強化學習的各種任務。

其中,強化學習工具箱提供了訓練智能體、執行策略評估和遺傳演算法等能力。狀態空間工具箱可以用來在非純強化學習中用於建模。而深度學習工具箱可以用來加速訓練和改善模型的性能。

以下是使用強化學習工具箱創建訓練智能體的示例代碼。


% 創建環境
env = rlPredefinedEnv("CartPole-Discrete");

% 創建指定環境的深度網路
hiddenLayerSize = 64;
statePath = [
    imageInputLayer([4 1 1],'Normalization','none','Name','state')
    fullyConnectedLayer(hiddenLayerSize,'Name','CriticStateFC1')
    reluLayer('Name','CriticRelu1')
    fullyConnectedLayer(hiddenLayerSize,'Name','CriticStateFC2')
    ];
actionPath = [
    imageInputLayer([1 1 1],'Normalization','none','Name','action')
    fullyConnectedLayer(hiddenLayerSize,'Name','CriticActionFC1')
    ];
commonPath = [
    additionLayer(2,'Name','add')
    reluLayer('Name','CriticCommonRelu')
    fullyConnectedLayer(1,'Name','output')];

criticNetwork = layerGraph(statePath);
criticNetwork = addLayers(criticNetwork,actionPath);
criticNetwork = addLayers(criticNetwork,commonPath);
criticNetwork = connectLayers(criticNetwork,'CriticStateFC2','add/in1');
criticNetwork = connectLayers(criticNetwork,'CriticActionFC1','add/in2');

二、強化學習的分類

強化學習可以分為多個子領域,每個領域有其自己的問題和解決方案。以下是強化學習的幾個常見子領域。

1. 值迭代

值迭代法是一種基於動態規劃的強化學習方法,主要用於解決馬爾可夫決策過程問題。該方法將狀態與值函數聯繫起來,並使用貝爾曼方程計算狀態的值。

2. 策略迭代

策略迭代法是強化學習中的另一種基於動態規劃的演算法,通過將策略映射到價值函數上,然後再根據新的價值函數重新更新策略來完成。

3. Q 學習

Q 學習演算法是一種常見的基於模型的強化學習演算法。該演算法使用動態規劃來計算每個狀態下可採取行動的 Q 值,並通過更新策略來最大化每個狀態的累積回報。

三、演算法示例

1. 智能體訓練

以下是一個在 Matlab 中訓練智能體的示例代碼。


% 創建環境
env = rlPredefinedEnv("CartPole-Continuous");

% 創建智能體
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);
actorNetwork = [
    imageInputLayer([obsInfo.Dimension(1) 1 1],'Name','observation','Normalization','none')
    fullyConnectedLayer(64,'Name','fc1')
    reluLayer('Name','relu1')
    fullyConnectedLayer(64,'Name','fc2')
    reluLayer('Name','relu2')
    fullyConnectedLayer(actInfo.Dimension(1),'Name','output','Activation','tanh')];
criticNetwork = [
    imageInputLayer([obsInfo.Dimension(1) 1 1],'Name','observation','Normalization','none')
    fullyConnectedLayer(64,'Name','CriticStateFC1')
    reluLayer('Name','CriticRelu1')
    fullyConnectedLayer(64,'Name','CriticStateFC2')
    fullyConnectedLayer(1,'Name','output')];
agent = rlDDPGAgent(actorNetwork,criticNetwork);

% 創建訓練選項並進行訓練
trainOpts = rlTrainingOptions(...
    'MaxEpisodes',15000, ...
    'MaxStepsPerEpisode',500, ...
    'Verbose',false, ...
    'Plots','training-progress',...
    'StopTrainingCriteria','AverageReward',...
    'StopTrainingValue',4800);
trainingStats = train(agent,env,trainOpts);

2. 值迭代演算法

以下是一個使用值迭代演算法解決馬爾可夫決策過程問題的示例代碼。


% 定義模擬模型
s = [-0.5, -0.25, 0.0, 0.25, 0.5];
a = [-2.0, -1.0, 0.0, 1.0, 2.0];
p = zeros(5, 5, 5);
p(:,:,1) = [1.0, 0.0, 0.0, 0.0, 0.0;
            0.9, 0.1, 0.0, 0.0, 0.0;
            0.0, 0.9, 0.1, 0.0, 0.0;
            0.0, 0.0, 0.9, 0.1, 0.0;
            0.0, 0.0, 0.0, 0.0, 1.0];
p(:,:,2) = [0.9, 0.1, 0.0, 0.0, 0.0;
            0.8, 0.2, 0.0, 0.0, 0.0;
            0.0, 0.8, 0.2, 0.0, 0.0;
            0.0, 0.0, 0.8, 0.2, 0.0;
            0.0, 0.0, 0.0, 0.0, 1.0];
p(:,:,3) = [0.0, 0.9, 0.1, 0.0, 0.0;
            0.0, 0.0, 0.9, 0.1, 0.0;
            0.0, 0.0, 0.0, 0.9, 0.1;
            0.0, 0.0, 0.0, 0.0, 1.0;
            0.0, 0.0, 0.0, 0.0, 1.0];
p(:,:,4) = [0.0, 0.0, 0.0, 0.9, 0.1;
            0.0, 0.0, 0.0, 0.0, 1.0;
            0.0, 0.0, 0.0, 0.0, 1.0;
            0.0, 0.0, 0.0, 0.0, 1.0;
            0.0, 0.0, 0.0, 0.0, 1.0];
p(:,:,5) = [0.0, 0.0, 0.0, 0.0, 1.0;
            0.0, 0.0, 0.0, 0.0, 1.0;
            0.0, 0.0, 0.0, 0.0, 1.0;
            0.0, 0.0, 0.0, 0.0, 1.0;
            0.0, 0.0, 0.0, 0.0, 1.0];

% 定義獎勵函數
r = [-1.0, -2.0, -2.0, -2.0, 10.0];

% 定義折扣率和閾值
gamma = 0.9;
theta = 0.1;

% 初始化值函數
v = zeros(5,1);

% 迭代計算值函數
while true
    delta = 0;
    for i = 1:5
        oldv = v(i);
        [tmp, a_index] = max(squeeze(p(i, :, :))*v);
        v(i) = max(min(r+gamma*tmp),1000);
        delta = max(delta, abs(oldv - v(i)));
    end
    if delta <= theta
        break;
    end
end

% 輸出最終的值函數
disp(v);

3. Q 學習演算法

以下是一個使用 Q 學習演算法解決強化學習問題的示例代碼。


% 創建智能體和環境
env = rlPredefinedEnv('BasicGridWorld');
actionInfo = getActionInfo(env);
agent = rlQAgent(getObservationInfo(env),actionInfo);
trainOpts = rlTrainingOptions('MaxEpisodes',500,'MaxStepsPerEpisode',1000,'Verbose',false,'Plots','training-progress');
trainingStats = train(agent,env,trainOpts);

% 在環境中測試Q學習的效果
envTest = rlPredefinedEnv('BasicGridWorld');
simOptions = rlSimulationOptions('MaxSteps',100);
experience = sim(envTest,agent,simOptions);
totalReward = sum(experience.Reward);

原創文章,作者:JGHUR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370190.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JGHUR的頭像JGHUR
上一篇 2025-04-18 13:40
下一篇 2025-04-18 13:40

相關推薦

  • 用Matlab繪製正多邊形

    在這篇文章中,我們將探討如何使用Matlab繪製正多邊形。我們將從以下幾個方面進行闡述: 一、繪製正三角形 正三角形是最簡單的正多邊形之一。要繪製一個正三角形,我們可以使用Matl…

    編程 2025-04-29
  • Matlab中addpath的使用方法

    addpath函數是Matlab中的一個非常常用的函數,它可以在Matlab環境中增加一個或者多個文件夾的路徑,使得Matlab可以在需要時自動搜索到這些文件夾中的函數。因此,學會…

    編程 2025-04-29
  • Matlab二值圖像全面解析

    本文將全面介紹Matlab二值圖像的相關知識,包括二值圖像的基本原理、如何對二值圖像進行處理、如何從二值圖像中提取信息等等。通過本文的學習,你將能夠掌握Matlab二值圖像的基本操…

    編程 2025-04-28
  • Matlab quit函數

    Matlab是數學軟體領域比較流行的軟體之一,quit函數是Matlab中一個十分重要的函數,可以在Matlab中用來退出當前的進程或者整個Matlab的進程。下面我們將從多個方面…

    編程 2025-04-27
  • Matlab局部放大——圖像處理的神器

    一、什麼是Matlab局部放大? Matlab是一個高級技術計算語言和互動式環境,常被用來進行科學計算和工程設計等領域的計算和可視化操作。局部放大指對一張圖像或視頻中感興趣的區域進…

    編程 2025-04-25
  • Matlab Break詳解

    一、break概述 在MATLAB程序中,break是一個控制流語句,用於跳出當前的循環語句。如果在for或while循環中,遇到break語句後,就會直接中斷當前循環,跳出循環體…

    編程 2025-04-25
  • Matlab &&:全能編程開發工程師的得力工具

    一、Matlab &&簡介 Matlab是一個數學計算軟體,其名字來源於「矩陣實驗室」(Matrix Laboratory), 它主要用於演算法開發、數據可視化以及數…

    編程 2025-04-25
  • matlab中subs的用法

    一、簡介 在matlab中,subs函數可以實現對數學表達式的替換,它可以方便地將符號表達式中的變數替換成給定值或表達式,以求得新的表達式或數值結果,具有很高的實用價值。 二、替換…

    編程 2025-04-25
  • Matlab semilogy函數使用詳解

    一、Matlab semilogy函數 Matlab中的semilogy函數用於繪製y軸為對數坐標軸的曲線,對於數據表現出很強的展示效果。相比於plot函數,semilogy函數更…

    編程 2025-04-25
  • 詳解Matlab的mapminmax函數

    一、是什麼以及它的作用 Matlab的mapminmax函數是一種數據歸一化和標準化的工具。歸一化是一種將數據縮放到 [0,1] 範圍內的方法。標準化是一種將數據縮放到零均值和單位…

    編程 2025-04-25

發表回復

登錄後才能評論