维护者 | Florian Schwendinger,Hans W. Borchers |
联系方式 | R-optimization at mailbox.org |
版本 | 2024-03-17 |
网址 | https://CRAN.R-project.org/view=Optimization |
源代码 | https://github.com/cran-task-views/Optimization/ |
贡献 | 欢迎对本任务视图提出建议和改进,可以通过 GitHub 上的问题或拉取请求,或通过电子邮件发送给维护者地址。有关更多详细信息,请参阅 贡献指南。 |
引用 | Florian Schwendinger, Hans W. Borchers (2024). CRAN 任务视图:优化和数学规划。版本 2024-03-17。网址 https://CRAN.R-project.org/view=Optimization。 |
安装 | 可以使用 ctv 包自动安装本任务视图中的包。例如,ctv::install.views("Optimization", coreOnly = TRUE) 安装所有核心包,或 ctv::update.views("Optimization") 安装所有尚未安装和更新的包。有关更多详细信息,请参阅 CRAN 任务视图计划。 |
本 CRAN 任务视图包含一个提供解决优化问题的工具的包列表。尽管统计学中的每个回归模型都解决了一个优化问题,但它们不属于本视图。如果您正在寻找回归方法,以下视图也将包含有用的起点:机器学习,计量经济学,稳健 包根据以下部分进行分类。另请参阅结尾处的“相关链接”和“其他资源”部分。
内容
许多包提供了针对本任务视图末尾列出的多个主题的功能。例如,混合整数线性规划求解器通常提供标准线性规划例程,如单纯形算法。因此,在每个包描述之后,一个缩写列表描述了优化器的典型特征(即可以解决的问题)。方括号中给出的缩写的全名可以在本任务视图末尾的 **按主题分类** 下找到。
如果您认为列表中缺少某些软件包,请通过电子邮件联系维护者,或在上面链接的 GitHub 存储库中提交问题或拉取请求。
The optimx 包提供了一个对 Base R 中 optim()
函数的替换和扩展,它在一个语句中调用了 R 中的几个函数最小化代码。这些方法处理多个或许多参数的平滑函数,可能存在盒约束。此包中的函数 optimr()
使用相同的语法扩展了 optim()
函数,但具有更多“方法”选择。函数 opm()
将多个求解器应用于选定的优化任务,并返回一个结果数据框,以便于比较。
R 优化基础设施 (ROI) 包提供了一个框架,用于处理 R 中的优化问题。它使用面向对象的方法来定义和解决来自不同问题类别(例如,线性、二次、非线性规划问题)的各种优化任务。这使得优化对用户来说是透明的,因为相应的流程是从底层求解器中抽象出来的。这种方法允许在求解器之间轻松切换,从而增强了可比性。有关更多信息,请参阅 ROI 主页。
The CVXR 包提供了一种面向对象的建模语言,用于约束凸规划 (DCP)。它允许用户以自然的方式遵循数学约定和 DCP 规则来制定凸优化问题。该系统分析问题,验证其凸性,将其转换为规范形式,并将其交给适当的求解器(例如 ECOS 或 SCS)以获得解决方案。(CVXR 来源于斯坦福大学开发的 MATLAB 工具箱 CVX,参见 CVXR 主页。)
stats 包提供了一些通用的优化例程。对于一维无约束函数优化,存在 optimize()
,它在一个区间内搜索最小值或最大值。函数 optim()
提供了 Broyden-Fletcher-Goldfarb-Shanno (BFGS) 方法、有界 BFGS、共轭梯度 (CG)、Nelder-Mead 和模拟退火 (SANN) 优化方法的实现。它利用提供的梯度,以实现更快的收敛。通常它用于无约束优化,但包括一个用于盒约束优化的选项。
此外,对于在满足线性不等式约束的情况下最小化函数,stats 包含例程 constrOptim()
。然后是 nlm
,它用于解决非线性无约束最小化问题。nlminb()
使用 PORT 例程提供盒约束优化。[RGA, QN]
ucminf()
的接口设计用于与 optim()
轻松互换。[QN]n1qn1
优化过程的 R 端口,一种无约束的拟牛顿 BFGS 方法。donlp2()
,一个 DONLP2 求解器的包装器,提供了对平滑非线性函数和约束的最小化。DONLP2 可用于任何类型的研究目的,否则需要许可。[GO, NLP]sumt()
,用于通过序列无约束最小化技术 (SUMT) 解决约束优化问题。spg()
,提供了一种谱投影梯度方法,用于对具有简单约束的大规模优化问题进行优化。它接受非线性目标函数以及基本约束作为参数。bobyqa()
、newuoa()
和 uobyqa()
允许通过信赖域方法最小化多个变量的函数,该方法通过插值形成二次模型。bobyqa()
另外允许对参数进行箱约束(边界)。[DF]nlrq()
, crq()
)。它在函数 rq()
的 R 代码中提供了 L1 回归的接口。[SPLP, LP, IPM]solve.QP()
求解具有线性等式和不等式约束的二次规划问题。(矩阵必须是正定的。)quadprogXT 通过绝对值约束和目标函数中的绝对值扩展了这一点。[QP]ipop
,用于使用内点法求解二次规划问题。(矩阵可以是半正定的。)[IPM, QP]函数 solve.qr()
(或 qr.solve()
)处理超定和欠定线性方程组,如果可能,返回最小二乘解。而包 stats 提供 nls()
来确定非线性模型参数的最小二乘估计。 nls2 通过蛮力或网格搜索增强了函数 nls()
,以避免依赖于起始参数或陷入局部解。
nlfb
和 nlxb
最终旨在取代 Base R 中的 ‘nls()’ 函数,通过应用 Marquardt 过程的变体来解决非线性最小二乘问题,并具有边界约束,以及可选地将雅可比矩阵描述为 R 函数。nls.lm()
,用于通过 Levenberg-Marquardt 算法的修改来解决非线性最小二乘问题,并支持 MINPACK 中的下限和上限参数约束。lm()
的公式语法。DEoptim()
函数的 C++ 实现(使用 Rcpp)。gafit()
使用遗传算法方法来找到一维函数的最小值。rbga()
,这是用于多维函数优化的遗传算法的实现。genoud()
,这是一个能够通过将进化算法与基于导数(拟牛顿)的方法相结合来解决复杂函数最小化/最大化问题的例程。ppso
包中找到。SCEoptim
函数,用于随机复杂进化 (SCE) 优化,一种进化算法,结合了单纯形方法。cmaes
,在 adagio 中作为 pureCMAES
,以及在 rCMA 中作为 cmaOptimDP
,连接 Hansen 自己的 Java 实现。本节概述了开源和商业优化器。可以通过方括号中的缩写查看特定包或函数可以解决哪种类型的数学规划问题。有关 按主题分类,请参阅此任务视图末尾的列表。
solveLP()
解决线性规划问题(求解器基于 lpSolve),并可以读取 MPS 格式的模型文件。[LP]simplex()
的例程,它实现了用于(相对较小的)线性规划问题的两阶段单纯形法。[LP]lpcdd()
,用于使用 GNU 多精度 (GMP) 库以精确算术解决线性规划。[LP]lp()
,通过调用免费提供的求解器 lp_solve 来解决 LP 和 MILP。该求解器基于修正单纯形法和分支定界 (B&B) 方法。它支持半连续变量和特殊有序集 (SOS)。此外,lp.assign()
和 lp.transport()
分别用于解决分配问题和运输问题。此外,还有包 lpSolveAPI,它为 lp_solve 的低级 API 例程提供了 R 接口(另请参见 R-Forge 上的项目 lpsolve)。lpSolveAPI 支持从 lp 和 MPS 格式的文件中读取线性规划。[BP, IP, LP, MILP, SPLP]Rglpk_solve_LP()
,用于使用 GLPK 解决 MILP。这两个包都提供了使用 MPS 格式制定的模型的可能性。[BP, IP, IPM, LP, MILP]Rsymphony_solve_LP()
,它连接了用于混合整数线性规划的 SYMPHONY 求解器。(SYMPHONY 是 运筹学计算基础设施 (COIN-OR) 项目的一部分。)Bioconductor 中的包 lpsymphony
提供了类似的 SYMPHONY 接口,更容易安装。[LP, IP, MILP]snomadr()
函数访问,主要用于黑盒函数的约束优化。[MILP]HiGHS
求解器的 R 接口。HiGHS 目前是最好的开源混合整数线性规划求解器之一。此外,它可以用于解决二次优化问题(没有混合整数约束)。[MILP, QP]本节概述了商业求解器的接口。通常,相应的库需要单独安装。
一些其他商业公司,例如 “LocalSolver”、“Artelys Knitro” 或 “FICO Xpress Optimization”,具有在安装软件时安装的 R 接口。试用许可证可用,有关更多信息,请访问相应的网站。
solve_LSAP()
函数允许用户使用匈牙利算法的有效 C 实现来解决线性求和分配问题 (LSAP)。包 TreeDist 中的 LAPJV()
函数实现了 Jonker-Volgenant 算法,可以更快地解决线性求和分配问题 (LSAP)。[SPLP]solve_TSP()
通过几种启发式方法解决 TSP。此外,它还提供了一个与 Concorde TSP 求解器 的接口,该求解器需要单独下载。[SPLP]caRamel
是一个多目标优化器,它应用了多目标进化退火-单纯形 (MEAS) 方法和非支配排序遗传算法 (NGSA-II) 的组合;它最初是为水文模型的校准而开发的。lab.optimize()
,它是用于优化一些二元图统计量的启发式例程系列的前端。[GRAPH]以下是按主题对包进行概述的尝试。主题的完整名称以及相应的 MSC 2010 代码(如果可用)在括号中给出。
optim()
),gsloptim()
),gsl,lbfgs,lbfgsb3c,nloptr,optimParallel,ucminf,n1qn1