import gym
import numpy as np
import cgp
from cgp import*import matplotlib.pyplot as plt
n_eps =300
Mu =10
Lambda =40
env = gym.make('CartPole-v1')
env = env.unwrapped
r_list =[]
pop = create_population(Mu+Lambda)for e inrange(n_eps):for ind in pop:
obs = env.reset()
done =False
reward =0whilenot done:
x, xx, w, ww = obs
action =0if ind.eval(x, xx, w, ww)>0else1
obs,r,done,_ = env.step(action)
reward += r
if reward >=1500:break
ind.fitness = reward
pop = evolve(pop,0.015, Mu, Lambda)print(e,'\t',pop[0].fitness)
r_list.append(pop[0].fitness)
plt.plot(r_list)
plt.show()
遗传规划cgp.py
"""
Cartesian genetic programming
"""import operator as op
import random
import copy
import math
from settings import VERBOSE, N_COLS, LEVEL_BACK
classFunction:"""
A general function
arity: 函数的输入参数的数量
"""def__init__(self, f, arity, name=None):
self.f = f
self.arity = arity
self.name = f.__name__ if name isNoneelse name
def__call__(self