# 快速开始

# 安装

使用下面的命令可以在项目中添加 gepjs 模块。

npm i -S gepjs
# or
npm install gepjs --save

# 引入

gepjs 支持在 node 端和 web 端使用,引入也非常简单。

node 端使用时,使用 require 引入。

const NodeGep = require('gepjs');

web 端使用时,如嵌入 Vue 中或在基于 webpack 打包的项目中,可以使用 import 引入。

import * as Gep from 'gepjs'

同时,gepjs 也支持在 typescript 中使用,在 typescript 中引入:

import * as Gep from 'gepjs'
// or
import { Gene } from 'gepjs'

# 环境

与自然界的生物一样,个体的生存需要有相应的生存环境,在 gepjs 中,使用 Env 对象来管理环境。

创建环境也非常简单:

import { Env, Operator } from 'gepjs'

// 创建算子
const operators = new Operator();
operators.setVars('x');
const operSets = operators.toArray();
// 定义环境参数
const envOption = {
  headLen: 5,       // 定义基因的头部长度,这是必须的
  mutateRate: 0.3,  // 突变率
};
// 设置环境参数
Env.setOptions(envOpts, operSets);

环境创建完成后,就可以基于环境来创建基因、个体或者种群了。

# 基因

基因(Gene)是 gepjs 中最基础,也是最重要的模块,它承载了所有的运算。

在环境已准备就绪的前提下,创建一个基因也是非常简单的:

import { Gene } from 'gepjs'
const myGene = new Gene();

基因就创建完毕后,可以使用下面的代码查看基因的算子排序:

const gene = myGene.getGenes();
console.log(gene);

或者,也可以使用 encode 方法将基因进行序列化,输出特征字符组成的数组:

const gene = myGene.encode();
console.log(gene.join(','));  // /,*2,sin,*2,tanh,x,x,x,x,x,x

有关 算子 的概念会在后续介绍。

# 表达

基因的表达其实就是让基因对输入值进行求解计算,得到输出值。

在上面的示例中,创建环境的过程中我们已经设置了一个输入算子 x ,接下来我们使用 getValue 方法来表达基因:

// 将输入算子 x 的值设置为 1
const value = myGene.getValue({ x: 1 });
conso.log(value);   // 1.449115600735962

基因的序列是随机生成的,每一种基因对 x = 1 的表达结果可能不同。

# 突变

在生物界中,突变是进化的动力,突变提供了物种的多样性。在 gepjs 中,突变也具有同样的作用。

让基因进行突变只需执行 mutateupdateComputeTree 方法即可,它将按照环境设置的突变率进行连续突变。

// 执行突变
myGene.mutate();
// 更新基因的计算树,这是必须的
myGene.updateComputeTree();
// 重新表达
const value = myGene.getValue({ x: 1 });
conso.log(value);   // -0.2723414689118316

请注意,基因突变执行完成后,如需重新表达,那么请务必执行 updateComputeTree 方法来更新计算树。

提示

在真实场景中,为了能优化得到最优解,基因往往是对批量数据进行表达求值,所以在基因序列确定之初就完成 计算树 的创建非常关键,计算树 会被基因缓存起来,在新的数据被输入后可以快速求值,这有助于加快计算。基因完成突变后,需手动调用 updateComputeTree 才能触发 计算树 更新。

至此,我们就完成了从创建基因、表达基因以及基因突变的最简单的流程。

# 可视化示例

参考下列示例,了解 gepjs 的能力。

回归问题:

分类问题: