constrOptim
位于 stats
包(package)。 说明
使用自适应障碍算法最小化受线性不等式约束的函数。
用法
constrOptim(theta, f, grad, ui, ci, mu = 1e-04, control = list(),
method = if(is.null(grad)) "Nelder-Mead" else "BFGS",
outer.iterations = 100, outer.eps = 1e-05, ...,
hessian = FALSE)
参数
theta |
数字(向量)起始值(长度为 ):必须位于可行区域内。 |
f |
函数最小化(见下文)。 |
grad |
|
ui |
约束矩阵( ),见下文。 |
ci |
长度为 的约束向量(见下文)。 |
mu |
(小)调整参数。 |
control, method, hessian |
传递给 |
outer.iterations |
障碍算法的迭代。 |
outer.eps |
非负数;障碍算法的相对收敛容差。 |
... |
要传递给 |
细节
可行区域由 ui %*% theta - ci >= 0
定义。起始值必须在可行区域的内部,但最小值可能在边界上。
添加对数屏障来强制执行约束,然后调用optim
。选择障碍函数以使目标函数在每次外迭代时应减小。可行区域内部的最小值通常很快就能找到,但边界上的最小值可能需要大量的外部迭代。
调整参数mu
乘以势垒项。它的精确值通常相对不重要。随着mu
的增加,增强目标函数变得更接近原始目标函数,但在可行区域边界附近也不太平滑。
任何允许目标函数取无限值的optim
方法都可以使用(目前除了"L-BFGS-B"之外的所有方法)。
目标函数 f
将要进行最小化的参数向量作为第一个参数。它应该返回一个标量结果。可选参数 ...
将传递给 optim
,然后(如果 optim
未使用)传递给 f
。与 optim
一样,默认值是最小化,但可以通过将 control$fnscale
设置为负值来执行最大化。
除了 method = "Nelder-Mead"
之外,必须提供梯度函数 grad
。它应该采用与 f
匹配的参数并返回包含梯度的向量。
值
至于 optim
,但有两个额外的组件: barrier.value
给出最佳势垒函数的值, outer.iterations
给出外部迭代的次数(调用 optim
)。 counts
组件包含所有 optim()$counts
的总和。
例子
## from optim
fr <- function(x) { ## Rosenbrock Banana function
x1 <- x[1]
x2 <- x[2]
100 * (x2 - x1 * x1)^2 + (1 - x1)^2
}
grr <- function(x) { ## Gradient of 'fr'
x1 <- x[1]
x2 <- x[2]
c(-400 * x1 * (x2 - x1 * x1) - 2 * (1 - x1),
200 * (x2 - x1 * x1))
}
optim(c(-1.2,1), fr, grr)
#Box-constraint, optimum on the boundary
constrOptim(c(-1.2,0.9), fr, grr, ui = rbind(c(-1,0), c(0,-1)), ci = c(-1,-1))
# x <= 0.9, y - x > 0.1
constrOptim(c(.5,0), fr, grr, ui = rbind(c(-1,0), c(1,-1)), ci = c(-0.9,0.1))
## Solves linear and quadratic programming problems
## but needs a feasible starting value
#
# from example(solve.QP) in 'quadprog'
# no derivative
fQP <- function(b) {-sum(c(0,5,0)*b)+0.5*sum(b*b)}
Amat <- matrix(c(-4,-3,0,2,1,0,0,-2,1), 3, 3)
bvec <- c(-8, 2, 0)
constrOptim(c(2,-1,-1), fQP, NULL, ui = t(Amat), ci = bvec)
# derivative
gQP <- function(b) {-c(0, 5, 0) + b}
constrOptim(c(2,-1,-1), fQP, gQP, ui = t(Amat), ci = bvec)
## Now with maximisation instead of minimisation
hQP <- function(b) {sum(c(0,5,0)*b)-0.5*sum(b*b)}
constrOptim(c(2,-1,-1), hQP, NULL, ui = t(Amat), ci = bvec,
control = list(fnscale = -1))
参考
K. Lange Numerical Analysis for Statisticians. Springer 2001, p185ff
也可以看看
optim
,尤其是 method = "L-BFGS-B"
,它进行框约束优化。
相关用法
- R confint 模型参数的置信区间
- R contrast (可能稀疏)对比矩阵
- R contrasts 获取和设置对比矩阵
- R convolve 通过 FFT 进行序列卷积
- R cor 相关性、方差和协方差(矩阵)
- R cor.test 配对样本之间的关联/相关性测试
- R complete.cases 查找完整案例
- R cov.wt 加权协方差矩阵
- R cophenetic 层次聚类的共表距离
- R coef 提取模型系数
- R cancor 典型相关性
- R cutree 将树切割成数据组
- R cpgram 绘制累积周期图
- R chisq.test 计数数据的皮尔逊卡方检验
- R checkMFClasses 检查传递给模型框架的变量类型的函数
- R cmdscale 经典(公制)多维标度
- R case+variable.names 拟合模型的案例和变量名称
- R stlmethods STL 对象的方法
- R medpolish 矩阵的中值波兰(稳健双向分解)
- R naprint 调整缺失值
- R summary.nls 总结非线性最小二乘模型拟合
- R summary.manova 多元方差分析的汇总方法
- R formula 模型公式
- R nls.control 控制 nls 中的迭代
- R aggregate 计算数据子集的汇总统计
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Linearly Constrained Optimization。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。