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
+1 -1
View File
@@ -1 +1 @@
{"count":1,"self":47.2882752,"total":50.6455875,"children":{"InitializeActuators":{"count":16,"self":0.0015004999999999999,"total":0.0015004999999999999,"children":null},"InitializeSensors":{"count":16,"self":0.0009998,"total":0.0009998,"children":null},"AgentSendState":{"count":2291,"self":0.0310393,"total":0.1206959,"children":{"CollectObservations":{"count":18328,"self":0.060121299999999996,"total":0.060121299999999996,"children":null},"WriteActionMask":{"count":18328,"self":0.0080016,"total":0.0080016,"children":null},"RequestDecision":{"count":18328,"self":0.0215337,"total":0.0215337,"children":null}}},"DecideAction":{"count":2291,"self":0.0295373,"total":0.0295373,"children":null},"AgentAct":{"count":2291,"self":3.2040772,"total":3.2040770999999997,"children":null}},"gauges":{"AKMAgent.CumulativeReward":{"count":9,"max":2563.29736,"min":-11622.02,"runningAverage":-9344.109,"value":2563.29736,"weightedAverage":-7458.709}},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1676265049","unity_version":"2021.3.14f1","command_line_arguments":"C:\\Program Files\\Unity\\Hub\\Editor\\2021.3.14f1\\Editor\\Unity.exe -projectpath C:\\Users\\UCUNI\\OneDrive\\Unity\\ML-Agents\\Aimbot-ParallelEnv -useHub -hubIPC -cloudEnvironment production -licensingIpc LicenseClient-UCUNI -hubSessionId 09b1c250-aa7a-11ed-aae2-f5dbff6fb9ed -accessToken JZS3G7ukCMBqSLPYz0eBmgNgTUsctzdWLHiwknJRB1I00ef","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.0.1","scene_name":"InGame","end_time_seconds":"1676265100"}}
{"count":1,"self":103.6390464,"total":114.3152982,"children":{"InitializeActuators":{"count":16,"self":0.0024974999999999997,"total":0.0024974999999999997,"children":null},"InitializeSensors":{"count":16,"self":0.0020104999999999997,"total":0.0020104999999999997,"children":null},"AgentSendState":{"count":5455,"self":0.0948132,"total":0.9806398,"children":{"CollectObservations":{"count":43640,"self":0.82321499999999992,"total":0.82321499999999992,"children":null},"WriteActionMask":{"count":43640,"self":0.013517999999999999,"total":0.013517999999999999,"children":null},"RequestDecision":{"count":43640,"self":0.0490936,"total":0.0490936,"children":null}}},"DecideAction":{"count":5455,"self":0.099675699999999992,"total":0.099675699999999992,"children":null},"AgentAct":{"count":5455,"self":9.5909199999999988,"total":9.5909201,"children":null}},"gauges":{"AKMAgent.CumulativeReward":{"count":26,"max":6761.257,"min":-5718.909,"runningAverage":-2722.07129,"value":6761.257,"weightedAverage":878.3678}},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1677964013","unity_version":"2021.3.14f1","command_line_arguments":"C:\\Program Files\\Unity\\Hub\\Editor\\2021.3.14f1\\Editor\\Unity.exe -projectpath C:\\Users\\UCUNI\\OneDrive\\Unity\\ML-Agents\\Aimbot-ParallelEnv -useHub -hubIPC -cloudEnvironment production -licensingIpc LicenseClient-UCUNI -hubSessionId d67c88a0-ba02-11ed-a3ce-33b55950a3a4 -accessToken WdVReGPmmCLBbN81ypuBAiDvpIGsP4S76e58UuC3fpo00ef","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.0.1","scene_name":"InGame","end_time_seconds":"1677964127"}}
+30661 -29549
View File
File diff suppressed because it is too large Load Diff
+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;