Example #1
0
        //static public Brain GetBrain(Creature owner, Creature parent)
        //{
        //    Brain b = new Brain(owner);

        //    #region set brain size
        //    int HLayers = owner.stats.hiddenLayers;
        //    b.SetHiddenLayers(HLayers);
        //    #endregion

        //    #region set gene order
        //    HashSet<string> pheroHash = new HashSet<string>();
        //    var geneOrder = new string[pheroHash.Count];

        //    int index = 0;
        //    foreach (var s in pheroHash)
        //    {
        //        geneOrder[index] = s;
        //        index++;
        //    }
        //    b.SetGeneOrder(geneOrder);
        //    #endregion

        //    #region create layers
        //    BrainLayer inputBL;

        //    int VSize = owner.stats.vEye;
        //    //var HGenes = owner.GetGenes(Creature.GeneTypes.hearing);
        //    int HSize = owner.stats.eEars;
        //    var PGenes = owner.GetGenes(Creature.GeneTypes.pheromone);
        //    foreach (var g in PGenes)
        //    {
        //        pheroHash.Add(g.GetGeneticString().Substring(3));
        //    }
        //    int outputSize = 7;
        //    int inputSize = (HSize * 3) + (VSize * 3) + (PGenes.Count * 2);

        //    //inputBL = new BrainLayer(parent.brain.inputs, inputSize, owner.stats.hiddenSize, owner.stats.tweakPercentage,7+ (HSize * 3) + (VSize * 3), geneOrder,parent.brain.PheromoneOrder);

        //    BrainLayer[] hiddenBL=new BrainLayer[HLayers];
        //    if (parent.brain.hiddenLayerCount < HLayers)
        //    {
        //        for (int i = 0; i < parent.brain.hiddenLayerCount - 1; i++)
        //        {
        //            hiddenBL[i] = new BrainLayer(parent.brain.hiddens[i], owner.stats.hiddenSize, owner.stats.hiddenSize, owner.stats.tweakPercentage);
        //        }
        //        //fill missing -1
        //        for (int i= parent.brain.hiddenLayerCount;i< HLayers - 1; i++)
        //        {
        //            hiddenBL[i] = new BrainLayer(owner.stats.hiddenSize, owner.stats.hiddenSize);
        //        }
        //    }
        //    else
        //    {
        //        for (int i = 0; i < HLayers-1; i++)
        //        {
        //            hiddenBL[i] = new BrainLayer(parent.brain.hiddens[i],owner.stats.hiddenSize, owner.stats.hiddenSize, owner.stats.tweakPercentage);
        //        }
        //    }

        //    /////hiddentBL[last]= new BL(parent.brain.hiddens[last]

        //    //int outputSize = 7;
        //    //outputSize += owner.GetGenes(Creature.GeneTypes.outputGeneP).Count;

        //    //hiddenBL[HLayers - 1] = new BrainLayer(owner.stats.hiddenSize, outputSize);

        //    BrainLayer outputBL;

        //    outputSize += owner.GetGenes(Creature.GeneTypes.outputGeneP).Count;

        //    outputBL = new BrainLayer(parent.brain.outputs, outputSize, 1, owner.stats.tweakPercentage);


        //    //b.SetLayers(inputBL,hiddenBL,outputBL);
        //    #endregion


        //    #region set input start index

        //    b.SetInputLength(VSize, HSize);

        //    #endregion

        //    return b;

        //}

        //static public Brain GetBrain(Creature owner)
        //{
        //    Brain b = new Brain(owner);

        //    #region set brain size
        //    int HLayers = owner.stats.hiddenLayers;
        //    b.SetHiddenLayers(HLayers);
        //    #endregion
        //    #region create layers
        //    int inputSize = 2;

        //    //var VGenes = owner.GetGenes(Creature.GeneTypes.vision);
        //    int VSize = owner.stats.vEye;
        //    //var HGenes = owner.GetGenes(Creature.GeneTypes.hearing);
        //    int HSize = owner.stats.eEars;
        //    var PGenes = owner.GetGenes(Creature.GeneTypes.pheromone);
        //    HashSet<string> pheroHash = new HashSet<string>();
        //    foreach (var g in PGenes)
        //    {
        //        pheroHash.Add(g.GetGeneticString().Substring(3));
        //    }

        //    inputSize += (HSize * 3) + (VSize * 3) + (PGenes.Count * 2);

        //    var hiddens = new BrainLayer[HLayers];

        //    for (int i = 0; i < HLayers-1; i++)
        //    {
        //        hiddens[i] = new BrainLayer(owner.stats.hiddenSize, owner.stats.hiddenSize);
        //    }
        //    int outputSize = 7;
        //    outputSize += owner.GetGenes(Creature.GeneTypes.outputGeneP).Count;

        //    hiddens[HLayers - 1] = new BrainLayer(owner.stats.hiddenSize, outputSize);

        //    b.SetLayers(new BrainLayer(inputSize,owner.stats.hiddenSize),hiddens,new BrainLayer(outputSize,1));
        //    #endregion
        //    #region set gene order
        //    var geneOrder = new string[pheroHash.Count];

        //    int index = 0;
        //    foreach (var s in pheroHash)
        //    {
        //        geneOrder[index] = s;
        //        index++;
        //    }
        //    b.SetGeneOrder(geneOrder);
        //    #endregion
        //    #region set input start index

        //    b.SetInputLength(VSize, HSize);

        //    #endregion

        //    return b;
        //}

        static public Brain OneSizeBrain(Creature owner)
        {
            Brain b = new Brain(owner);

            #region set brain size
            int HLayers = OSBHLayersNumber;
            b.SetHiddenLayers(HLayers);
            #endregion
            #region create layers
            int inputSize = 2;

            //var VGenes = owner.GetGenes(Creature.GeneTypes.vision);
            int VSize = OSBEyesNumber;
            //var HGenes = owner.GetGenes(Creature.GeneTypes.hearing);
            int HSize = OSBEarsNumber;

            inputSize += (HSize * 3) + (VSize * 3);

            var hiddens = new BrainLayer[HLayers];

            for (int i = 0; i < HLayers - 1; i++)
            {
                hiddens[i] = new BrainLayer(OSBHSize, OSBHSize);
            }
            int outputSize = 7;

            hiddens[HLayers - 1] = new BrainLayer(OSBHSize, outputSize);

            b.SetLayers(new BrainLayer(inputSize, OSBHSize), hiddens, new BrainLayer(outputSize, 1));
            #endregion

            b.FillBrain(BrainLayer.NNFillingMode.random);

            return(b);
        }
Example #2
0
        static public Brain OneSizeBrain(Creature owner, Creature parent)
        {
            Brain b = new Brain();

            #region set brain size
            int HLayers = OSBHLayersNumber;
            b.SetHiddenLayers(HLayers);
            #endregion

            #region create layers
            BrainLayer inputBL;

            inputBL = new BrainLayer(parent.brain.inputs, owner.stats.tweakPercentage);

            BrainLayer[] hiddenBL = new BrainLayer[HLayers];

            for (int i = 0; i < HLayers; i++)
            {
                hiddenBL[i] = new BrainLayer(parent.brain.hiddens[i], owner.stats.tweakPercentage);
            }

            BrainLayer outputBL;

            outputBL = new BrainLayer(parent.brain.outputs, owner.stats.tweakPercentage);

            b.SetLayers(inputBL, hiddenBL, outputBL);
            #endregion

            return(b);
        }
Example #3
0
        public BrainLayer(BrainLayer parent, int size, int nextSize, float tweakPercentage)
        {
            nodes   = new float[size, 1];
            weights = new float[size, nextSize];
            biases  = new float[size, 1];

            weights = DuplicateArray(parent.weights, size, nextSize, tweakPercentage);
            biases  = DuplicateArray(parent.biases, size, 1, tweakPercentage);



            //bool xPSmaller = false;
            //bool yPSmaller = false;

            //if(parent.weights.GetLength(0)< weights.GetLength(0))
            //{
            //    xPSmaller = true;
            //}
            //if(parent.weights.GetLength(1)<weights.GetLength(0))
            //{
            //    yPSmaller = true;
            //}



            //weights = DuplicateArray(parent.weights,tweakPercentage);
            //biases = DuplicateArray(parent.biases, tweakPercentage);
        }
Example #4
0
        public BrainLayer(BrainLayer parent, int size, int nextSize, float tweakPercentage, int parralleStart, int parentStart, string[] ownerOrder, string[] parentOrder)
        {
            nodes   = new float[size, 1];
            weights = new float[size, nextSize];
            biases  = new float[size, 1];

            weights = DuplicateArray(parent.weights, size, nextSize, tweakPercentage);
            biases  = DuplicateArray(parent.biases, size, 1, tweakPercentage);


            //foreach order in child
            for (int i = 0; i < ownerOrder.Length; i++)
            {
                //find corresponding
                for (int j = 0; j < parentOrder.Length; j++)
                {
                    //if found
                    if (ownerOrder[i] == parentOrder[j])
                    {
                        parentOrder[j] = "";
                        if (!(i == j))
                        {
                            //switch row
                            var temp = new string[nextSize];
                            for (int k = 0; k < temp.Length && k < parent.biases.GetLength(0); k++)
                            {
                                Swap(ref weights[i + parralleStart, k], ref parent.weights[i + parentStart, k]);
                            }
                            Swap(ref biases[i + parralleStart, 0], ref parent.weights[i + parentStart, 0]);
                        }
                    }
                }
            }

            //weights = DuplicateArray(parent.weights, tweakPercentage);
            //biases = DuplicateArray(parent.biases, tweakPercentage);
        }
Example #5
0
 public void SetLayers(BrainLayer input, BrainLayer[] hidden, BrainLayer output)
 {
     inputs  = input;
     hiddens = hidden;
     outputs = output;
 }
Example #6
0
 public void FeedForward(BrainLayer previous)
 {
     nodes = Sigmoid(Add(DotProduct(Transpose(previous.weights), previous.nodes), previous.biases));
 }
Example #7
0
 public BrainLayer(BrainLayer parent, float tweakPercentage)
 {
     nodes   = new float[parent.nodes.GetLength(0), 1];
     weights = DuplicateArray(parent.weights, tweakPercentage);
     biases  = DuplicateArray(parent.biases, tweakPercentage);
 }