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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。