質問編集履歴

1

全体のコードを打ちました

2022/06/05 08:51

投稿

545498_ho
545498_ho

スコア4

test CHANGED
File without changes
test CHANGED
@@ -15,9 +15,82 @@
15
15
  そうではなく、エピソード中に石は動かず、初期位置を学習してうまく乗る部分を探し出してほしいです。
16
16
 
17
17
  ```ここに言語名を入力
18
+ public class RockAgent : Agent
19
+ {
20
+ public GameObject rock;
21
+ public GameObject rockB;
22
+
23
+ Rigidbody m_Rb_rock;
24
+ Rigidbody m_Rb_rockB;
25
+
18
- public override void OnActionReceived(ActionBuffers actionBuffers)
26
+ public override void Initialize()
19
27
  {
28
+ m_Rb_rock = rock.GetComponent<Rigidbody>();
29
+ m_Rb_rockB = rockB.GetComponent<Rigidbody>();
20
- }
30
+ }
31
+
32
+ public override void OnEpisodeBegin()
33
+ {
34
+ rock.transform.localPosition = new Vector3(0f, 5f, 0f);
35
+ rock.transform.rotation = Quaternion.Euler(0f, 0f, 0f);
36
+ m_Rb_rock.velocity = Vector3.zero;
37
+ m_Rb_rock.angularVelocity = Vector3.zero;
38
+
39
+ rockB.transform.localPosition = new Vector3(0f, 0.1f, 0f);
40
+ rockB.transform.rotation = Quaternion.Euler(0f, 0f, 0f);
41
+ m_Rb_rockB.velocity = Vector3.zero;
42
+ m_Rb_rockB.angularVelocity = Vector3.zero;
43
+ }
44
+
45
+ public override void CollectObservations(VectorSensor sensor)
46
+ {
47
+ sensor.AddObservation(rock.transform.localPosition);
48
+ sensor.AddObservation(rock.transform.localEulerAngles);
49
+ }
50
+
51
+ public override void OnActionReceived(ActionBuffers actionBuffers)
52
+ {
53
+ float turnX = 0f;
54
+ if (actionBuffers.DiscreteActions[0] == 1f)
55
+ {
56
+ turnX = -1f;
57
+ }
58
+ else if (actionBuffers.DiscreteActions[0] == 2f)
59
+ {
60
+ turnX = 1f;
61
+ }
62
+ rock.transform.Rotate(200f * turnX * Time.deltaTime, 0, 0, Space.World);
63
+
64
+ float turnY = 0f;
65
+ if (actionBuffers.DiscreteActions[1] == 1f)
66
+ {
67
+ turnY = -1f;
68
+ }
69
+ else if (actionBuffers.DiscreteActions[1] == 2f)
70
+ {
71
+ turnY = 1f;
72
+ }
73
+ rock.transform.Rotate(0, 200f * turnY * Time.deltaTime, 0, Space.World);
74
+
75
+ float turnZ = 0f;
76
+ if (actionBuffers.DiscreteActions[2] == 1f)
77
+ {
78
+ turnZ = -1f;
79
+ }
80
+ else if (actionBuffers.DiscreteActions[2] == 2f)
81
+ {
82
+ turnZ = 1f;
83
+ }
84
+ rock.transform.Rotate(0, 0, 200f * turnZ * Time.deltaTime, Space.World);
85
+
86
+ if (MaxStep > 0) AddReward(1f / MaxStep);
87
+
88
+ if (rock.transform.position.y < 0f)
89
+ {
90
+ SetReward(-1.0f);
91
+ EndEpisode();
92
+ }
93
+ }
21
94
  ```
22
95
 
23
96