V2.9 取消归一化,追加StateUI,改进代码

取消坐标归一化,朝向归一化算法改为transform.eulerAngles.y / 36f
This commit is contained in:
2023-03-07 17:29:47 +09:00
parent faa4e7b065
commit 71f2687422
6 changed files with 30806 additions and 29634 deletions
+25 -8
View File
@@ -73,6 +73,15 @@ public class AgentWithGun : Agent
private TargetController targetCon;
private HUDController hudController;
// observation
float[] myObserve = new float[4];
float[] rayTagResult;
float[] rayTagResultOnehot;
float[] rayDisResult;
float[] targetStates;
float remainTime;
float inAreaState;
[System.NonSerialized] public int finishedState;
private void Start()
@@ -438,19 +447,26 @@ 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/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;
/**myObserve[0] = transform.localPosition.x / raySensors.viewDistance;
myObserve[1] = transform.localPosition.y / raySensors.viewDistance;
myObserve[2] = transform.localPosition.z / raySensors.viewDistance;
myObserve[3] = transform.eulerAngles.y / 360f;**/
myObserve[0] = transform.localPosition.x;
myObserve[1] = transform.localPosition.y;
myObserve[2] = transform.localPosition.z;
myObserve[3] = transform.eulerAngles.y / 36f;
rayTagResult = raySensors.rayTagResult;// 探测用RayTag结果 float[](raySensorNum,1)
rayTagResultOnehot = raySensors.rayTagResultOneHot.ToArray(); // 探测用RayTagonehot结果 List<int>[](raySensorNum*Tags,1)
rayDisResult = raySensors.rayDisResult; // 探测用RayDis结果 float[](raySensorNum,1)
targetStates = targetCon.targetState; // (6) targettype, target x,y,z, firebasesAreaDiameter
remainTime = targetCon.leftTime;
inAreaState = targetCon.getInAreaState();
gunReadyToggle = gunReady();
//float[] focusEnemyObserve = RaySensors.focusEnemyInfo;// 最近的Enemy情报 float[](3,1) MinEnemyIndex,x,z
//sensor.AddObservation(allEnemyNum); // 敌人数量 int
sensor.AddObservation(targetStates);// (6) targettype, target x,y,z, firebasesAreaDiameter
sensor.AddObservation(targetCon.getInAreaState()); // (1)
sensor.AddObservation(inAreaState); // (1)
sensor.AddObservation(remainTime); // (1)
sensor.AddObservation(gunReadyToggle); //(1) save gun is ready?
sensor.AddObservation(myObserve); // (4)自机位置xyz+朝向 float[](4,1)
@@ -463,6 +479,7 @@ public class AgentWithGun : Agent
sensor.AddObservation(rayTagResult);
}
sensor.AddObservation(rayDisResult); // 探测用RayDis结果 float[](raySensorNum,1)
EnvUICon.updateStateText(targetStates, inAreaState, remainTime, gunReadyToggle, myObserve, rayTagResultOnehot, rayDisResult);
/*foreach(float aaa in rayDisResult)
{
Debug.Log(aaa);
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
@@ -16,9 +17,11 @@ public class EnvironmentUIControl : MonoBehaviour
public TextMeshProUGUI remainTimeText;
public TextMeshProUGUI targetTypeText;
public TextMeshProUGUI winLoseText;
public TextMeshProUGUI stateText;
public float resultTimeout = 1f;
public GameObject gaugeImgObj;
private StringBuilder stateBuilder = new StringBuilder();
private LineChart realTimeRewardChart = null;
private TargetController targetController;
private ParameterContainer paramContainer;
@@ -153,4 +156,39 @@ public class EnvironmentUIControl : MonoBehaviour
break;
}
}
// update state text
// public TextMeshProUGUI stateText;
// targetState[0] = targetTypeInt;
// 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;
// float[] myObserve = { transform.localPosition.x/raySensors.viewDistance, transform.localPosition.y / raySensors.viewDistance, transform.localPosition.z / raySensors.viewDistance, transform.eulerAngles.y/360f }
// ??????????string??"targetType: 1.0 \r\n targetX: 2.0 \r\n"
public void updateStateText(float[] targetStates,float inAreaState,float remainTime, bool gunReadyToggle, float[] myObserve, float[] rayTagResultOnehot, float[] rayDisResult)
{
stateBuilder.Clear();
stateBuilder.Append($"States:\r\nTType:{targetStates[0]}");
stateBuilder.Append("\r\nTPosition:");
stateBuilder.Append(targetStates[1]).Append(targetStates[2]).Append(targetStates[3]);
stateBuilder.Append("\r\nTDiameter:");
stateBuilder.Append(targetStates[4]);
stateBuilder.Append("\r\nTRatio:");
stateBuilder.Append(targetStates[5]);
stateBuilder.Append("\r\nInArea:");
stateBuilder.Append(inAreaState);
stateBuilder.Append("\r\nRemainTime:");
stateBuilder.Append(remainTime);
stateBuilder.Append("\r\nGunReady:");
stateBuilder.Append(gunReadyToggle);
stateBuilder.Append("\r\nMyPosition:");
stateBuilder.Append(myObserve[0]).Append(myObserve[1]).Append(myObserve[2]);
stateBuilder.Append("\r\nMyRotation:");
stateBuilder.Append(myObserve[3]);
stateText.text = stateBuilder.ToString();
}
}
+7 -2
View File
@@ -209,9 +209,12 @@ public class TargetController : MonoBehaviour
else
{
targetState[0] = targetTypeInt;
targetState[1] = targetPosition.x / raySensors.viewDistance; // normalization
/* targetState[1] = targetPosition.x / raySensors.viewDistance; // normalization
targetState[2] = targetPosition.y / raySensors.viewDistance;
targetState[3] = targetPosition.z / raySensors.viewDistance;
targetState[3] = targetPosition.z / raySensors.viewDistance;*/
targetState[1] = targetPosition.x; // normalization
targetState[2] = targetPosition.y;
targetState[3] = targetPosition.z;
targetState[4] = blockCont.thisBlock.firebasesAreaDiameter / raySensors.viewDistance;
targetState[5] = blockCont.thisBlock.belongRatio;
}
@@ -396,6 +399,8 @@ public class TargetController : MonoBehaviour
}
else
{
// out of area
// thisSceneReward = paramCon.distanceReward * Math.Clamp(lastDistance - nowDistance, 0, 100);
thisSceneReward = paramCon.distanceReward * (lastDistance - nowDistance);
}
lastDistance = nowDistance;