Example #1
0
def execute():
    '''
    执行
    :return:
    '''
    # 初始化neat算法模块
    neat.neat_init()

    # 定义网络训练任务

    task = NeuralNetworkTask()

    # 定义网络
    netdef = {
        'netType' : NetworkType.Perceptron,                       # NetworkType,网络类型,必须
        'neuronCounts' : [4,1],                                   # list(初始)网络各层神经元数量,必须
        'idGenerator' :  'neat',                                  # str 生成网络,神经元,突触id的类,参见DefauleIDGenerator,list idgenerator命令可以列出所有的id生成器对象
        'config' : {
            'layered' : True,                                     # bool 是否分层,可选
            'substrate' : True,                                   # bool 是否使用基座,可选
            'acyclie' : False,                                    # bool 是否允许自身连接,可选
            'recurrent':False,                                    # bool 是否允许同层连接,可选
            'reversed':False,                                     # bool 是否允许反向连接,可选
            'dimension':2,                                        # int 空间坐标维度,可选
            'range':NeuralNetwork.MAX_RANGE,                      # list 坐标范围,可选'
        },
        'runner':{
            'name' : 'simple',                                    # str 网络运行器名称,必须
            'task' : task,                                        # NeuralNetworkTask,网络运行任务,必须
        },
        'models':{                                                # dict 神经元计算模型的配置信息,必须
            'input':{                                             # str 模型配置名称(不是模型名称)
                'name' : 'input',                                 # str,名称,与上面总是一样,可选
                'modelid':'input',                                # str,模型id,必须,用这个来找到对应的计算模型对象,因此应确保该计算模型已注册
            },
            'hidden':{
                'name':'hidden',                                  # str 隐藏神经元配置名称,可选
                'modelid':'hidden',                               # str 隐藏神经元计算模型id,必须
                'activationFunction':{                            # dict 可选
                    'name' : 'sigmod',                            # str 激活函数名称,必须
                    'a' :1.0,'b':1.0,'T':1.0                      # float 激活函数参数,可选
                },
                'bias':'uniform[-30.0:30.0]',                     # str 隐藏神经元的偏置变量,均匀分布,必须,可以是uniform[begin,end]或者normal(u,sigma)
            },
            'synapse':{
                'name':'synapse',                                 # str 突触计算模型配置名称,可选
                'modelid':'synapse',                              # str 突触计算模型Id,必须
                'weight':'uniform[-30.0:30.0]'                    # str 突触学习变量,均匀分布,必须
            }
        }
    }

    # 定义种群
    popParam = {
        'indTypeName' : 'network',                                #种群的个体基因类型名,必须,该类型的个体基因应已经注册过,参见evolution.agent,必须
        'genomeFactory':None,                                     #基因工厂,个体类型中已经提供了基因工厂对象,这里如果设置,可以替换前者,可选
        'factoryParam' :{                                         # 工厂参数,必须
           'connectionRate':1.0,                                  # 连接比率
        },
        'genomeDefinition' : netdef,                              #基因定义参数,可选
        'size':50,                                               #种群大小,必须
        'elitistSize':0.05,                                        #精英个体占比,小于1表示比例,大于等于1表示数量
        'species':{                                               #物种参数,可选
            'method':'neat_species',                              # 物种分类方法,在物种参数中必须
            'alg':'kmean',                                        # 算法名称
            'size': 5,                                            # 物种个体数量限制,0表示无限制或动态
            'iter':50,                                            # 算法迭代次数
        },
        'features':{                                              # 特征评估函数配置,必须
            'fitness' : Evaluator('fitness',[(fitness,1.0)])      # 适应度评估器,如果评估器只包含一个函数,也可以写成Evaluator('fitness',fitness)
        }
    }


    # 定于运行参数
    runParam = {
        'terminated' : {
            'maxIterCount' : 100000,                               # 最大迭代次数,必须
            'maxFitness' : 1000000.,                                   # 最大适应度,必须
        },
        'log':{
            'individual' : 'elite',                                 # 日志中记录个体方式:记录所有个体,可以选择all,elite,maxfitness(缺省),custom
            'debug': False,                                        # 是否输出调试信息
            'file': 'neat_cartpole.log'                            # 日志文件名
        },
        'evalate':{
            'parallel':0,                                         # 并行执行评估的线程个数,缺省0,可选
        },
        'operations':{
            #'method' : 'neat',                                   # 已有的进化操作序列名称,与text两个只用一个
            'text' : 'neat_selection,neat_crossmate,neat_mutate'  # 进化操作序列
        },
        'mutate':{
            'propotion' : 0.1,                                      # 变异比例,有多少个个体参与变异,小于等于1表示比例,大于1表示固定数量
            'parallel': 0,  # 并行执行变异的线程个数,缺省0,可选
            'model':{
                'rate' : 0.0,                                     # 模型变异比例
                'range' : ''                                      # 可选的计算模型名称,多个用逗号分开,缺省是netdef中所有模型
            },
            'activation':{
                'rate' : 0.0,                                     # 激活函数的变异比率
                'range':'sigmod'                                  # 激活函数的
            },
            'topo' : {
                'addnode' : 0.4,                                  # 添加节点的概率
                'addconnection':0.4,                              # 添加连接的概率
                'deletenode':0.1,                                 # 删除节点的概率
                'deleteconnection':0.1                            # 删除连接的概率
            },
            'weight':{
                'parallel': 0,  # 并行执行权重变异的线程个数,缺省0,可选
                'epoch':3,                                          # 权重调整次数
            }
        }

    }
    gc.disable()
    evolutionTask = EvolutionTask(1,popParam,callback)
    evolutionTask.execute(runParam)
    gc.enable()
Example #2
0
parentdir = os.path.dirname(os.path.dirname(currentdir))
os.sys.path.insert(0, parentdir)

from pybullet_envs.bullet import bullet_client

from evolution.session import EvolutionTask
import ne.neat as neat
import ne.neat.config as config
import evolution
import domains.antbullet.env as env
import domains.antbullet.measure as measure
from brain.networks import NeuralNetworkTask

if __name__ == '__main__':
    # NEAT 前馈网络
    neat.neat_init()

    task = NeuralNetworkTask()
    netdef = config.createNetDef(task, neuronCounts=[30, 8])
    popParam = evolution.createPopParam(indTypeName='network',
                                        size=100,
                                        elitistSize=0.01,
                                        genomeDefinition=netdef,
                                        evaluators=[
                                            (env.fitness, 0.5, 'fitness'),
                                            (measure.novelty, 0.5, 'novelty')
                                        ],
                                        species=config.defaultSpeciesMethod())
    runParam = evolution.createRunParam(
        debug=True, operations="NSGA2,neat_crossmate,neat_mutate")