Archived
Private
Public Access
1
0
This repository has been archived on 2026-02-04. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2023-07-31 21:20:56 +02:00

65 lines
1.9 KiB
C#

using System.Collections.Generic;
using UnityEngine;
public class Manager : MonoBehaviour {
public GameObject agent;
public GameObject target;
public int population;
public bool training;
private int _generation;
private readonly int[] _layers = { 1, 10, 10, 1 };
private List<NeuralNetwork> _networks;
private List<Boomerang> _agents;
private void Timer() => training = false;
private void Update() {
if (!training) return;
if (_generation == 0) InitNetworks();
else {
_networks.Sort();
for (int i = 0; i < population / 2; i++) {
_networks[i] = new NeuralNetwork(_networks[i + population / 2]);
_networks[i].Mutate();
_networks[i + population / 2] = new NeuralNetwork(_networks[i + population / 2]);
}
_networks.ForEach(network => network.Fitness = 0.0f);
}
_generation++;
training = true;
Invoke(nameof(Timer), 15.0f);
CreateAgents();
}
private void CreateAgents() {
if (_agents != null)
_agents.ForEach(agent => Destroy(agent.gameObject));
_agents = new List<Boomerang>();
for (int i = 0; i < population; i++) {
var fieldAgent = Instantiate(agent, new Vector3(Random.Range(-10.0f, 10.0f), Random.Range(-10.0f, 10.0f), 0), agent.transform.rotation).GetComponent<Boomerang>();
fieldAgent.Initialize(_networks[i], target.transform);
_agents.Add(fieldAgent);
}
}
private void InitNetworks() {
if (population % 2 != 0) population++;
_networks = new List<NeuralNetwork>();
for (int i = 0; i < population; i++) {
var network = new NeuralNetwork(_layers);
network.Mutate();
_networks.Add(network);
}
}
}