public void EvaluatorTestInit() { Genome genome = new Genome(); int n1 = _nodeInnovation.GetNewInnovationNumber(); int n2 = _nodeInnovation.GetNewInnovationNumber(); int n3 = _nodeInnovation.GetNewInnovationNumber(); genome.AddNodeGene(new NodeGene(NodeGene.TYPE.INPUT, n1)); genome.AddNodeGene(new NodeGene(NodeGene.TYPE.INPUT, n2)); genome.AddNodeGene(new NodeGene(NodeGene.TYPE.OUTPUT, n3)); int c1 = _connectionInnovation.GetNewInnovationNumber(); int c2 = _connectionInnovation.GetNewInnovationNumber(); genome.AddConnectionGene(new ConnectionGene(n1, n3, 0.5f, true, c1)); genome.AddConnectionGene(new ConnectionGene(n2, n3, 0.5f, true, c2)); _eval = new EvalutorTestEvaluator(_config, genome, _nodeInnovation, _connectionInnovation); }
private void CreateStartingGenomeAndEvaluator() { // Create New Genome Genome genome = new Genome(config.newWeightRange, config.perturbingProbability); // Check there is at least 1 Input & 1 Output Nodes if (config.inputNodeNumber == 0) { config.inputNodeNumber = 1; } if (config.outputNodeNumber == 0) { config.outputNodeNumber = 1; } // Create Input Nodes for (int i = 0; i < config.inputNodeNumber; i++) { genome.AddNodeGene(new NodeGene(NodeGene.TYPE.INPUT, _nodeInnovation.GetNewInnovationNumber())); } // Create Hidden Nodes foreach (int nb in config.hiddenNodeStartNumberByLayer) { for (int i = 0; i < nb; ++i) { genome.AddNodeGene(new NodeGene(NodeGene.TYPE.HIDDEN, _nodeInnovation.GetNewInnovationNumber())); } } // Create Output Nodes for (int i = 0; i < config.outputNodeNumber; i++) { genome.AddNodeGene(new NodeGene(NodeGene.TYPE.OUTPUT, _nodeInnovation.GetNewInnovationNumber())); } // Create Connections if (config.addConnectionOnCreation) { if (config.hiddenNodeStartNumberByLayer.Count > 0) { int inputStartId = 0; int previousHiddenStatId = 0; int previousHiddenStopId = 0; int hiddenStartId = config.inputNodeNumber; int hiddenStopId = config.inputNodeNumber; int outputStartId = genome.Nodes.Count - config.outputNodeNumber; // Loop through Hidden Layers for (int hiddenLayer = 0; hiddenLayer < config.hiddenNodeStartNumberByLayer.Count; hiddenLayer++) { // Get Hidden Start & Stop Ids if (hiddenLayer > 0) { hiddenStartId += config.hiddenNodeStartNumberByLayer[hiddenLayer - 1]; } hiddenStopId += config.hiddenNodeStartNumberByLayer[hiddenLayer]; // Loop through Nodes of the current Layer for (int hiddenNodeId = hiddenStartId; hiddenNodeId < hiddenStopId; ++hiddenNodeId) { // If current Hidden Layer is the first Layer if (hiddenLayer == 0) { // Add Connections from Inputs to First Hidden Layer for (int inputNodeId = inputStartId; inputNodeId < config.inputNodeNumber; ++inputNodeId) { genome.AddConnectionGene(new ConnectionGene(inputNodeId, hiddenNodeId, Random.Range(config.newWeightRange.x, config.newWeightRange.y), true, _connectionInnovation.GetNewInnovationNumber())); } } else { // Add Connections from previous Hidden Layer to current Hidden Layer for (int previousHiddenNodeId = previousHiddenStatId; previousHiddenNodeId < previousHiddenStopId; ++previousHiddenNodeId) { genome.AddConnectionGene(new ConnectionGene(previousHiddenNodeId, hiddenNodeId, Random.Range(config.newWeightRange.x, config.newWeightRange.y), true, _connectionInnovation.GetNewInnovationNumber())); } // If current Hidden Layer is the last Layer if (hiddenLayer + 1 == config.hiddenNodeStartNumberByLayer.Count) { // Add Connections from Last Hidden Layer to Outputs for (int outputNodeId = outputStartId; outputNodeId < genome.Nodes.Count; ++outputNodeId) { genome.AddConnectionGene(new ConnectionGene(hiddenNodeId, outputNodeId, Random.Range(config.newWeightRange.x, config.newWeightRange.y), true, _connectionInnovation.GetNewInnovationNumber())); } } } } // Save previous Hidden Layer Start & Stop Ids previousHiddenStatId = hiddenStartId; previousHiddenStopId = hiddenStopId; } } else { int outputStartId = config.inputNodeNumber; int outputStopId = config.inputNodeNumber + config.outputNodeNumber; // Loop Input Node for (int inputNodeId = 0; inputNodeId < outputStartId; ++inputNodeId) { // Loop Output Node & add Connection between Input Node & Hidden Node for (int outputNodeId = outputStartId; outputNodeId < outputStopId; ++outputNodeId) { genome.AddConnectionGene(new ConnectionGene(inputNodeId, outputNodeId, Random.Range(config.newWeightRange.x, config.newWeightRange.y), true, _connectionInnovation.GetNewInnovationNumber())); } } } } _startingGenome = genome; Debug.Log("Starting Genome:\n" + genome.ToString()); // Create Evaluator _evaluator = new CreatureEvaluator(config, genome, _nodeInnovation, _connectionInnovation); }