diff --git a/Assets/Brains.meta b/Assets/Brains.meta new file mode 100644 index 0000000..b1f30cd --- /dev/null +++ b/Assets/Brains.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: acae344fdaa8c094dbeb437aeb9679b3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Brains/BensonImitationV1.onnx b/Assets/Brains/BensonImitationV1.onnx new file mode 100644 index 0000000..709ce2e Binary files /dev/null and b/Assets/Brains/BensonImitationV1.onnx differ diff --git a/Assets/Brains/BensonImitationV1.onnx.meta b/Assets/Brains/BensonImitationV1.onnx.meta new file mode 100644 index 0000000..1d56eef --- /dev/null +++ b/Assets/Brains/BensonImitationV1.onnx.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: c125e980a0ef6a94e9310d21891ba601 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 + importMode: 1 + weightsTypeMode: 0 + activationTypeMode: 0 diff --git a/Assets/ML-Agents/Timers/AI training_timers.json b/Assets/ML-Agents/Timers/AI training_timers.json index 53c4648..4c5f4ce 100644 --- a/Assets/ML-Agents/Timers/AI training_timers.json +++ b/Assets/ML-Agents/Timers/AI training_timers.json @@ -1 +1 @@ -{"count":1,"self":7.2964823999999995,"total":60.9954573,"children":{"InitializeActuators":{"count":3,"self":0.001513,"total":0.001513,"children":null},"InitializeSensors":{"count":3,"self":0.0010095,"total":0.0010095,"children":null},"AgentSendState":{"count":2184,"self":0.0263912,"total":0.1014805,"children":{"CollectObservations":{"count":6552,"self":0.0160938,"total":0.0160938,"children":null},"WriteActionMask":{"count":6552,"self":0.0020112,"total":0.0020112,"children":null},"RequestDecision":{"count":6552,"self":0.019229899999999998,"total":0.056984299999999995,"children":{"AgentInfo.ToProto":{"count":6552,"self":0.016433299999999998,"total":0.0377544,"children":{"GenerateSensorData":{"count":6552,"self":0.0213211,"total":0.0213211,"children":null}}}}}}},"DecideAction":{"count":2184,"self":53.5099136,"total":53.509915199999995,"children":null},"AgentAct":{"count":2184,"self":0.0840575,"total":0.0840575,"children":{"AgentInfo.ToProto":{"count":21,"self":0,"total":0,"children":{"GenerateSensorData":{"count":21,"self":0,"total":0,"children":null}}}}}},"gauges":{"BensonImitationV1.CumulativeReward":{"count":21,"max":0,"min":0,"runningAverage":0,"value":0,"weightedAverage":0}},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1712357698","unity_version":"2022.3.11f1","command_line_arguments":"C:\\Program Files\\Unity\\Hub\\Editor\\2022.3.11f1\\Editor\\Unity.exe -projectpath C:\\Users\\noahk\\Documents\\Unity projects\\Racesm -useHub -hubIPC -cloudEnvironment production -licensingIpc LicenseClient-noahk -hubSessionId 61390a08-deee-455b-9b78-7c702050fabf -accessToken HPacrWVInUHR0G5x93m6zxWFWNrjAqy08EExnpTeleY005f","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.0.1","scene_name":"AI training","end_time_seconds":"1712357759"}} \ No newline at end of file +{"count":1,"self":54.6100928,"total":437.0681204,"children":{"InitializeActuators":{"count":1,"self":0.0015050999999999999,"total":0.0015050999999999999,"children":null},"InitializeSensors":{"count":1,"self":0.0010000999999999999,"total":0.0010000999999999999,"children":null},"AgentSendState":{"count":106517,"self":2.4229472,"total":4.9875248,"children":{"CollectObservations":{"count":106517,"self":0.5592851,"total":0.5592851,"children":null},"WriteActionMask":{"count":106517,"self":0.10856139999999999,"total":0.10856139999999999,"children":null},"RequestDecision":{"count":106517,"self":0.3979184,"total":1.8967311,"children":{"AgentInfo.ToProto":{"count":106517,"self":0.41538549999999996,"total":1.4988127,"children":{"GenerateSensorData":{"count":106517,"self":0.93811329999999993,"total":1.0834272,"children":{"RayPerceptionSensor.Perceive":{"count":106517,"self":0.1453139,"total":0.1453139,"children":null}}}}}}}}},"DecideAction":{"count":106517,"self":375.577856,"total":375.5778655,"children":null},"AgentAct":{"count":106517,"self":1.8830943999999998,"total":1.8901329,"children":{"AgentInfo.ToProto":{"count":282,"self":0.0035242999999999997,"total":0.0070383999999999993,"children":{"GenerateSensorData":{"count":282,"self":0.0020112,"total":0.0035141,"children":{"RayPerceptionSensor.Perceive":{"count":282,"self":0.0015029,"total":0.0015029,"children":null}}}}}}}},"gauges":{"BensonImitationV2.CumulativeReward":{"count":282,"max":3.594984,"min":0.06999996,"runningAverage":0.676435947,"value":2.39199162,"weightedAverage":2.00654221}},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1712838172","unity_version":"2022.3.11f1","command_line_arguments":"C:\\Program Files\\Unity\\Hub\\Editor\\2022.3.11f1\\Editor\\Unity.exe -projectpath C:\\Users\\noahk\\Documents\\Unity projects\\Racesm -useHub -hubIPC -cloudEnvironment production -licensingIpc LicenseClient-noahk -hubSessionId 6a5e8087-82e2-4dd3-a01c-49b3c989d73e -accessToken rm0_kOgxM-hVgLTEQcJOmvx7-NTfQijYXSBtuUfKLQM005f","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.0.1","scene_name":"AI training","end_time_seconds":"1712838609"}} \ No newline at end of file diff --git a/Assets/Prefabs/TrainingArea.prefab b/Assets/Prefabs/TrainingArea.prefab index e3579ab..ed72827 100644 --- a/Assets/Prefabs/TrainingArea.prefab +++ b/Assets/Prefabs/TrainingArea.prefab @@ -2010,7 +2010,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &4626743643629164319 Transform: m_ObjectHideFlags: 0 @@ -4167,6 +4167,9 @@ PrefabInstance: - targetCorrespondingSourceObject: {fileID: 5711380006811689493, guid: 5851f609a58dc884a99030da0105c6db, type: 3} insertIndex: -1 addedObject: {fileID: 8031066805216850976} + - targetCorrespondingSourceObject: {fileID: 5711380006811689493, guid: 5851f609a58dc884a99030da0105c6db, type: 3} + insertIndex: -1 + addedObject: {fileID: 6288636727627254098} m_SourcePrefab: {fileID: 100100000, guid: 5851f609a58dc884a99030da0105c6db, type: 3} --- !u!1 &4107100509094881531 stripped GameObject: @@ -4225,7 +4228,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_BrainParameters: - VectorObservationSize: 6 + VectorObservationSize: 2 NumStackedVectorObservations: 1 m_ActionSpec: m_NumContinuousActions: 0 @@ -4272,6 +4275,32 @@ MonoBehaviour: NumStepsToRecord: 0 DemonstrationName: BensonYouRetard DemonstrationDirectory: +--- !u!114 &6288636727627254098 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4107100509094881531} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bb6b867a41448888c1cd4f99643ad71, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SensorName: RayPerceptionSensor + m_DetectableTags: [] + m_RaysPerDirection: 2 + m_MaxRayDegrees: 150 + m_SphereCastRadius: 0 + m_RayLength: 30 + m_RayLayerMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_ObservationStacks: 1 + rayHitColor: {r: 1, g: 0, b: 0, a: 1} + rayMissColor: {r: 1, g: 1, b: 1, a: 1} + m_StartVerticalOffset: 0.5 + m_EndVerticalOffset: 1 --- !u!4 &4361687674892069559 stripped Transform: m_CorrespondingSourceObject: {fileID: 5420764024659664985, guid: 5851f609a58dc884a99030da0105c6db, type: 3} diff --git a/Assets/Scenes/AI Training.unity b/Assets/Scenes/AI Training.unity index 079cd6e..320de17 100644 --- a/Assets/Scenes/AI Training.unity +++ b/Assets/Scenes/AI Training.unity @@ -123,6 +123,71 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1001 &96007651 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_LocalPosition.x + value: 66.6 + objectReference: {fileID: 0} + - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5284110061588260334, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_Name + value: TrainingArea (1) + objectReference: {fileID: 0} + - target: {fileID: 5284110061588260334, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8262033930960634649, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} --- !u!1 &765367128 GameObject: m_ObjectHideFlags: 0 @@ -140,7 +205,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!81 &765367129 AudioListener: m_ObjectHideFlags: 0 @@ -209,13 +274,13 @@ Transform: m_GameObject: {fileID: 765367128} serializedVersion: 2 m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} - m_LocalPosition: {x: 140, y: 120, z: -40} + m_LocalPosition: {x: 135, y: 170, z: -43} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} ---- !u!1001 &880668635 +--- !u!1001 &851810722 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 @@ -225,7 +290,7 @@ PrefabInstance: m_Modifications: - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} propertyPath: m_LocalPosition.x - value: 154.5 + value: 147.6 objectReference: {fileID: 0} - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} propertyPath: m_LocalPosition.y @@ -268,6 +333,10 @@ PrefabInstance: value: TrainingArea (2) objectReference: {fileID: 0} - target: {fileID: 5284110061588260334, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8262033930960634649, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -380,7 +449,7 @@ PrefabInstance: m_Modifications: - target: {fileID: 320316327550477191, guid: 80c5f8bcfe7e033419638b39d9a278c4, type: 3} propertyPath: m_LocalPosition.x - value: 39.51581 + value: 28.615808 objectReference: {fileID: 0} - target: {fileID: 320316327550477191, guid: 80c5f8bcfe7e033419638b39d9a278c4, type: 3} propertyPath: m_LocalPosition.y @@ -428,7 +497,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1387890555408215438, guid: 80c5f8bcfe7e033419638b39d9a278c4, type: 3} propertyPath: m_IsActive - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2100622393876020061, guid: 80c5f8bcfe7e033419638b39d9a278c4, type: 3} propertyPath: CameraSide @@ -500,7 +569,7 @@ PrefabInstance: objectReference: {fileID: 1673238739} - target: {fileID: 8890610309520933432, guid: 80c5f8bcfe7e033419638b39d9a278c4, type: 3} propertyPath: m_LocalPosition.x - value: 39.51581 + value: 28.615808 objectReference: {fileID: 0} - target: {fileID: 8890610309520933432, guid: 80c5f8bcfe7e033419638b39d9a278c4, type: 3} propertyPath: m_LocalPosition.y @@ -544,67 +613,6 @@ Transform: m_CorrespondingSourceObject: {fileID: 4361687674892069559, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} m_PrefabInstance: {fileID: 3696992500355286030} m_PrefabAsset: {fileID: 0} ---- !u!1001 &1919317728 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} - propertyPath: m_LocalPosition.x - value: 71.1 - objectReference: {fileID: 0} - - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 494913253421693338, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5284110061588260334, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} - propertyPath: m_Name - value: TrainingArea (1) - objectReference: {fileID: 0} - - target: {fileID: 5284110061588260334, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} --- !u!1 &2015283366 stripped GameObject: m_CorrespondingSourceObject: {fileID: 4840733166066636179, guid: 80c5f8bcfe7e033419638b39d9a278c4, type: 3} @@ -674,6 +682,14 @@ PrefabInstance: propertyPath: m_Name value: TrainingArea objectReference: {fileID: 0} + - target: {fileID: 8242215082626919376, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_BehaviorName + value: BensonImitationV2 + objectReference: {fileID: 0} + - target: {fileID: 8262033930960634649, guid: 3664a8beed80ac848a9377d9ee14cb9b, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] @@ -687,5 +703,5 @@ SceneRoots: - {fileID: 1574695326} - {fileID: 765367131} - {fileID: 3696992500355286030} - - {fileID: 1919317728} - - {fileID: 880668635} + - {fileID: 851810722} + - {fileID: 96007651} diff --git a/Assets/AgentController.cs b/Assets/Scripts/AgentController.cs similarity index 90% rename from Assets/AgentController.cs rename to Assets/Scripts/AgentController.cs index c7b294e..50b5a25 100644 --- a/Assets/AgentController.cs +++ b/Assets/Scripts/AgentController.cs @@ -9,6 +9,7 @@ using System.Linq; using Unity.Mathematics; using Unity.VisualScripting; using System.Reflection; +using System; public class AgentController : Agent { @@ -41,7 +42,7 @@ public class AgentController : Agent public override void OnEpisodeBegin() { - int stepsSinceCheckpoint = 0; + stepsSinceCheckpoint = 0; // reset wheels foreach (var wheel in wheels) { @@ -79,14 +80,9 @@ public class AgentController : Agent } } - sensor.AddObservation(currentCheckpoint.localPosition.x); - sensor.AddObservation(currentCheckpoint.localPosition.z); + float checkpointDistance = distanceToCheckpoint(currentCheckpoint); - - // agent - sensor.AddObservation(transform.localPosition.x); - sensor.AddObservation(transform.localPosition.z); - sensor.AddObservation(transform.rotation.eulerAngles.y); + sensor.AddObservation(checkpointDistance); // Agent velocity var FullVelocityMagnitude = rigidBody.velocity.magnitude; // Velocity including angular velocity @@ -130,6 +126,11 @@ public class AgentController : Agent if (actions.DiscreteActions[1] == 1) hInput = 1f; + if (vInput == 1f) + { + AddReward(0.001f); + } + float forwardSpeed = Vector3.Dot(transform.forward, rigidBody.velocity); @@ -210,12 +211,14 @@ public class AgentController : Agent } } - var closestPoint = currentCheckpoint.GetComponent().ClosestPointOnBounds(transform.localPosition); - var distanceToCheckpoint = Vector3.Distance(transform.localPosition, closestPoint); + float checkpintDistance = distanceToCheckpoint(currentCheckpoint); - if (distanceToCheckpoint < 0.3f) + // float reward = (1 - Mathf.InverseLerp(0, 20, checkpintDistance)) / 1000; + + // AddReward(reward); + + if (checkpintDistance < 0.1f) { - Debug.Log(currentCheckpoint.name); currentCheckpoint.GetComponent().isCollected = true; @@ -223,13 +226,12 @@ public class AgentController : Agent if (currentCheckpoint == checkpoints[checkpoints.Count - 1].transform) { - SetReward(10f); + AddReward(10f); EndEpisode(); Debug.Log("END"); } - - SetReward(1.0f); + AddReward(1.0f); } currentStep += 1; @@ -259,4 +261,11 @@ public class AgentController : Agent if (Input.GetAxis("Horizontal") > 0.5) discreteActionsOut[1] = 1; } + + float distanceToCheckpoint(Transform checkpoint) + { + var closestPoint = checkpoint.GetComponent().ClosestPointOnBounds(transform.position); + var distanceToCheckpoint = Vector3.Distance(transform.position, closestPoint); + return distanceToCheckpoint; + } } \ No newline at end of file diff --git a/Assets/AgentController.cs.meta b/Assets/Scripts/AgentController.cs.meta similarity index 100% rename from Assets/AgentController.cs.meta rename to Assets/Scripts/AgentController.cs.meta