基于HyperNEAT等NEAT扩展算法的研究

参考链接:
HyperNEAT介绍
MultiNEAT库官网
NEAT各扩展代码库
MultiNEAT库github

安装以及使用MultiNEAT库(基于Ubuntu 16.04)

1.安装Anaconda环境,安装MultiNEAT库

Anaconda安装路径:/home/winycg/

conda install multineat -c anton.matosov -c conda-forge
要使用MultiNEAT还需要安装对应版本的boost C++库,在上述命令下安装python的boost库和boost-cpp库都是1.66.0的,所以boost C++库也安装1.66.0(目前的最新的稳定版本),安装过程以及配置如下:

2.安装以及编译Boost C++库(可以不用安装就使用库,但是不能对库进行修改)

1.下载boost C++库,下载地址:https://www.boost.org/。将boost_1_66_0文件夹加压到/home/winycg/下(和Anaconda一个路径),这样能识别到Anaconda的pyconfig.h文件。

2.配置C++ include路径,将Anaconda中的pyconfig.h文件路径配置到g++寻找的头文件里。
查找Anaconda的pyconfig.h路径,终端要设在/home/winycg/下,否则如果在/usr/下,找到的会是ubuntu自带的python2.7和python3.5的pyconfig.h路径:

cd /home/winycg/
find -name pyconfig.h

输出路径:(主要点是相对路径,在配置时要转化为绝对路径)

./anaconda3/pkgs/python-3.6.4-hc3d631a_1/include/python3.6m/pyconfig.h
./anaconda3/include/python3.6m/pyconfig.h

配置include路径:
找到/usr/etc/profile文件,在终端中输出命令使得该文件有写的权限:

sudo chmod 777 profile

在文件中写入C++配置路径:

C_INCLUDE_PATH=$C_INCLUDE_PATH:/home/winycg/anaconda3/pkgs/python-3.6.4-hc3d631a_1/include/python3.6m/
export C_INCLUDE_PATH

CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/home/winycg/anaconda3/pkgs/python-3.6.4-hc3d631a_1/include/python3.6m/
export CPLUS_INCLUDE_PATH

保存后重启系统
3.编译Boost C++库,打开boost_1_66_0文件夹,打开终端输入:

./bootstrap
./b2
sudo ./b2 install

即可完成Boost C++ 1.66.0的安装
4.测试boost C++库
新建1.cpp,代码如下:

#include<boost/version.hpp>
#include<boost/config.hpp>
#include<iostream>
using namespace std;
int main()
{
    cout<<BOOST_VERSION<<endl;
    cout<<BOOST_LIB_VERSION<<endl;
    cout<<BOOST_COMPILER<<endl;
    cout<<BOOST_STDLIB<<endl;
    return 0;
}

终端编译和运行:

g++ 1.cpp -o 1
./1

输出:

106600
1_66
GNU C++ version 5.4.0 20160609
GNU libstdc++ version 20160609

Windows下安装

库的Anaconda Cloud地址:https://anaconda.org/anton.matosov/multineat
同样需要Anaconda环境,输入如下命令:

conda install -c anton.matosov multineat

MultiNEAT库参考文档

NEAT_XOR.py


1.Genome

Genome(unsigned int a_ID,
       unsigned int a_NumInputs,
       unsigned int a_NumHidden,
       unsigned int a_NumOutputs,
       bool a_FS_NEAT, 
       ActivationFunction a_OutputActType,
       ActivationFunction a_HiddenActType,
       unsigned int a_SeedType,
       const Parameters &a_Parameters,
       unsigned int a_NumLayers = 1)

a_ID:ID号
a_NumInputs:输入结点数量,最后一个结点为偏置
a_NumHidden:隐藏结点数量。
a_NumOutputs:输出结点数量
a_FS_NEAT:如果是False,该网络是初始是全连接网络;如果是True:如果存在隐藏结点,则初始不存在连接,否则初始为任意选择一个输入结点全连接到输出结点,但是偏置结点仍然是全连接输出结点。
a_OutputActType:输出结点的激励函数
a_HiddenActType:隐藏结点的激励函数
a_SeedType:如果a_SeedType=0,忽略此项;如果a_SeedType=1,该隐藏结点数量有效
a_Parameters:Parameters()对象
a_NumLayers:隐藏层数量

2.Population

Population(const Genome& a_Seed, 
           const Parameters& a_Parameters,
           bool a_RandomizeWeights, 
           double a_RandomizationRange, 
           int a_RNG_seed)

const Genome& a_Seed:Genome对象
const Parameters& a_Parameters:Parameter对象
bool a_RandomizeWeights:如果为True,表示权重初始化为任意的
double a_RandomizationRange:权重在[-1,1]*a_RandomizationRange上均匀分布
int a_RNG_seed: the RNG seed

猜你喜欢

转载自blog.csdn.net/winycg/article/details/79631194