遗传优化与符号回归软件包
bingo-nasa的Python项目详细描述
一般
bingo是一个用于执行符号回归的开源包,尽管它 可作为通用进化优化包使用。
主要功能
- 集成的局部优化策略
- 用mpi4py实现的并行岛屿演化策略
- 适应度预测因子的共同进化
注
此时,api仍处于不断变化的状态。当前版本有 更稳定的API,但仍然缺少旧版本的一些功能。
开始
依赖关系
bingo用于python 3.x。 在python中,数据科学中比较常见的依赖关系很少:
- 努比
- scipy
- matplotlib
- MPI4PY(如果要运行并行实现)
- pytest,pytest mock(如果要运行测试套件)
包含一个requirements.txt
文件,用于轻松安装
pip
或conda
使用PIP安装:
pip install -r requirements.txt
使用conda安装:
conda install --yes --file requirements.txt
宾格普
一个BIGO的部分是用C++编写的,以提高性能。为了 利用此功能,必须编译代码。见 有关详细信息,请参阅bingocpp子模块中的文档。
注意宾果游戏可以不用宾果的部分,它只会有更低的 性能。
如果bingocpp已正确安装,则应运行以下命令 没有错误。
python -c "import bingocpp"
bingocpp安装过程中的一个常见错误是它必须使用 运行bingo脚本的python的同一版本。最简单的方法 确保一致的python版本控制是在python 3中构建和运行 虚拟环境。
文档
sphynx用于自动生成bingo的api文档。这个
文档的最新版本可以在存储库中找到:
doc/_build/html/index.html
运行测试
一个扩展的单元测试套件包括宾果,以确保正确 安装。可以使用tests目录中的pytest运行测试,例如, 通过运行:
pytest tests
从存储库的根目录。
用法示例
除了这里显示的示例之外,在宾果游戏中开始的最佳地方 是通过浏览示例目录来实现的。它包含几个脚本和 笔记本电脑。
一个简单的bingo进化分析:最大值问题
本例将介绍设置和运行宾果游戏所需的一般步骤
分析。这里描述的示例问题是一个最大值问题。在
一个群体中最大问题的个体是由一个带有
0或1值的列表,例如[0,1,1,0,1]
。优化的目标
是一个包含所有1的最优列表。
这个例子是脚本,可以在这里找到
定义染色体生成器
宾果的内置多值染色体
在这里使用。这些人
在名为
values
的列表属性中包含它们的遗传信息。一
染色体生成器用于生成群体成员。这个
多值染色体生成器
通过填充
给定输入函数的indivudual的值
。
importnumpyasnpfrombingo.Base.MultipleValuesimportMultipleValueChromosomeGeneratornp.random.seed(0)# seeded for reproducible resultsdefgenerate_0_or_1():returnnp.random.choice([0,1])generator=MultipleValueChromosomeGenerator(generate_0_or_1,values_per_chromosome=16)
定义进化算法
进化算法在宾果游戏中有三个阶段:变化、评估和 选择。变异阶段负责产生 群体,通常通过一些突变和交叉的组合。在 这个例子使用了varor,它通过突变或 交叉(不要两者都有)。
frombingo.Base.MultipleValuesimportSinglePointCrossover,SinglePointMutationfrombingo.Base.VarOrimportVarOrcrossover=SinglePointCrossover()mutation=SinglePointMutation(generate_0_or_1)variation_phase=VarOr(crossover,mutation,crossover_probability=0.4,mutation_probability=0.4)
评估阶段负责评估新会员的健康状况
一个群体。它依赖于fitnessfunction类的定义。
宾果分析的目标是最小化适应度,所以适应度函数
应相应地构造。在一个最大问题中定义了适应度
作为个体中0的个数值
frombingo.Base.FitnessFunctionimportFitnessFunctionfrombingo.Base.EvaluationimportEvaluationclassOneMaxFitnessFunction(FitnessFunction):"""Callable class to calculate fitness"""def__call__(self,individual):returnindividual.values.count(0)fitness=OneMaxFitnessFunction()evaluation_phase=Evaluation(fitness)
选择阶段负责选择人口中的哪些成员 进入下一代。公共锦标赛的实现 这里使用选择算法。
frombingo.Base.TournamentSelectionimportTournamentselection_phase=Tournament(tournament_size=2)
基于这些阶段,可以制定一个进化算法。
frombingo.Base.EvolutionaryAlgorithmimportEvolutionaryAlgorithmev_alg=EvolutionaryAlgorithm(variation_phase,evaluation_phase,selection_phase)
创建孤岛并运行分析
孤岛是宾果进化分析的基本单位。它是 负责生成和进化种群(使用生成器和 进化算法)。
pip install -r requirements.txt0
pip install -r requirements.txt1
这个岛可以通过它的execute\u generational\u步骤直接进化
成员函数。在这种情况下,种群进化50代
pip install -r requirements.txt2
pip install -r requirements.txt3
贡献
- 分叉(https://github.com/nasa/bingo/fork" rel="nofollow">https://github.com/nasa/bingo/fork)
- 创建功能分支(
git checkout-b feature/foobar
) - 提交更改(
git commit-am'add some foobar'
) - 推到分支(
git push origin feature/foobar
) - 创建新的拉取请求
版本控制
我们使用semver进行版本控制。对于可用的版本, 请参阅此存储库上的标记
作者
- 杰弗里博马里托
- 凯瑟琳·埃萨姆
- 伊森亚当斯
- 泰勒·汤森
- 戴安娜·维拉
许可证
注意事项
版权所有2018美国政府 国家航空航天局。没有版权是cl瞄准 美国法典第17编。保留所有其他权利。
bingo mini应用程序框架是根据apache许可证2.0版授权的。 (以下简称"许可证");除非符合 许可证。你可以在 [http://www.apache.org/licenses/license-2.0]。
除非适用法律要求或书面同意,否则软件将被分发 根据许可证,是按"原样"分发的,没有保证或 任何形式的条件,无论是明示的还是默示的。查看许可证 管理许可下的权限和限制的特定语言。