def evaluate_genome(g): net = ctrnn.create_phenotype(g) fitnesses = [] for runs in range(runs_per_net): sim = cart_pole.CartPole() # Run the given simulation for up to num_steps time steps. fitness = 0.0 for s in range(num_steps): inputs = sim.get_scaled_state() action = net.parallel_activate(inputs) # Apply action to the simulated cart-pole force = cart_pole.discrete_actuator_force(action) sim.step(force) # Stop if the network fails to keep the cart within the position or angle limits. # The per-run fitness is the number of time steps the network can balance the pole # without exceeding these limits. if abs(sim.x) >= sim.position_limit or abs(sim.theta) >= sim.angle_limit_radians: break fitness += 1.0 fitnesses.append(fitness) # The genome's fitness is its worst performance across all runs. return min(fitnesses)
import pickle from cart_pole import CartPole, discrete_actuator_force from movie import make_movie from neatsociety import ctrnn # load the winner with open('ctrnn_winner_genome', 'rb') as f: c = pickle.load(f) print('Loaded genome:') print(c) net = ctrnn.create_phenotype(c) sim = CartPole() print() print("Initial conditions:") print(" x = {0:.4f}".format(sim.x)) print(" x_dot = {0:.4f}".format(sim.dx)) print(" theta = {0:.4f}".format(sim.theta)) print("theta_dot = {0:.4f}".format(sim.dtheta)) print() # Run the given simulation for up to 100k time steps. num_balanced = 0 for s in range(10**5): inputs = sim.get_scaled_state() action = net.parallel_activate(inputs)
import pickle from cart_pole import CartPole, discrete_actuator_force from movie import make_movie from neatsociety import ctrnn # load the winner with open('ctrnn_winner_genome', 'rb') as f: c = pickle.load(f) print('Loaded genome:') print(c) net = ctrnn.create_phenotype(c) sim = CartPole() print() print("Initial conditions:") print(" x = {0:.4f}".format(sim.x)) print(" x_dot = {0:.4f}".format(sim.dx)) print(" theta = {0:.4f}".format(sim.theta)) print("theta_dot = {0:.4f}".format(sim.dtheta)) print() # Run the given simulation for up to 100k time steps. num_balanced = 0 for s in range(10 ** 5): inputs = sim.get_scaled_state() action = net.parallel_activate(inputs)