跳转到主要内容

用于科学机器学习、不确定性量化(UQ)和人工智能的约束非线性优化

项目描述

关于Mystic

Mystic框架提供了一组优化算法和工具,使用户能够更稳健(且更容易)地解决困难的优化问题。Mystic中包含的所有优化算法都提供了拟合层的流程,而不仅仅是作为函数调用的算法访问。Mystic允许用户在拟合过程运行时对优化进行细致的监控和引导。优化器可以使用向前推进一个迭代,或者使用运行到完成。用户可以自定义优化器的停止条件,其中可以使用复合条件和用户提供的条件。优化器可以保存状态,可以动态重新配置,并且可以从保存的求解器或结果文件中重新启动。所有求解器也可以利用并行计算,无论是在每个迭代内还是在求解器集合中。

在可能的情况下,mystic 优化器共享一个公共接口,因此用户无需编写任何新代码即可轻松替换。所有的 mystic 求解器都遵循求解器 API,因此也有配置和启动优化作业的公共方法调用。有关更多详细信息,请参阅 mystic.abstract_solver。该 API 还使得将第三方求解器绑定到 mystic 框架变得非常容易。

mystic 中的优化算法可以接受参数约束,作为“软约束”(即“惩罚”,对违反约束的解空间区域进行“惩罚”),或作为“硬约束”(即“约束”,将求解器约束在只有遵守约束的空间区域中搜索),或两者兼具。mystic 提供了大量的约束选项,包括概率和降维约束。通过提供强大的接口,使用户能够轻松配置和控制求解器,mystic 大大降低了解决困难优化问题的障碍。

mystic 中的采样、插值和统计都是设计来无缝耦合约束优化,以促进科学机器学习、不确定性量化、自适应采样、非线性插值和人工智能。mystic 可以使用 mystic.symbolic 中的方法将等式和不等式系统转换为硬约束或软约束。使用 mystic.constraints.vectorize,可以将约束转换为核变换,用于机器学习。同样,mystic 提供了使用 mystic.math.interpolate 在不规则网格上准确生成仿真器的工具,其中包括求解梯度和 Hessian 的方法。mystic.samplers 使用优化器驱动自适应采样,以响应表面的第一和第二阶临界点为目标,从而产生高度信息化的训练数据集,并确保仿真器的准确性。mystic.math.discrete 定义了约束离散概率测度,可用于约束统计优化和学习。

mystic 正在积极开发中,因此任何用户反馈、错误报告、评论或建议都备受欢迎。问题列表位于 https://github.com/uqfoundation/mystic/issues,遗留列表维护在 https://uqfoundation.github.io/project/mystic/query

主要功能

mystic 提供了一系列可配置、可控制的求解器,具有以下特点:

  • 一个公共接口

  • 一个控制处理器,具有暂停、继续、退出和回调功能

  • 轻松选择初始种群条件:猜测、随机等

  • 轻松进行检查点和从日志或保存状态重启

  • 利用并行和分布式计算的能力

  • 应用一组日志和/或详细监视器的能力

  • 配置求解器无关的终止条件的能力

  • 施加自定义和用户定义的惩罚和约束的能力

为了快速启动,mystic 还提供了基础设施,以便:

  • 轻松生成模型(包含几个标准测试模型)

  • 从模型配置和自动生成成本函数

  • 配置求解器集合以执行特定任务

当前版本

mystic 的最新发布版本可在以下位置获取:

https://pypi.ac.cn/project/mystic

mystic 在 3-clause BSD 许可下分发。

开发版本

您可以在以下位置获取带有所有最新功能的最新开发版本:

https://github.com/uqfoundation

如果您有新的贡献,请提交一个pull请求。

安装

mystic 可以使用 pip 安装

$ pip install mystic

为了包含可选的科学Python支持,使用 scipy,安装

$ pip install mystic[math]

为了包含可选的绘图支持,使用 matplotlib,安装

$ pip install mystic[plotting]

为了包含可选的并行计算支持,使用 pathos,安装

$ pip install mystic[parallel]

需求

mystic 需要

  • python(或 pypy),>=3.8

  • setuptools>=42

  • cython>=0.29.30

  • numpy>=1.0

  • sympy>=0.6.7

  • mpmath>=0.19

  • dill>=0.3.9

  • klepto>=0.2.6

可选需求

  • matplotlib>=0.91

  • scipy>=0.6.0

  • pathos>=0.3.3

  • pyina>=0.3.0

更多信息

可能开始使用最好的方式是查看 http://mystic.rtfd.io 上的文档。还可以查看 mystic.tests,其中包含演示 mystic 框架许多功能的脚本集。您可以使用 python -m mystic.tests 运行测试套件。mystic 中安装了几个绘图脚本,其中主要是 mystic_log_reader(也可以通过 python -m mystic 使用)和 mystic_model_plotter(也可以通过 python -m mystic.models 使用)。mystic 还包含几个其他绘图脚本,详细说明见文档其他部分。有关使用 mystic.models 中提供的示例模型配置和启动优化作业的基本用例,请参阅 https://github.com/uqfoundation/mystic/tree/master/examples。许多示例都是标准的优化测试问题。约束和惩罚的使用在 https://github.com/uqfoundation/mystic/tree/master/examples2 中详细说明,而利用集成求解器、机器学习、不确定性量化以及降维的高级功能在 https://github.com/uqfoundation/mystic/tree/master/examples3 中找到。在 https://github.com/uqfoundation/mystic/tree/master/examples4 中的脚本展示了如何利用 pathos 进行并行计算,以及演示了一些自动分区方案。mystic 有能力在乘积测度空间中工作,而在 https://github.com/uqfoundation/mystic/tree/master/examples5 中的脚本展示了如何以低级别处理乘积测度。源代码通常有很好的文档,因此可以通过检查代码本身来解决进一步的问题。请随时在github上提交工单,或在stackoverflow上提问(@Mike McKerns)。如果您想分享如何在工作中使用 mystic,请发送电子邮件(至 mmckerns at uqfoundation dot org)。

构建新模型的说明在 mystic.models.abstract_model 中。mystic 为两种类型的模型提供基类

  • AbstractFunction [对给定的评估点 x 评估 f(x)]

  • AbstractModel [为给定的系数 p 生成 f(x,p)]

mystic 还提供了一些便利函数来帮助您即时构建模型实例和成本函数实例。有关更多信息,请参阅 mystic.forward_model。然而,在构建自己的模型或成本函数时,没有必要使用基类或模型构建器,因为任何符合基本 AbstractFunction 接口的 cost = f(x) 的标准 Python 函数都可以使用。

所有 mystic 求解器都高度可配置,并提供了一组强大的方法来帮助您针对特定的优化问题定制求解器。对于每个求解器,还提供了一个最小化(scipy.optimize)接口,供那些希望将求解器配置和启动作为单个函数调用的用户使用。有关更多信息,请参阅求解器 API 的 mystic.abstract_solver,以及每个单独求解器的最小功能接口。

mystic 允许求解器在用户提供了(串行)Python map 函数的替换时使用并行计算。 mystic 包含在 mystic.python_map 中的示例 map,它反映了内置 Python map 的行为,以及在 mystic.pools 中的 pool,它提供了使用 pathos(即 multiprocessing)接口的 map 函数。 mystic 求解器旨在利用 pathos 包提供的分布式和并行工具。有关更多信息,请参阅 mystic.abstract_map_solvermystic.abstract_ensemble_solver 以及 http://pathos.rtfd.io 上的 pathos 文档。

重要类和函数在此处可以找到

  • mystic.solvers [求解器优化算法]

  • mystic.termination [求解器终止条件]

  • mystic.strategy [求解器种群突变策略]

  • mystic.monitors [优化监控器]

  • mystic.symbolic [约束中的符号数学]

  • mystic.constraints [约束函数]

  • mystic.penalty [惩罚函数]

  • mystic.collapse [检查维度坍缩]

  • mystic.coupler [函数耦合的装饰器]

  • mystic.pools [并行工作池接口]

  • mystic.munge [文件读取器和写入器]

  • mystic.scripts [模型和收敛绘图]

  • mystic.samplers [优化器引导采样]

  • mystic.support [超立方体测量支持绘图]

  • mystic.forward_model [成本函数生成器]

  • mystic.tools [约束、包装器和其他工具]

  • mystic.cache [结果缓存和归档]

  • mystic.models [模型和测试函数]

  • mystic.math [数学函数和工具]

mystic.math 中的重要函数在此处可以找到

  • mystic.math.Distribution [一个采样分布对象]

  • mystic.math.legacydata [用于旧数据观测的类]

  • mystic.math.discrete [用于离散测量的类]

  • mystic.math.measures [支持离散测量的工具]

  • mystic.math.approx [测量等价性的工具]

  • mystic.math.grid [生成网格上点的工具]

  • mystic.math.distance [测量距离和范数的工具]

  • mystic.math.poly [多项式函数的工具]

  • mystic.math.samples [与采样相关的工具]

  • mystic.math.integrate [与积分相关的工具]

  • mystic.math.interpolate [与插值相关的工具]

  • mystic.math.stats [与分布相关的工具]

求解器、采样器和模型API定义在此处

  • mystic.abstract_sampler [采样器API定义]

  • mystic.abstract_solver [求解器API定义]

  • mystic.abstract_map_solver [并行求解器API]

  • mystic.abstract_ensemble_solver [集成求解器API]

  • mystic.models.abstract_model [模型API定义]

mystic 还提供了一些用于可视化模型、收敛和超立方体支持的便捷脚本。这些脚本安装到用户的 $PATH 目录中,因此可以从任何地方运行

  • mystic_log_reader [参数和成本收敛]

  • mystic_log_converter [日志文件格式转换器]

  • mystic_collapse_plotter [收敛和维度坍缩]

  • mystic_model_plotter [模型表面和求解器轨迹]

  • support_convergence [度量收敛的图表]

  • support_hypercube [超立方体上的参数支持]

  • support_hypercube_measures [超立方体上的度量支持]

  • support_hypercube_scenario [超立方体上的场景支持]

将任何上述脚本的参数指定为 --help 将会打印出指导性帮助信息。

引用

如果您使用 mystic 进行研究并导致发表,我们要求您在您的出版物中提及 mystic 的使用,如下所示

M.M. McKerns, L. Strand, T. Sullivan, A. Fang, M.A.G. Aivazis,
"Building a framework for predictive science", Proceedings of
the 10th Python in Science Conference, 2011;
http://arxiv.org/pdf/1202.1056

Michael McKerns, Patrick Hung, and Michael Aivazis,
"mystic: highly-constrained non-convex optimization and UQ", 2009- ;
https://uqfoundation.github.io/project/mystic

有关更多信息,请参阅 https://uqfoundation.github.io/project/mystichttp://arxiv.org/pdf/1202.1056

项目详情


下载文件

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

源代码分发

mystic-0.4.3.tar.gz (588.6 kB 查看散列)

上传于 来源

构建分发

mystic-0.4.3-py3-none-any.whl (407.5 kB 查看哈希)

上传于 Python 3

由以下支持