V2.9 取消归一化,追加StateUI,改进代码
取消坐标归一化,朝向归一化算法改为transform.eulerAngles.y / 36f
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user