Skip to content

Instantly share code, notes, and snippets.

@unity3dcollege
Created November 2, 2017 00:22
Show Gist options
  • Save unity3dcollege/699eff4a779a6448573df639ef0947d6 to your computer and use it in GitHub Desktop.
Save unity3dcollege/699eff4a779a6448573df639ef0947d6 to your computer and use it in GitHub Desktop.
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class NumberDemoAgent : Agent
{
[SerializeField]
private float currentNumber;
[SerializeField]
private float targetNumber;
[SerializeField]
private Text text;
[SerializeField]
private Transform cube;
[SerializeField]
private Transform sphere;
int solved;
public override List<float> CollectState()
{
List<float> state = new List<float>();
state.Add(currentNumber);
state.Add(targetNumber);
return state;
}
public override void AgentStep(float[] action)
{
if (text != null)
text.text = string.Format("C:{0} / T:{1} [{2}]", currentNumber, targetNumber, solved);
switch ((int)action[0])
{
case 0:
currentNumber -= 0.01f;
break;
case 1:
currentNumber += 0.01f;
break;
default:
return;
}
cube.position = new Vector3(currentNumber * 5f, 0f, 0f);
if (currentNumber < -1.2f || currentNumber > 1.2f)
{
reward = -1f;
done = true;
return;
}
float difference = Mathf.Abs(targetNumber - currentNumber);
if (difference <= 0.01f)
{
solved++;
reward = 1;
done = true;
return;
}
}
public override void AgentReset()
{
targetNumber = UnityEngine.Random.RandomRange(-1f, 1f);
sphere.position = new Vector3(targetNumber * 5, 0, 0);
currentNumber = 0f;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment