Fixed to target assignment, 3 salvo hydra70 config
parent
488ddaa836
commit
25e6568023
|
@ -106,7 +106,7 @@ Material:
|
||||||
- _Parallax: 0.02
|
- _Parallax: 0.02
|
||||||
- _QueueOffset: 0
|
- _QueueOffset: 0
|
||||||
- _ReceiveShadows: 1
|
- _ReceiveShadows: 1
|
||||||
- _Smoothness: 0.556
|
- _Smoothness: 0.33
|
||||||
- _SmoothnessTextureChannel: 0
|
- _SmoothnessTextureChannel: 0
|
||||||
- _SpecularHighlights: 1
|
- _SpecularHighlights: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
|
|
|
@ -65,6 +65,10 @@ public abstract class Agent : MonoBehaviour
|
||||||
_target = target;
|
_target = target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Agent GetAssignedTarget() {
|
||||||
|
return _target;
|
||||||
|
}
|
||||||
|
|
||||||
public bool HasAssignedTarget() {
|
public bool HasAssignedTarget() {
|
||||||
return _target != null;
|
return _target != null;
|
||||||
}
|
}
|
||||||
|
@ -103,6 +107,10 @@ public abstract class Agent : MonoBehaviour
|
||||||
|
|
||||||
public void MarkAsMiss() {
|
public void MarkAsMiss() {
|
||||||
_isMiss = true;
|
_isMiss = true;
|
||||||
|
if(_target != null) {
|
||||||
|
SimManager.Instance.RegisterTargetMiss(_target as Target);
|
||||||
|
_target = null;
|
||||||
|
}
|
||||||
TerminateAgent();
|
TerminateAgent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,9 +34,27 @@ public class ThreatAssignment : IAssignment
|
||||||
if (missiles[missileIndex].HasAssignedTarget()) continue;
|
if (missiles[missileIndex].HasAssignedTarget()) continue;
|
||||||
if (threatInfos.Count == 0) break;
|
if (threatInfos.Count == 0) break;
|
||||||
|
|
||||||
ThreatInfo highestThreat = threatInfos[0];
|
// Find the optimal target for this missile based on distance and threat
|
||||||
assignments.Add(new IAssignment.AssignmentItem(missileIndex, highestThreat.TargetIndex));
|
ThreatInfo optimalTarget = null;
|
||||||
threatInfos.RemoveAt(0);
|
float optimalScore = float.MinValue;
|
||||||
|
|
||||||
|
foreach (ThreatInfo threat in threatInfos)
|
||||||
|
{
|
||||||
|
float distance = Vector3.Distance(missiles[missileIndex].transform.position, targets[threat.TargetIndex].transform.position);
|
||||||
|
float score = threat.ThreatLevel / distance; // Balance threat level with proximity
|
||||||
|
|
||||||
|
if (score > optimalScore)
|
||||||
|
{
|
||||||
|
optimalScore = score;
|
||||||
|
optimalTarget = threat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (optimalTarget != null)
|
||||||
|
{
|
||||||
|
assignments.Add(new IAssignment.AssignmentItem(missileIndex, optimalTarget.TargetIndex));
|
||||||
|
threatInfos.Remove(optimalTarget);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return assignments;
|
return assignments;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ using UnityEngine;
|
||||||
|
|
||||||
public class Micromissile : Missile
|
public class Micromissile : Missile
|
||||||
{
|
{
|
||||||
[SerializeField] private float _navigationGain = 3f; // Typically 3-5
|
[SerializeField] private float _navigationGain = 5f; // Typically 3-5
|
||||||
|
|
||||||
private SensorOutput _sensorOutput;
|
private SensorOutput _sensorOutput;
|
||||||
private Vector3 _accelerationCommand;
|
private Vector3 _accelerationCommand;
|
||||||
|
@ -32,7 +32,6 @@ public class Micromissile : Missile
|
||||||
SensorOutput sensorOutput = GetComponent<Sensor>().Sense(_target);
|
SensorOutput sensorOutput = GetComponent<Sensor>().Sense(_target);
|
||||||
if(sensorOutput.velocity.range > 1000f) {
|
if(sensorOutput.velocity.range > 1000f) {
|
||||||
this.MarkAsMiss();
|
this.MarkAsMiss();
|
||||||
_target.MarkAsMiss();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate the acceleration input
|
// Calculate the acceleration input
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class Missile : Agent
|
||||||
protected override void UpdateReady(double deltaTime) {
|
protected override void UpdateReady(double deltaTime) {
|
||||||
Vector3 accelerationInput = Vector3.zero;
|
Vector3 accelerationInput = Vector3.zero;
|
||||||
Vector3 acceleration = CalculateAcceleration(accelerationInput);
|
Vector3 acceleration = CalculateAcceleration(accelerationInput);
|
||||||
GetComponent<Rigidbody>().AddForce(acceleration, ForceMode.Acceleration);
|
//GetComponent<Rigidbody>().AddForce(acceleration, ForceMode.Acceleration);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Update() {
|
protected override void Update() {
|
||||||
|
|
|
@ -15,8 +15,8 @@ public class SimManager : MonoBehaviour
|
||||||
|
|
||||||
|
|
||||||
private List<Missile> _missiles = new List<Missile>();
|
private List<Missile> _missiles = new List<Missile>();
|
||||||
private HashSet<Target> _unassignedTargets = new HashSet<Target>();
|
private List<Target> _unassignedTargets = new List<Target>();
|
||||||
private HashSet<Target> _targets = new HashSet<Target>();
|
private List<Target> _targets = new List<Target>();
|
||||||
private float _elapsedSimulationTime = 0f;
|
private float _elapsedSimulationTime = 0f;
|
||||||
private float endTime = 100f; // Set an appropriate end time
|
private float endTime = 100f; // Set an appropriate end time
|
||||||
private bool simulationRunning = false;
|
private bool simulationRunning = false;
|
||||||
|
@ -83,6 +83,10 @@ public class SimManager : MonoBehaviour
|
||||||
AssignMissilesToTargets(_missiles);
|
AssignMissilesToTargets(_missiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void RegisterTargetMiss(Target target) {
|
||||||
|
_unassignedTargets.Add(target);
|
||||||
|
}
|
||||||
|
|
||||||
public void AssignMissilesToTargets(List<Missile> missilesToAssign)
|
public void AssignMissilesToTargets(List<Missile> missilesToAssign)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -100,12 +104,14 @@ public class SimManager : MonoBehaviour
|
||||||
if (assignment.MissileIndex < missilesToAssign.Count)
|
if (assignment.MissileIndex < missilesToAssign.Count)
|
||||||
{
|
{
|
||||||
Missile missile = missilesToAssign[assignment.MissileIndex];
|
Missile missile = missilesToAssign[assignment.MissileIndex];
|
||||||
Target target = _targets.ElementAt(assignment.TargetIndex);
|
Target target = _unassignedTargets[assignment.TargetIndex];
|
||||||
missile.AssignTarget(target);
|
missile.AssignTarget(target);
|
||||||
Debug.Log($"Missile {missile.name} assigned to target {target.name}");
|
Debug.Log($"Missile {missile.name} assigned to target {target.name}");
|
||||||
_unassignedTargets.Remove(target);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// TODO this whole function should be optimized
|
||||||
|
_unassignedTargets.RemoveAll(target => missilesToAssign.Any(missile => missile.GetAssignedTarget() == target));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Missile CreateMissile(AgentConfig config)
|
public Missile CreateMissile(AgentConfig config)
|
||||||
|
|
|
@ -12,19 +12,42 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: 79f1fe138866d6a40b209a4edcf2ee06, type: 3}
|
m_Script: {fileID: 11500000, guid: 79f1fe138866d6a40b209a4edcf2ee06, type: 3}
|
||||||
m_Name: SimulationConfigHydra70
|
m_Name: SimulationConfigHydra70
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
timeScale: 0.2
|
timeScale: 1
|
||||||
missile_swarm_configs:
|
missile_swarm_configs:
|
||||||
- num_agents: 20
|
- num_agents: 10
|
||||||
agent_config:
|
agent_config:
|
||||||
missile_type: 0
|
missile_type: 0
|
||||||
target_type: 0
|
target_type: 0
|
||||||
initial_state:
|
initial_state:
|
||||||
position: {x: 0, y: 10, z: 0}
|
position: {x: 0, y: 20, z: 0}
|
||||||
rotation: {x: -45, y: 0, z: 0}
|
rotation: {x: -45, y: 0, z: 0}
|
||||||
velocity: {x: 0, y: 10, z: 10}
|
velocity: {x: 0, y: 10, z: 10}
|
||||||
standard_deviation:
|
standard_deviation:
|
||||||
position: {x: 10, y: 10, z: 10}
|
position: {x: 10, y: 0, z: 10}
|
||||||
velocity: {x: 5, y: 0, z: 5}
|
velocity: {x: 5, y: 0, z: 1}
|
||||||
|
dynamic_config:
|
||||||
|
launch_config:
|
||||||
|
launch_time: 0
|
||||||
|
sensor_config:
|
||||||
|
type: 0
|
||||||
|
frequency: 1000
|
||||||
|
plotting_config:
|
||||||
|
color: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
linestyle: 0
|
||||||
|
marker: 0
|
||||||
|
submunitions_config:
|
||||||
|
num_submunitions: 7
|
||||||
|
launch_config:
|
||||||
|
launch_time: 2
|
||||||
|
agent_config:
|
||||||
|
missile_type: 1
|
||||||
|
initial_state:
|
||||||
|
position: {x: -276.48438, y: 585.0613, z: 640.66565}
|
||||||
|
rotation: {x: 0, y: 0, z: 0}
|
||||||
|
velocity: {x: -115.62746, y: 195.53085, z: 266.85275}
|
||||||
|
standard_deviation:
|
||||||
|
position: {x: 5, y: 5, z: 5}
|
||||||
|
velocity: {x: 0, y: 0, z: 0}
|
||||||
dynamic_config:
|
dynamic_config:
|
||||||
launch_config:
|
launch_config:
|
||||||
launch_time: 0
|
launch_time: 0
|
||||||
|
@ -35,16 +58,81 @@ MonoBehaviour:
|
||||||
color: {r: 0, g: 0, b: 0, a: 0}
|
color: {r: 0, g: 0, b: 0, a: 0}
|
||||||
linestyle: 0
|
linestyle: 0
|
||||||
marker: 0
|
marker: 0
|
||||||
|
- num_agents: 10
|
||||||
|
agent_config:
|
||||||
|
missile_type: 0
|
||||||
|
target_type: 0
|
||||||
|
initial_state:
|
||||||
|
position: {x: 200, y: 20, z: 0}
|
||||||
|
rotation: {x: -60, y: 0, z: 0}
|
||||||
|
velocity: {x: 0, y: 10, z: 12}
|
||||||
|
standard_deviation:
|
||||||
|
position: {x: 10, y: 0, z: 10}
|
||||||
|
velocity: {x: 5, y: 0, z: 1}
|
||||||
|
dynamic_config:
|
||||||
|
launch_config:
|
||||||
|
launch_time: 10
|
||||||
|
sensor_config:
|
||||||
|
type: 0
|
||||||
|
frequency: 1000
|
||||||
|
plotting_config:
|
||||||
|
color: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
linestyle: 0
|
||||||
|
marker: 0
|
||||||
submunitions_config:
|
submunitions_config:
|
||||||
num_submunitions: 7
|
num_submunitions: 7
|
||||||
launch_config:
|
launch_config:
|
||||||
launch_time: 1.5
|
launch_time: 12
|
||||||
agent_config:
|
agent_config:
|
||||||
missile_type: 1
|
missile_type: 1
|
||||||
initial_state:
|
initial_state:
|
||||||
position: {x: -38.074936, y: 286.19226, z: 293.8709}
|
position: {x: -142.09969, y: 732.03265, z: 973.45154}
|
||||||
rotation: {x: 0, y: 0, z: 0}
|
rotation: {x: 0, y: 0, z: 0}
|
||||||
velocity: {x: -20.437624, y: 181.02332, z: 193.21309}
|
velocity: {x: -127.14329, y: 235.90274, z: 367.02448}
|
||||||
|
standard_deviation:
|
||||||
|
position: {x: 5, y: 5, z: 5}
|
||||||
|
velocity: {x: 0, y: 0, z: 0}
|
||||||
|
dynamic_config:
|
||||||
|
launch_config:
|
||||||
|
launch_time: 0
|
||||||
|
sensor_config:
|
||||||
|
type: 0
|
||||||
|
frequency: 1
|
||||||
|
plotting_config:
|
||||||
|
color: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
linestyle: 0
|
||||||
|
marker: 0
|
||||||
|
- num_agents: 10
|
||||||
|
agent_config:
|
||||||
|
missile_type: 0
|
||||||
|
target_type: 0
|
||||||
|
initial_state:
|
||||||
|
position: {x: -100, y: 20, z: 0}
|
||||||
|
rotation: {x: -45, y: 0, z: 0}
|
||||||
|
velocity: {x: 0, y: 10, z: 10}
|
||||||
|
standard_deviation:
|
||||||
|
position: {x: 10, y: 0, z: 10}
|
||||||
|
velocity: {x: 5, y: 0, z: 3}
|
||||||
|
dynamic_config:
|
||||||
|
launch_config:
|
||||||
|
launch_time: 20
|
||||||
|
sensor_config:
|
||||||
|
type: 0
|
||||||
|
frequency: 1000
|
||||||
|
plotting_config:
|
||||||
|
color: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
linestyle: 0
|
||||||
|
marker: 0
|
||||||
|
submunitions_config:
|
||||||
|
num_submunitions: 7
|
||||||
|
launch_config:
|
||||||
|
launch_time: 23
|
||||||
|
agent_config:
|
||||||
|
missile_type: 1
|
||||||
|
initial_state:
|
||||||
|
position: {x: -117.94113, y: 473.32446, z: 1092.305}
|
||||||
|
rotation: {x: 0, y: 0, z: 0}
|
||||||
|
velocity: {x: -5.810343, y: 133.54488, z: 394.63327}
|
||||||
standard_deviation:
|
standard_deviation:
|
||||||
position: {x: 5, y: 5, z: 5}
|
position: {x: 5, y: 5, z: 5}
|
||||||
velocity: {x: 0, y: 0, z: 0}
|
velocity: {x: 0, y: 0, z: 0}
|
||||||
|
@ -64,12 +152,12 @@ MonoBehaviour:
|
||||||
missile_type: 0
|
missile_type: 0
|
||||||
target_type: 0
|
target_type: 0
|
||||||
initial_state:
|
initial_state:
|
||||||
position: {x: 0, y: 400, z: 3000}
|
position: {x: 0, y: 600, z: 6000}
|
||||||
rotation: {x: 90, y: 0, z: 0}
|
rotation: {x: 90, y: 0, z: 0}
|
||||||
velocity: {x: 0, y: 0, z: -150}
|
velocity: {x: 0, y: 0, z: -50}
|
||||||
standard_deviation:
|
standard_deviation:
|
||||||
position: {x: 500, y: 200, z: 100}
|
position: {x: 1000, y: 200, z: 100}
|
||||||
velocity: {x: 0, y: 0, z: 50}
|
velocity: {x: 0, y: 0, z: 25}
|
||||||
dynamic_config:
|
dynamic_config:
|
||||||
launch_config:
|
launch_config:
|
||||||
launch_time: 0
|
launch_time: 0
|
||||||
|
|
Loading…
Reference in New Issue