Exemplo n.º 1
0
    public TWEANN(TWEANNGenotype g)
    {
        Running        = true;
        ArchetypeIndex = g.GetArchetypeIndex();
        nodes          = new List <TWEANNNode>(g.Nodes.Count);
        int countIn = 0, countOut = 0;

        if (ArtGallery.DEBUG_LEVEL > ArtGallery.DEBUG.NONE)
        {
            Debug.Log("Starting TWEANNNodes build...");
        }
        foreach (NodeGene node in g.Nodes)
        {
            TWEANNNode tempNode = new TWEANNNode(node.fTYPE, node.nTYPE, node.Innovation, false, node.GetBias());
            nodes.Add(tempNode);
            if (node.nTYPE == NTYPE.INPUT)
            {
                countIn++;
            }
            else if (node.nTYPE == NTYPE.OUTPUT)
            {
                countOut++;
            }
        }
        numInputs  = countIn;
        numOutputs = countOut;
        if (ArtGallery.DEBUG_LEVEL > ArtGallery.DEBUG.NONE)
        {
            Debug.Log("Starting TWEANNLinks build...");
        }
        foreach (LinkGene link in g.Links)
        {
            TWEANNNode source = GetNodeByInnovationID(link.GetSourceInnovation());
            TWEANNNode target = GetNodeByInnovationID(link.GetTargetInnovation());

            if (source == null)
            {
                throw new System.Exception("Source not found with innovation " + link.GetSourceInnovation() + " : " + ToString());
            }
            if (target == null)
            {
                throw new System.Exception("Target not found with innovation " + link.GetTargetInnovation() + " : " + ToString());
            }

            source.Connect(target, link.GetWeight(), link.Innovation, false, false);
        }
        if (ArtGallery.DEBUG_LEVEL > ArtGallery.DEBUG.NONE)
        {
            Debug.Log("TWEANN build from TWEANNGenotype completed");
        }
        Running = false;
    }
Exemplo n.º 2
0
    public TWEANNGenotype Crossover(TWEANNGenotype toModify, TWEANNGenotype toReturn)
    {
        AddToCSV("toModify pre", DebugNodes(toModify.Nodes));
        AddToCSV("toReturn pre", DebugNodes(toReturn.Nodes));
        AddToCSV("toModify links pre", DebugLinks(toModify.Links));
        AddToCSV("toReturn links pre", DebugLinks(toReturn.Links));

        List <List <NodeGene> > alignedNodes = new List <List <NodeGene> >(2)
        {
            AlignNodesToArchetype(toModify.Nodes, toModify.GetArchetypeIndex()),
            AlignNodesToArchetype(toReturn.Nodes, toReturn.GetArchetypeIndex())
        };

        AddToCSV("toModify aligned", DebugNodes(alignedNodes[0]));
        AddToCSV("toReturn aligned", DebugNodes(alignedNodes[1]));

        List <List <NodeGene> > crossedNodes = CrossNodes(alignedNodes[0], alignedNodes[1]);

        AddToCSV("toModify crossed", DebugNodes(crossedNodes[0]));
        AddToCSV("toReturn crossed", DebugNodes(crossedNodes[1]));


        List <List <LinkGene> > alignedLinks = AlignLinkGenes(toModify.Links, toReturn.Links);

        AddToCSV("toModify aligned links", DebugLinks(alignedLinks[0]));
        AddToCSV("toReturn aligned links", DebugLinks(alignedLinks[1]));

        List <List <LinkGene> > crossedLinks = CrossLinks(alignedLinks[0], alignedLinks[1]);

        AddToCSV("toModify crossed links", DebugLinks(crossedLinks[0]));
        AddToCSV("toReturn crossed links", DebugLinks(crossedLinks[1]));

        toModify.Nodes = crossedNodes[0];
        toModify.Links = crossedLinks[0];
        toReturn.Nodes = crossedNodes[1];
        toReturn.Links = crossedLinks[1];

        Sucessful = true;
        //SaveCSV();
        return(toReturn);
    }