V2.7 Normalized state

Normalized distance and rotation state.
This commit is contained in:
2022-12-18 20:17:08 +09:00
parent 64ada808de
commit 5ccb06c545
5 changed files with 30402 additions and 30395 deletions
+17 -12
View File
@@ -63,7 +63,7 @@ public class AgentWithGun : Agent
private string myTag = "";
private float lastEnemyFacingDistance = 0f; // record last enemy facing minimum distance
// scripts
private RaySensors rayScript;
private RaySensors raySensors;
private CharacterController PlayerController;
private EnvironmentUIControl EnvUICon;
private ParameterContainer paramContainer;
@@ -82,7 +82,7 @@ public class AgentWithGun : Agent
EnvUICon = EnvironmentUIControlObj.GetComponent<EnvironmentUIControl>();
targetCon = TargetControllerObj.GetComponent<TargetController>();
hudController = HUDObj.GetComponent<HUDController>();
rayScript = GetComponent<RaySensors>();
raySensors = GetComponent<RaySensors>();
PlayerController = this.transform.GetComponent<CharacterController>();
// Environment parameters
lockMouse = paramContainer.lockMouse;
@@ -263,7 +263,7 @@ public class AgentWithGun : Agent
{
// while if attack mode
float targetDis = Vector3.Distance(blockContainer.thisBlock.transform.position, transform.position);
if (targetDis <= rayScript.viewDistance)
if (targetDis <= raySensors.viewDistance)
{
// Debug.DrawRay(new Vector3(0,0,0), viewPoint, Color.red);
if (Vector3.Distance(ray.origin + (ray.direction * targetDis), blockContainer.thisBlock.transform.position) <= blockContainer.thisBlock.firebasesAreaDiameter / 2)
@@ -310,10 +310,10 @@ public class AgentWithGun : Agent
isFacingtoEnemy = true;
}
}
if (rayScript.inViewEnemies.Count > 0 && !isFacingtoEnemy) {
if (raySensors.inViewEnemies.Count > 0 && !isFacingtoEnemy) {
// have enemy in view
List<float> projectionDis = new List<float>();
foreach (GameObject thisEnemy in rayScript.inViewEnemies)
foreach (GameObject thisEnemy in raySensors.inViewEnemies)
{
// for each enemy in view
Vector3 projection = Vector3.Project(thisEnemy.transform.position - transform.position, (ray.direction * 10));
@@ -346,7 +346,7 @@ public class AgentWithGun : Agent
{
// attack mode
float targetDis = Vector3.Distance(blockContainer.thisBlock.transform.position, transform.position);
if(targetDis <= rayScript.viewDistance)
if(targetDis <= raySensors.viewDistance)
{
// Debug.DrawRay(new Vector3(0,0,0), viewPoint, Color.red);
if (Vector3.Distance(ray.origin + (ray.direction * targetDis), blockContainer.thisBlock.transform.position) <= blockContainer.thisBlock.firebasesAreaDiameter / 2)
@@ -419,7 +419,7 @@ public class AgentWithGun : Agent
{
EnvUICon.initChart();
}
rayScript.updateRayInfo(); // update raycast
raySensors.updateRayInfo(); // update raycast
}
// ML-AGENTS处理-------------------------------------------------------------------------------------------ML-AGENTS
// 观察情报
@@ -428,10 +428,10 @@ public class AgentWithGun : Agent
//List<float> enemyLDisList = RaySensors.enemyLDisList;// All Enemy Lside Distances
//List<float> enemyRDisList = RaySensors.enemyRDisList;// All Enemy Rside Distances
float[] myObserve = { transform.localPosition.x, transform.localPosition.y, transform.localPosition.z, transform.eulerAngles.y/360f };
float[] rayTagResult = rayScript.rayTagResult;// 探测用RayTag结果 float[](raySensorNum,1)
float[] rayTagResultOnehot = rayScript.rayTagResultOneHot.ToArray(); // 探测用RayTagonehot结果 List<int>[](raySensorNum*Tags,1)
float[] rayDisResult = rayScript.rayDisResult; // 探测用RayDis结果 float[](raySensorNum,1)
float[] myObserve = { transform.localPosition.x/raySensors.viewDistance, transform.localPosition.y / raySensors.viewDistance, transform.localPosition.z / raySensors.viewDistance, transform.eulerAngles.y/360f };
float[] rayTagResult = raySensors.rayTagResult;// 探测用RayTag结果 float[](raySensorNum,1)
float[] rayTagResultOnehot = raySensors.rayTagResultOneHot.ToArray(); // 探测用RayTagonehot结果 List<int>[](raySensorNum*Tags,1)
float[] rayDisResult = raySensors.rayDisResult; // 探测用RayDis结果 float[](raySensorNum,1)
float[] targetStates = targetCon.targetState; // (6) targettype, target x,y,z, firebasesAreaDiameter
float remainTime = targetCon.leftTime;
gunReadyToggle = gunReady();
@@ -452,6 +452,11 @@ public class AgentWithGun : Agent
sensor.AddObservation(rayTagResult);
}
sensor.AddObservation(rayDisResult); // 探测用RayDis结果 float[](raySensorNum,1)
/*foreach(float aaa in rayDisResult)
{
Debug.Log(aaa);
}
Debug.LogWarning("------------");*/
//sensor.AddObservation(focusEnemyObserve); // 最近的Enemy情报 float[](3,1) MinEnemyIndex,x,z
//sensor.AddObservation(raySensorNum); // raySensor数量 int
//sensor.AddObservation(remainTime); // RemainTime int
@@ -473,7 +478,7 @@ public class AgentWithGun : Agent
shoot = mouseShoot;
cameraControl(Mouse_X, 0);
moveAgent(vertical, horizontal);
rayScript.updateRayInfo(); // update raycast
raySensors.updateRayInfo(); // update raycast
//判断结束
float sceneReward = 0f;
+7 -5
View File
@@ -63,6 +63,7 @@ public class TargetController : MonoBehaviour
private CharacterController agentCharaCon;
private WorldUIController worldUICon;
private HUDController hudCon;
private RaySensors raySensors;
// Start is called before the first frame update
void Start()
@@ -84,6 +85,7 @@ public class TargetController : MonoBehaviour
paramCon = ParameterContainerObj.GetComponent<ParameterContainer>();
worldUICon = WorldUIObj.GetComponent<WorldUIController>();
hudCon = HUDObj.GetComponent<HUDController>();
raySensors = AgentObj.GetComponent<RaySensors>();
freeProb = 1 - attackProb - gotoProb - defenceProb;
targetNum = (int)Targets.Num;
if (freeProb < 0)
@@ -183,7 +185,7 @@ public class TargetController : MonoBehaviour
}
else
{
Debug.Log("Free");
//Debug.Log("Free");
targetTypeInt = (int)Targets.Free;
enemyCont.destroyAllEnemys();
enemyCont.randomInitEnemys(hudCon.enemyNum);
@@ -207,10 +209,10 @@ public class TargetController : MonoBehaviour
else
{
targetState[0] = targetTypeInt;
targetState[1] = targetPosition.x;
targetState[2] = targetPosition.y;
targetState[3] = targetPosition.z;
targetState[4] = blockCont.thisBlock.firebasesAreaDiameter;
targetState[1] = targetPosition.x / raySensors.viewDistance; // normalization
targetState[2] = targetPosition.y / raySensors.viewDistance;
targetState[3] = targetPosition.z / raySensors.viewDistance;
targetState[4] = blockCont.thisBlock.firebasesAreaDiameter / raySensors.viewDistance;
targetState[5] = blockCont.thisBlock.belongRatio;
}
}