当前位置: 首页>>代码示例>>C#>>正文


C# Network.addInput方法代码示例

本文整理汇总了C#中Network.addInput方法的典型用法代码示例。如果您正苦于以下问题:C# Network.addInput方法的具体用法?C# Network.addInput怎么用?C# Network.addInput使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Network的用法示例。


在下文中一共展示了Network.addInput方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: breed

    private static Network breed(int parentA, int parentB)
    {
        List<Edge> childEdges = new List<Edge> ();
        int AIndex = 0;
        int BIndex = 0;

        //merge genomes
        while (AIndex < networks[parentA].edges.Count && BIndex < networks[parentB].edges.Count) {
            if (networks [parentA].edges [AIndex].innovation == networks [parentB].edges [BIndex].innovation) {
                if (rand.Next (0, 2) == 0) {
                    Edge e = new Edge(networks[parentA].edges[AIndex].inNeuron,networks[parentA].edges[AIndex].outNeuron,networks[parentA].edges[AIndex].weight, networks[parentA].edges[AIndex].isEnabled,networks[parentA].edges[AIndex].innovation);
                    childEdges.Add (e);
                } else {
                    Edge e = new Edge(networks[parentB].edges[BIndex].inNeuron,networks[parentB].edges[BIndex].outNeuron,networks[parentB].edges[BIndex].weight, networks[parentB].edges[BIndex].isEnabled,networks[parentB].edges[BIndex].innovation);
                    childEdges.Add (e);
                }
                AIndex++;
                BIndex++;
            } else if (networks [parentA].edges [AIndex].innovation > networks [parentB].edges [BIndex].innovation) {
                BIndex++;
            } else {
                Edge e = new Edge(networks[parentA].edges[AIndex].inNeuron,networks[parentA].edges[AIndex].outNeuron,networks[parentA].edges[AIndex].weight, networks[parentA].edges[AIndex].isEnabled,networks[parentA].edges[AIndex].innovation);
                childEdges.Add (e);
                AIndex++;
            }
        }
        //excess edges left over from dominant parent
        if (BIndex == networks [parentB].edges.Count) {
            for (int i=AIndex; i<networks[parentA].edges.Count; i++) {
                Edge e = new Edge(networks[parentA].edges[i].inNeuron,networks[parentA].edges[i].outNeuron,networks[parentA].edges[i].weight, networks[parentA].edges[i].isEnabled,networks[parentA].edges[i].innovation);
                childEdges.Add (e);
            }
        }

        //perturb it
        double rand01 = rand.NextDouble ();
        if (rand01 < perturbChance) {
            double perturbAmount = (rand.NextDouble () * perturbPercent * 2.0 - perturbPercent);
            for (int i=0; i<childEdges.Count; i++) {
                //perturb it! sore aru
                if(rand.NextDouble() < 0.9){
                    childEdges [i].weight = childEdges [i].weight + perturbAmount;
                }
                else{
                    //give weight a new value;
                    childEdges [i].weight = randomEdgeWeight();
                }

                if (!childEdges [i].isEnabled) {
                    rand01 = rand.NextDouble ();
                    if (rand01 < enableMutationChance) {
                        childEdges [i].isEnabled = true;
                    }
                }
            }
        }

        //create the child network
        Network net = new Network ();
        //add inputs
        for(int j=0;j<inputN;j++){
            Neuron n = new Neuron();
            net.addNeuron(n);
            net.addInput(j);
        }

        //add outputs
        for(int j=0;j<outputN;j++){
            Neuron n = new Neuron();
            net.addNeuron(n);
            net.addOutput(inputN + j);
        }
        for (int j=0; j<(neuronN - inputN - outputN); j++) {
            Neuron n = new Neuron ();
            net.addNeuron (n);
        }

        for(int i=0;i<childEdges.Count;i++){
            bool flag = net.addEdge(childEdges[i].inNeuron, childEdges[i].outNeuron, childEdges[i].weight, childEdges[i].innovation);
            if(flag==false){
                //Console.WriteLine("wtf add edge failed");
            }
        }

        //new links
        double rand2 = rand.NextDouble();
        if (rand2 < linkMutationChance) {
            int tCount = 0;
            while(tCount <30){
                int inputNode = rand.Next(0,neuronN - outputN);
                if(inputNode >= inputN){
                    inputNode += outputN;
                }
                int outputNode = rand.Next (inputN, neuronN);
                if(net.checkEdge(inputNode, outputNode)){
                    //add edge if the edge is connected to the input.
                    if(net.neurons[inputNode].inputEdges.Count > 0 || inputNode < inputN){
                        bool tb = net.addEdge(inputNode, outputNode, randomEdgeWeight(), getInnovation(inputNode, outputNode));
                        if(tb){
                            tCount = 20;
//.........这里部分代码省略.........
开发者ID:andykat,项目名称:Crawler-copy,代码行数:101,代码来源:main.cs

示例2: populationSetup

    public static void populationSetup()
    {
        finished = 0;
        networks = new List<Network> ();
        innovationInputs = new List<int> ();
        innovationOutputs = new List<int> ();
        for(int i=0;i<populationSize;i++){
            Network net = new Network();

            //add xorFitnessinputs
            for(int j=0;j<inputN;j++){
                Neuron n = new Neuron();
                net.addNeuron(n);
                net.addInput(j);
            }

            //add outputs
            for(int j=0;j<outputN;j++){
                Neuron n = new Neuron();
                net.addNeuron(n);
                net.addOutput(inputN + j);
            }
            neuronN = inputN + outputN;
            //add edges to outputs
            for(int j=0;j<inputN;j++){
                for(int k=0;k<outputN;k++){
                    //add a random weight between -2 and 2
                    bool temp = net.addEdge(j, k+inputN, randomEdgeWeight(), getInnovation(j, k+inputN));
                }
            }

            networks.Add(net);
        }

        startingIndexOfNewGenomes = 0;

        //initialize species
        species = new List<List<int>> ();
        speciesLastMaxFitness = new List<double> ();
        speciesLastFitnessImprovement = new List<int> ();
    }
开发者ID:andykat,项目名称:Crawler-copy,代码行数:41,代码来源:main.cs


注:本文中的Network.addInput方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。