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
파일 (기본 작업 공간에 이미 선언되었지만) 모델 작업 공간에서는 문제가 해결되지 않았습니다.
누구든지 나를 도와 드릴까요? 감사!