2017-12-09 49 views
1

Simulink에서 MATLAB 함수 블록 (아래 시각적으로 Q_learning이라고 함)이 있습니다. 이 코드는 처음에 스크립트 (initialpara.m 파일)에서 7 x 10^7 매트릭스의 0으로 선언 된 기존 매트릭스 ('Q'로 표시)를 업데이트해야합니다.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 내가 변수 'Q'를 선언하는 것을 시도했다

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 

파일 (기본 작업 공간에 이미 선언되었지만) 모델 작업 공간에서는 문제가 해결되지 않았습니다.

누구든지 나를 도와 드릴까요? 감사!

enter image description here

답변

0

선언 Q 글로벌. MATLAB의 help global을 참조하십시오.