示例#1
0
        private void learnNN(NeuronNet pNN, List <double> inputs, List <double> expected)
        {
            pNN.Update(inputs);
            var outputs = pNN.Outputs;

            Debug.Assert(outputs.Count == expected.Count);
            double tempFitness = pNN.Fitness;

            for (int ipOutput = 0; ipOutput < outputs.Count; ipOutput++)
            {
                tempFitness += calculateFitness(outputs[ipOutput], expected[ipOutput]);
            }
            pNN.Fitness = tempFitness;
        }
示例#2
0
    //同一时间内屏幕中只有3个子弹
    Action GetActionFromNetWork(List <Bullet> bullets, Vector3 gunPos)
    {
        List <float> netInputs = new List <float>();
        List <float> outputs;

        Action action = Action.Drift;

        float toTurretX = gunPos.x - pos.x;
        float toTurretY = gunPos.y - pos.y;

        netInputs.Add(toTurretX);
        netInputs.Add(toTurretY);

        for (int i = 0; i < bullets.Count; i++)
        {
            if (bullets[i].Active)
            {
                float xComp = bullets[i].Pos.x - pos.x;
                float yComp = bullets[i].Pos.y - pos.y;
                netInputs.Add(xComp);
                netInputs.Add(yComp);
            }
            else
            {
                //子弹未则输入一个指向Turret的向量
                netInputs.Add(toTurretX);
                netInputs.Add(toTurretY);
            }
        }
        outputs = brain.Update(netInputs);
        float bestSoFar = 0;

        for (int i = 0; i < outputs.Count; i++)
        {
            if (outputs[i] > bestSoFar && outputs[i] > 0.9f)
            {
                bestSoFar = outputs[i];
                action    = (Action)i;
            }
        }
        return(action);
    }