参考链接:
HyperNEAT介绍
MultiNEAT库官网
NEAT各扩展代码库
MultiNEAT库github
conda install multineat -c anton.matosov -c conda-forge
要使用MultiNEAT还需要安装对应版本的boost C++库,在上述命令下安装python的boost库和boost-cpp库都是1.66.0的,所以boost C++库也安装1.66.0(目前的最新的稳定版本),安装过程以及配置如下:
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
#include
#include
using namespace std;
int main()
{
cout<cout<cout<cout<return 0;
}
终端编译和运行:
g++ 1.cpp -o 1
./1
输出:
106600
1_66
GNU C++ version 5.4.0 20160609
GNU libstdc++ version 20160609
库的Anaconda Cloud地址:https://anaconda.org/anton.matosov/multineat
同样需要Anaconda环境,输入如下命令:
conda install -c anton.matosov multineat
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