public override PlayerAction Play(Tank tank)
        {
            Matrix[] theta = new Matrix[2] {
                theta1, theta2
            };
            NeuralNetworkClassifier mc = new NeuralNetworkClassifier(theta);

            mc.Theta = theta;
            var x           = FeatureGenerator.CollectFeatures(tank, map, Opponent);
            var resultIndex = (int)mc.Predict(x);

            switch (resultIndex)
            {
            case 0:
                return(PlayerActionHelper.GetAttackAction(tank));

            case 1:
                return(PlayerActionHelper.GetForwardAction(tank));

            case 2:
                return(PlayerActionHelper.GetTurnToAction(tank, Direction.Up));

            case 3:
                return(PlayerActionHelper.GetTurnToAction(tank, Direction.Right));

            case 4:
                return(PlayerActionHelper.GetTurnToAction(tank, Direction.Down));

            case 5:
                return(PlayerActionHelper.GetTurnToAction(tank, Direction.Left));

            default:
                return(PlayerActionHelper.GetForwardAction(tank));
            }
        }
示例#2
0
        public override PlayerAction Play(Tank tank)
        {
            //var theta =
            MultiLogisticClassifier mc = new MultiLogisticClassifier(40, 6);

            mc.Theta = theta;
            var x       = FeatureGenerator.CollectFeatures(tank, map, Opponent);
            var predict = mc.Predict(x);

            int resultIndex = 0;

            for (int i = 0; i < predict.Length; i++)
            {
                if (predict[i] == 1)
                {
                    resultIndex = i;
                    break;
                }
            }

            switch (resultIndex)
            {
            case 0:
                return(PlayerActionHelper.GetAttackAction(tank));

            case 1:
                return(PlayerActionHelper.GetForwardAction(tank));

            case 2:
                return(PlayerActionHelper.GetTurnToAction(tank, Direction.Up));

            case 3:
                return(PlayerActionHelper.GetTurnToAction(tank, Direction.Right));

            case 4:
                return(PlayerActionHelper.GetTurnToAction(tank, Direction.Down));

            case 5:
                return(PlayerActionHelper.GetTurnToAction(tank, Direction.Left));

            default:
                return(PlayerActionHelper.GetForwardAction(tank));
            }
        }