def TestAGeneration(BrainList, NumToReturn): BrainFitnesses = [] for i in range(0, len(BrainList)): print("Testing Brain #" + str(i)) Fitness = 0 for j in range(0, 100): NewCube = Cube() NewCube.ScrambleCube(20) Fitness += AttemptSolve(NewCube, BrainList[i]) print("Brain Fitness: " + str(Fitness)) BrainFitnesses.append(Fitness) BrainsToReturn = [] for i in range(0, NumToReturn): MaxFitness = max(BrainFitnesses) BrainsToReturn.append(BrainList[BrainFitnesses.index(MaxFitness)]) BrainList.pop(BrainFitnesses.index(MaxFitness)) BrainFitnesses.pop(BrainFitnesses.index(MaxFitness)) return BrainsToReturn
from Cube import Cube from Brain import Brain NewCube = Cube() NewBrain = Brain() #We have nothing to go on so we just implement a random brain #let's start with a simple test 1 layer, 40 neurons NewBrain.InitializeRandomLayerNeurons(1, 40) NewCube.ScrambleCube(20) print("Starting Cube:") NewCube.Print() print() for Moves in range(0, 10): print("Move: " + str(Moves)) #Feed our brain the information and let it reach a decision InputNeuronsToActivate = NewCube.GetInputNeuronsToActivate() for NeuronID in InputNeuronsToActivate: NewBrain.InputNeurons[NeuronID].Activate( 0) #don't weight the starting gun HighestOutputNeuron = NewBrain.GetHighestOutputNeuron() print("Highest Output Neuron is: " + str(HighestOutputNeuron)) print("With Weight: " + str(NewBrain.OutputNeurons[HighestOutputNeuron].AccumulatedWeight)) #perform the move if HighestOutputNeuron == 1: NewCube.RotateWhiteFaceRight() elif HighestOutputNeuron == 2:
from Cube import Cube from Brain import Brain from copy import deepcopy import HelperFunctions if __name__ == "__main__": #initialize 10 random brains TheBrains = [] for i in range(0, 10): TheBrains.append(Brain()) #try brains with 2 internal layes, each with 40 neurons TheBrains[i].InitializeRandomLayerNeurons(2, 40) #test ten generations for Generation in range(0, 19): print("Testing Generations: " + str(Generation)) BestBrains = HelperFunctions.TestAGeneration(TheBrains, 5) TheBrains = [] for BrainElement in BestBrains: TheBrains = TheBrains + HelperFunctions.MakeNewGenerationFromBrain( BrainElement, 2) BestBrains = HelperFunctions.TestAGeneration( TheBrains, 1) #Here is our leading contender DemoCube = Cube() DemoCube.ScrambleCube(20) HelperFunctions.PerformExhibitionSolve(DemoCube, BestBrains[0])