- Create an class for your agent extending
Agent
, and implement the follow methods:
protected override void ExecuteAction(int action)
{
switch (action)
{
case 0: _dir = Vector2.left; break;
case 1: _dir = Vector2.up; break;
case 2: _dir = Vector2.right; break;
case 3: _dir = Vector2.down; break;
case 4: _dir = Vector2.left + Vector2.up; break;
case 5: _dir = Vector2.right + Vector2.up; break;
case 6: _dir = Vector2.left + Vector2.down; break;
case 7: _dir = Vector2.right + Vector2.down; break;
}
}
protected override float GetReward()
{
var reward = 1f - _endDistance / 3f;
if (_endDistance <= 1.5f) return reward * 2f;
if (_endDistance > _initialDistance) return -1f;
return reward;
}
protected override float[] GetState()
{
var direction = (transform.position - target.position).normalized;
return new float[] { direction.x, direction.y };
}
- Create a Brain ScriptableObject and attach in you agent
![image](https://private-user-images.githubusercontent.com/6765023/325215487-cfcaa2fd-3864-43ab-8f6b-1b033aede674.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0ODE2NjYsIm5iZiI6MTczOTQ4MTM2NiwicGF0aCI6Ii82NzY1MDIzLzMyNTIxNTQ4Ny1jZmNhYTJmZC0zODY0LTQzYWItOGY2Yi0xYjAzM2FlZGU2NzQucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTNUMjExNjA2WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9M2Q5ZWUxMjZmYTc0MmE2OTg2NWMxODFkNGUxNzRhZGIwMWIxOTBhYmU2OGNlNjk2YzVmZWMyOTMyMzhmNTA0YiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.8rU4svxrFppf_zzCh28DcP0axN6rnoYkaYjLK3Q5veo)
- Ajdust params and train
- Traning - First epochs
2024-04-24.09-12-58.mp4
- Training - Last epochs
2024-04-24.09-06-57.mp4
- Final Result