2017-12-09 8 views
1

SimulinkでMATLAB関数ブロック(以下のビジュアルでQ_learningという名前の)を使用しています。このコードでは、スクリプト(initialpara.mファイル)で最初に宣言された既存の行列( 'Q'で表される)を7 x 10^7行列の0として更新する必要があります。SimulinkのMATLAB関数が変数 'Q'にアクセスできないエラー:「未定義の関数または変数 'Q'」

しかし、行列の初期宣言にはアクセスできないようです。エラーメッセージは次のとおりです:

Undefined function or variable 'Q'. The first assignment to a local variable determines its class.

Function 'Control Centre/MATLAB Function' (#174.774.775), line 32, column 21: "Q" Launch diagnostic report.

initialpara.mファイル

%%% Q Learning Parameters %%% 

Q = zeros(7,100*100*1000); 

gamma = 0.8; 

previous_state = 0; 
previous_reward = 0; 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

Q_learning.m

function [KP, KI, KD, state, reward] = Qlearning(e_now, previous_state, previous_reward) 
%#codegen 
    if (e_now >= -1 && e_now <= 1) 
     state = 1; 
     reward = 7; 

    elseif (e_now >= -5 && e_now <= 5) 
     state = 2; 
     reward = 6; 

    elseif (e_now >= -10 && e_now <= 10) 
     state = 3; 
     reward = 5; 

    elseif (e_now >= -15 && e_now <= 15) 
     state = 4; 
     reward = 4; 

    elseif (e_now >= -20 && e_now <= 20) 
     state = 5; 
     reward = 3; 

    elseif (e_now >= -25 && e_now <= 25) 
     state = 6; 
     reward = 2; 

    elseif (e_now >= -30 && e_now <= 30) 
     state = 7; 
     reward = 1; 
    end# 

    subMatrix = Q(state, :); 
    [maxQ_value, max_column] = max(subMatrix); 

    Q(state, previous_state) = previous_reward + 0.9 * maxQ_value; 

    [KP, KI, KD] = action_decode(max_column); 
end 

ファイル私は変数 'Q' を宣言しようとしていますモデルワークスペースでは(既にベースワークスペースで宣言されていましたが)問題を解決できませんでした。

誰でもこの問題を解決できますか?ありがとう!

enter image description here

答えて

0

宣言Qグローバル。 MATLABのhelp globalを参照してください。

関連する問題