用于创建遗传算法的简单、微型引擎。
项目描述
# 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 是一个用于创建用纯 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
查看哈希)
内置分布
tinyevolver-0.1-py2.py3-none-any.whl
(13.1 kB
查看哈希)
关
tinyevolver -0.1.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 1ff913364ccdef0777f9550c94136d516cb86aed8cdd043bf019beaf6f5a9126 |
|
| MD5 | efe4d044d7bfe43a549fa04eebafa541 |
|
| 布莱克2-256 | 9bf99b163f2f7f07f00c1e96e3bb5800642c483b0178bc9987a41d602ded04dd |
关
tinyevolver -0.1-py2.py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 2574d4005a5ab437ed51b52040b00cc08148bc5958f6054c1b54640cbfd3e24f |
|
| MD5 | 1922966d38d90ad9a706117e7b14ff45 |
|
| 布莱克2-256 | 97fc7fca9830d824987912fb1a6a1de674eed4ae753a7a1725a80f3c6447bc26 |