回答編集履歴

1

コード追加

2021/10/20 01:09

投稿

jbpb0
jbpb0

スコア7653

test CHANGED
@@ -31,3 +31,157 @@
31
31
   
32
32
 
33
33
  以上を行えば、「関数myStepfunction」を実行する度に、「RR」の末尾に関数内で計算された「R」の数値が追加されるはずです
34
+
35
+
36
+
37
+ .
38
+
39
+ 【追記】
40
+
41
+ 上記の変更により、「関数myStepfunction」は下記のようになります
42
+
43
+ ```matlab
44
+
45
+ function [NextObservation, Reward, IsDone, LoggedSignals] = myStepfunction(Action,LoggedSignals,SimplePendulum)
46
+
47
+
48
+
49
+ % 操作する前の状態を取得
50
+
51
+
52
+
53
+ statePre = [-pi/2;0];
54
+
55
+ statePre(1) = SimplePendulum.Theta;
56
+
57
+ statePre(2) = SimplePendulum.AngularVelocity;
58
+
59
+
60
+
61
+ IsDone = false;
62
+
63
+
64
+
65
+ % 状態を更新
66
+
67
+
68
+
69
+ SimplePendulum.pstep(Action);
70
+
71
+
72
+
73
+ % 操作後の状態を取得
74
+
75
+ state = [-pi/2;0]; % 状態を初期化
76
+
77
+ state(1) = SimplePendulum.Theta; % 角度
78
+
79
+ state(2) = SimplePendulum.AngularVelocity; % 角速度
80
+
81
+
82
+
83
+ X_state_Position = sin(state(1));
84
+
85
+ Y_state_Position = -cos(state(1));
86
+
87
+
88
+
89
+
90
+
91
+ % ボールの距離の計算と誤差
92
+
93
+ %R = ones(1,1);
94
+
95
+ %RR = [];
96
+
97
+ global RR
98
+
99
+ Ball_Target = 10;
100
+
101
+ Ball_Distance = X_state_Position + (-state(2))* sqrt(2*abs(Y_state_Position)/9.8);
102
+
103
+ R = -abs(Ball_Distance -Ball_Target);** ←ここでRを計算,常にRは値が更新されます.**
104
+
105
+ RR = [RR;R]; **←計算されたRをRRに格納したいです.**
106
+
107
+ % 報酬の計算
108
+
109
+
110
+
111
+
112
+
113
+ if (state(2) > 0) || (SimplePendulum.Y_Position < 0)
114
+
115
+ IsDone = true;
116
+
117
+ [InitialObservation, LoggedSignal] = myResetFunction(SimplePendulum);
118
+
119
+ LoggedSignal.State = [-pi/2 ; 0];
120
+
121
+ InitialObservation = LoggedSignal.State;
122
+
123
+ state = InitialObservation;
124
+
125
+ SimplePendulum.Theta =-pi/2;
126
+
127
+ SimplePendulum.AngularVelocity = 0;
128
+
129
+
130
+
131
+
132
+
133
+ end
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+ LoggedSignals.State = state; % 状態を保存
144
+
145
+
146
+
147
+
148
+
149
+ % 次の状態 状態を更新
150
+
151
+ NextObservation = LoggedSignals.State;
152
+
153
+
154
+
155
+
156
+
157
+ Reward = +max(R);
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+ end
166
+
167
+ ```
168
+
169
+ 変更した関数を用いて、下記のように実行して、結果を確認してみてください
170
+
171
+ (「...」には、適切なパラメータを記入してください)
172
+
173
+ ```matlab
174
+
175
+ global RR
176
+
177
+ RR = [];
178
+
179
+ myStepfunction(...)
180
+
181
+ myStepfunction(...)
182
+
183
+ myStepfunction(...)
184
+
185
+ disp(RR)
186
+
187
+ ```