Skip to main content

用于创建遗传算法的简单、微型引擎。

项目描述

# Python-TinyEvolver
### 一个用于创建遗传算法的简单微型引擎

TinyEvolver 是一个用于创建用纯 Python 编写的遗传算法的框架。它旨在让您使用原型系统以
尽可能少的步骤编写合理的进化算法,以从一个简单的示例中推断个体的生成、突变和交配。TinyEvolver 是为希望在模型和应用程序中使用遗传算法但不一定成为遗传/进化算法研究人员的科学家和研究人员开发的。您定义对您的问题真正独特的事物,其余的由 TinyEvolver 完成。








TinyEvolver 的源代码至少部分受到 [DEAP](https://github.com/deap/deap)
模块的启发,但我们已经做出有意识的决定,以使我们的模块更加简单和轻便。
但简单并不意味着没有特征——个体可以拥有混合类型的基因,种群
可以动态生成或从旧数据中生成,并且可以
通过多处理一次进化出许多种群。

## 安装
安装需要 Python 2.6+ 或 Python 3.4+。

要从源代码安装,只需克隆到一个目录,然后从该目录运行
```
python setup.py install
```
或者,如果您希望能够自己编辑已安装的代码:
```
python setup。 py开发
```

## 示例
```python
from tinyevolver import Population

prototype = [False for _ in range(100)]
p = Population(prototype=prototype,gene_bounds=None,fitness_func=sum)

p.populate()
p.evolve ()

print(p.best.genes)
```

## 提示
在 TinyEvolver 中构建进化算法的大部分工作是适应度函数 - 这是 CPU 完成大部分工作的地方。因此,您可以通过加速适应度函数来加速您的代码,无论是通过外包给 NumPy、编写 C 扩展,还是只是让您的函数更高效。由于 TinyEvolver 是用纯 Python 编写的,因此您也可以在 [PyPy](http://pypy.org/) 下运行它。

发现 TinyEvolver 功能的最佳方式是通过 iPython 交互式解释器 - 您可以输入 `Foo.`,然后按 `tab` 键查看 Foo 的可能补全,以及 `Foo?` 查看其签名和文档字符串。

## 文档
TinyEvolver 包含 3 个类:Individual、Population 和 IslandModel。Population 是 Individuals 的集合,IslandModel 是 Populations 的集合——这两个类都有用于演化的方法,所有变量都具有合理的默认值。

### 个人
用户不需要直接创建此类的实例。

属性:
- `individual.genes` 一维数组或基因的平面列表。
- `individual.fitness` 个人的健康状况 - 可能存在也可能不存在。
- 只有存在 `individual.fitness` 时,`individual.valid` 才为真。

方法:
- 个人有许多列表方法:您可以使用索引或切片获取/设置他们的基因,迭代它们,将它们放入 `len`,复制它们,并将它们放入任何其他只需要这些的 Python 函数中。

### Population
使用 `Population(prototype,gene_bounds,fitness_func)` 创建一个实例,其中
- `prototype` 是布尔值、整数和浮点数的平面列表,其类型个人的基因应该具有(即布尔值、浮点数或整数)。
- `gene_bounds` 要么是 None 要么是基因的下限/上限列表。
- `fitness_func` 获取一个平面的基因列表并返回一个代表个体健康度的数值。

属性:
- `population.best` 适应度最高的个体。
- `population.individuals` 人口中个人的完整列表。

方法:
- 种群有许多列表方法:您可以使用索引或切片获取/设置它们的个体,迭代它们,将它们放入 `len`,复制它们,或将它们放入仅需要这些的任何其他 Python 函数中。
- `population.populate([popsize, base_population])` 如果没有传递`base_population`,那么这将使用它的`prototype` 和`gene_bounds` 为种群生成所需数量的个体。如果一系列类似列表的对象作为 `base_population` 传递,则填充这些对象。
- `population.evolve([ngen, matepb, mutpb, indpb, scoping, tournsize, verbose])`这只能在类被填充后调用。它进化了“ngen”代,其中个体有“matepb”的交配概率,“mutpb”的变异概率。`indpb` 控制个体基因在突变时的可变性。从大小为“tournsize”的随机比赛中选出最适合的个体。如果 `scoping` 是正数,那么浮点数能够变异的数量会从一代到下一代减少 - 磨练参数。将 `verbose` 设置为 False 以避免打印演变的详细信息。

###
IslandModel 使用 `IslandModel(poplist)` 创建一个 IslandModel 实例,其中 `poplist` 是 `Population` 对象的列表。

属性:
- `islandmodel.best` 所有个体种群中最好的个体
- `islandmodel.islands` 包含类种群的列表

方法:
- `islandmodel.amalg_pop()` 这会将岛屿合并成一个大种群
- `islandmodel .select_pop()` 从各个岛屿中选择一个人口,其大小为单个岛屿的大小
- `islandmodel.evolve([ngen, matepb, mutpb, indpb, scoping, tournsize, verbose, mig_freq])`岛屿,每 `mig_freq` 代人在岛屿之间迁移。请参阅 `Population` 类的 `evolve` 方法。
- `islandmodel.multi_evolve([ngen, matepb, mutpb, indpb, scoping, tournsize, verbose, mig_freq])` 这与`evolve` 方法相同,但使用多处理。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

tinyevolver-0.1.tar.gz (8.6 kB 查看哈希

已上传 source

内置分布

tinyevolver-0.1-py2.py3-none-any.whl (13.1 kB 查看哈希

已上传 py2 py3