V2.9 取消归一化,追加StateUI,改进代码
取消坐标归一化,朝向归一化算法改为transform.eulerAngles.y / 36f
This commit is contained in:
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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