Example #1
0
    /// <summary>
    /// エージェントの状態更新
    /// </summary>
    private void AgentUpdate(AirHockeyAgent a, NNBrain b)
    {
        var observation = a.CollectObservations();
        var action      = b.GetAction(observation);

        a.AgentAction(action);
    }
Example #2
0
    public NNBrain Mutate(int generation)
    {
        var c = new NNBrain(this);

        for (int i = 0; i < c.HiddenLayers + 1; i++)
        {
            c.Biases[i]  = MutateLayer(Weights[i], generation);
            c.Weights[i] = MutateLayer(Weights[i], generation);
        }
        return(c);
    }
Example #3
0
    public NNBrain Crossover(NNBrain b)
    {
        var c = new NNBrain(this);

        for (int i = 0; i < c.HiddenLayers + 1; i++)
        {
            c.Biases[i]  = CrossoverLayer(Biases[i], b.Biases[i]);
            c.Weights[i] = CrossoverLayer(Weights[i], b.Weights[i]);
        }
        return(c);
    }
Example #4
0
 /// <summary>
 /// ブレインを報酬で比較する関数
 /// </summary>
 private static int CompareBrains(NNBrain a, NNBrain b)
 {
     if (a.Reward > b.Reward)
     {
         return(-1);
     }
     if (b.Reward > a.Reward)
     {
         return(1);
     }
     return(0);
 }
Example #5
0
 public NNBrain(NNBrain other)
 {
     InputSize    = other.InputSize;
     OutputSize   = other.OutputSize;
     HiddenLayers = other.HiddenLayers;
     HiddenSize   = other.HiddenSize;
     // ??
     for (int i = 0; i < other.Weights.Count; ++i)
     {
         Matrix w = other.Weights[i].Copy();
         Matrix b = other.Biases[i].Copy();
         Weights.Add(w);
         Biases.Add(b);
     }
 }
Example #6
0
    /// <summary>
    /// 初回起動時
    /// </summary>
    void Start()
    {
        // Brainの初期化
        if (LearningData != null)
        {
            // ランダムに初期化
            var originalBrain = NNBrain.Load(learningData);
            for (int i = 0; i < TotalPopulation; i++)
            {
                Brains.Add(new NNBrain(originalBrain));
            }
        }
        else
        {
            // ロードデータをそのままコピー
            for (int i = 0; i < TotalPopulation; i++)
            {
                Brains.Add(new NNBrain(InputSize, HiddenSize, HiddenLayers, OutputSize));
            }
        }

        // Agentの初期化
        for (int i = 0; i < NAgents; i++)
        {
            var obj = Instantiate(GObject, Vector3.forward * i * 15f, Quaternion.identity);
            obj.SetActive(true);
            var agent = obj.GetComponent <AirHockeyAgent>();
            if (i >= 5)
            {
                agent.NoRendering();
            }
            GObjects.Add(obj);
            Agents.Add(agent);
        }
        BestRecord = -9999;
        SetStartAgents();
    }