Пример #1
0
    private bool addFittestList(NetCacheEntry entry)
    {
        if (entry.fitness <= 0)
        {
            return(false);
        }

        SortedList <double, NetCacheEntry> fittestList = getFittestList(entry.name);

        if (fittestList.Count >= SpeciesNetCacheSize && fittestList.Count > 0 && fittestList.Last().Key >= entry.fitness)
        {
            // No better than anything in list
            return(false);
        }

        bool fittest = false;

        if (fittestList.Count == 0 || (fittestList.Count > 0 && entry.fitness > fittestList.First().Key))
        {
            fittest = true;
            Debug.Log("Fittest " + entry.tag + ": " + entry.fitness);
        }
        fittestList.Add(entry.fitness, entry);
        while (fittestList.Count > SpeciesNetCacheSize)
        {
            fittestList.RemoveAt(SpeciesNetCacheSize);
        }
        return(fittest);
    }
Пример #2
0
    private void save()
    {
        foreach (KeyValuePair <string, SortedList <double, NetCacheEntry> > entry in fittestCache)
        {
            if (entry.Value.Count == 0)
            {
                continue;
            }
            NetCacheEntry fittest = entry.Value.First().Value;
            string        type    = String.Join(".", ((NeuralNet.FeedForward)fittest.net).layerSizes.Select(p => p.ToString()).ToArray());

            string filename = fittest.name + ".json";

            // Save it
            NetSaveData save     = new NetSaveData(fittest.name, fittest.tag, (NeuralNet.FeedForward)fittest.net);
            string      savePath = Path.Combine(dataDirectory, filename);
            File.WriteAllText(savePath, JsonUtility.ToJson(save, true));
            Debug.Log("Saved as " + savePath);
        }
    }
Пример #3
0
    /**
     * When someone dies update the cache if they were the fittest.
     */
    public void OnDie(GameObject dead)
    {
        string      tag = dead.tag;
        MovementNet net = dead.GetComponent <MovementNet>();


        if (net != null && net.Net != null && net.Net.Fitness > 0)
        {
            string        type  = String.Join(".", net.Net.layerSizes.Select(p => p.ToString()).ToArray());
            string        name  = tag + "-" + type;
            NetCacheEntry entry = new NetCacheEntry
            {
                name    = name,
                tag     = tag,
                net     = net.Net,
                fitness = net.Net.Fitness
            };

            if (addFittestList(entry))
            {
                save();
            }
        }
    }