6 namespace droid.Runtime.Prototyping.Evaluation {
10 [AddComponentMenu(EvaluationComponentMenuPath._ComponentMenuPath
12 + EvaluationComponentMenuPath._Postfix)]
19 var signal = this._default_reward;
31 Mathf.Abs(Vector3.Distance(
this._goal.transform.position,
32 this._actor_transform.transform.position));
33 var angle = Quaternion.Angle(this._goal.transform.rotation,
this._actor_transform.transform.rotation);
36 Debug.Log($
"Distance: {distance}");
37 Debug.Log($
"Angle: {angle}");
43 signal -= Mathf.Pow(this._distance_base, distance);
44 signal -= Mathf.Pow(this._angle_base, angle);
46 signal += this._distance_nominator / (Mathf.Pow(this._distance_base, distance) +
float.Epsilon);
47 signal += this._angle_nominator / (Mathf.Pow(this._angle_base, angle) +
float.Epsilon);
49 if (this._state_full) {
50 if (signal <= this._peak_reward) {
53 this._peak_reward = signal;
59 if (distance < this._goal_reached_radius) {
62 Debug.Log(
"Within range of goal");
66 signal += this._solved_reward;
67 if (this._terminate_on_goal_reached) {
68 this.ParentEnvironment?.Terminate(
"Within range of goal");
72 if (this._has_collided) {
73 this.ParentEnvironment?.Terminate(
"Actor has collided");
78 Debug.Log($
"Frame Number: {this.ParentEnvironment?.CurrentFrameNumber}, " 79 + $
"Terminated: {this.ParentEnvironment?.Terminated}, " 80 + $
"Last Reason: {this.ParentEnvironment?.LastTerminationReason}, " 81 + $
"Internal Feedback Signal: {signal}, " 82 + $
"Distance: {distance}");
93 this._peak_reward = 0.0f;
94 this._has_collided =
false;
102 this._goal = FindObjectOfType<Transform>();
105 if (!this._actor_transform) {
106 this._actor_transform = FindObjectOfType<Transform>();
110 if (!remote_sensor) {
111 var col = this._actor_transform.GetComponentInChildren<Collider>();
118 remote_sensor.
Caller =
this;
119 remote_sensor.OnTriggerEnterDelegate = this.OnChildTriggerEnter;
120 remote_sensor.OnCollisionEnterDelegate = this.OnChildTriggerEnter;
124 if (this._obstructions == null || this._obstructions.Length <= 0) {
125 this._obstructions = FindObjectsOfType<Obstruction>();
128 if (!this._playable_area) {
129 this._playable_area = FindObjectOfType<BoundingBox>();
133 void OnChildTriggerEnter(GameObject child_sensor_game_object, Collision collision) {
134 this._has_collided =
true;
137 void OnChildTriggerEnter(GameObject child_sensor_game_object, Collider collider1) {
138 this._has_collided =
true;
143 [Header(
"Specific", order = 102)]
147 [SerializeField] [Range(0.1f, 10f)]
float _distance_base = 2f;
148 [SerializeField] [Range(0.1f, 10f)]
float _distance_nominator = 5f;
149 [SerializeField] [Range(0.1f, 10f)]
float _angle_base = 6f;
150 [SerializeField] [Range(0.1f, 10f)]
float _angle_nominator = 3f;
152 [SerializeField]
bool _sparse =
true;
153 [SerializeField]
bool _inverse =
false;
154 [SerializeField] Transform _goal = null;
156 [SerializeField] Transform _actor_transform = null;
158 [SerializeField]
BoundingBox _playable_area = null;
160 [SerializeField]
Obstruction[] _obstructions = null;
162 [SerializeField]
bool _state_full =
false;
163 [SerializeField]
float _goal_reached_radius = 0.01f;
165 [SerializeField]
bool _terminate_on_obstruction_collision =
true;
166 [SerializeField]
bool _has_collided =
false;
167 [SerializeField]
bool _terminate_on_goal_reached =
true;
override void InternalReset()
override float InternalEvaluate()
override void PostSetup()