#list #matlab #matrix
Вопрос:
Я хочу добавить ценности матрице. Но, я не мог этого сделать. Я сделал пошаговую функцию для обучения подкреплению и рассчитал значение, которое названо R. Я хочу собрать R значений и добавить их в матрицу с именем RR. Однако все вычисленные значения не добавляются. Это потому, что это делается внутри функции? Если он не находится в функции, он работает. Пожалуйста, кто-нибудь, скажите мне, как это исправить.
% Define the step function
function [NextObservation, Reward, IsDone, LoggedSignals] =
myStepfunction(Action,LoggedSignals,SimplePendulum)
% get the pre statement
statePre = [-pi/2;0];
statePre(1) = SimplePendulum.Theta;
statePre(2) = SimplePendulum.AngularVelocity;
IsDone = false;
% updating states
SimplePendulum.pstep(Action);
% get the statement after updating
state = [-pi/2;0];
state(1) = SimplePendulum.Theta;
state(2) = SimplePendulum.AngularVelocity;
RR = [];
Ball_Target = 10;
Ball_Distance = Ballfunction(SimplePendulum);
R = -abs(Ball_Distance -Ball_Target); ← this the calculated value
RR = [RR,R]; ← I want to add R to RR
if (state(2) > 0) || (SimplePendulum.Y_Position < 0)
IsDone = true;
[InitialObservation, LoggedSignal] = myResetFunction(SimplePendulum);
LoggedSignal.State = [-pi/2 ; 0];
InitialObservation = LoggedSignal.State;
state = InitialObservation;
SimplePendulum.Theta =-pi/2;
SimplePendulum.AngularVelocity = 0;
end
LoggedSignals.State = state;
NextObservation = LoggedSignals.State;
Reward = max(R);
end
Комментарии:
1. Для
RR
обновления за пределами функции вам нужно перейтиRR
в функцию и снова выйти.2. Вы правильно добавляете
R
RR
, но когда вы это делаетеRR = []
, вы устанавливаетеRR
пустую матрицу.
Ответ №1:
Если я правильно вас понял, вы пытаетесь обновить RR
эту функцию, а затем используете/видите ее вне цикла. Это означает, что вам нужно внести две правки:
а) Вам нужно входить RR
и выходить из функции, чтобы обновить ее. Вам нужно будет изменить первую строку кода, как показано здесь, но вам также нужно будет изменить способ вызова функции:
function [NextObservation, Reward, IsDone, LoggedSignals, RR] =
myStepfunction(Action,LoggedSignals,SimplePendulum, RR)
б) Когда вы делаете это RR = []
, вы удаляете содержимое RR
. Для инициализации RR
вам нужно будет переместить эту строку в скрипт, вызывающий эту функцию, убедившись, что она вызвана до того, как эта функция будет вызвана.
Комментарии:
1. В этом случае я должен установить начальное значение RR в коде обучения. Является ли это начальное значение пустым списком? ??
2. Да, это верно. Я отредактирую свой ответ.