public NetworkContainer CloneNetwork(float errorChance) { IInput[] newInputs = new IInput[Inputs.Length]; IOutput[] newOutputs = new IOutput[Outputs.Length]; NodeData[] newHiddenLayer = new NodeData[HiddenLayer.Length]; NodeData[] newHiddenOutputLayer = new NodeData[HiddenOutputLayer.Length]; for (int i = 0; i < Inputs.Length; i++) { newInputs[i] = ((CreatureSensor)Inputs[i]).ImperfectCopy(null, errorChance, -0.2f, 0.2f); } for (int i = 0; i < Outputs.Length; i++) { newOutputs[i] = ((CreatureAction)Outputs[i]).ImperfectCopy(null, errorChance, -0.2f, 0.2f); } for (int i = 0; i < HiddenLayer.Length; i++) { newHiddenLayer[i] = HiddenLayer[i]; } for (int i = 0; i < HiddenOutputLayer.Length; i++) { newHiddenOutputLayer[i] = HiddenOutputLayer[i]; } var newNetwork = new NetworkContainer(Inputs, HiddenLayer, HiddenOutputLayer, Outputs); //newNetwork.ModifyInputs(); //newNetwork.ModifyOutputs(); //newNetwork.ModifyHiddenLayers(); return(newNetwork); }
public float GetNetworkEnergy(NeuralNetwork.NetworkContainer network) { var numSensors = network.Inputs.Length; var numActions = network.HiddenLayer.Length; var numHiddenNodes = network.Outputs.Length; return(GetNetworkEnergy(numSensors, numActions, numHiddenNodes)); }
public int AddNetwork(NetworkContainer network) { return(AddNetwork(network.Inputs, network.Outputs, network.HiddenLayer, network.HiddenOutputLayer)); }