線形不等式制約付きの最適化関数 constrOptim
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
COLOR(magenta){SIZE(15){線形不等式制約付きの最適化関数 co...
~
~
constrOptim 関数は adaptive barrier アルゴリズム(制約領域...
-COLOR(magenta){書式} (method オプションの既定値の与え方...
constrOptim(theta, f, grad, ui, ci, mu = 1e-04, cont...
method = if(is.null(grad)) "Nelder-Mead"...
outer.iterations = 100, outer.eps = 1e-0...
-COLOR(magenta){引数}
--COLOR(red){theta} 初期値。制約式を満たす範囲内にとる必...
--COLOR(red){f} 最小化すべき関数
--COLOR(red){grad} f のグラディエント関数
--COLOR(red){ui} 制約(以下を参照)
--COLOR(red){ci} 制約(以下を参照)
--COLOR(red){mu} (小さい)調整用パラメータ
--COLOR(red){control} optim() に引き渡されるパラメータ
--COLOR(red){method} optim() に引き渡されるパラメータ
--COLOR(red){outer.iterations} barrier アルゴリズムの繰返...
--COLOR(red){outer.eps} barrier アルゴリズムの相対的収束...
--COLOR(red){...} optim に引き渡されるその他のパラメータ
-COLOR(magenta){詳細}
--制約範囲は COLOR(red){ui %*% theta - ci >= 0} で定義さ...
--制約条件を強調するため対数的なバリヤが加えられ、それか...
--調整用のパラメータ COLOR(red){mu} はバリヤ項に掛けられ...
--目的関数が無限大値を取ることを許す任意の COLOR(red){opt...
-- optim と同様、既定では最小化を行なう。最大化するにはパ...
-COLOR(magenta){返り値} COLOR(red){optim} と同じだが、追...
-COLOR(magenta){参考文献} K. Lange. Numerical Analysis fo...
-COLOR(magenta){例}
--COLOR(magenta){Rosenbrock の Banana 関数}
---制約無しの最小化
> fr <- function(x) { ## Rosenbrock Banana function
x1 <- x[1]
x2 <- x[2]
100 * (x2 - x1 * x1)^2 + (1 - x1)^2
}
> grr <- function(x) { ## 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) # 制約無しの最小化
$par # 真の解は 1,1
[1] 1.000260 1.000506
$value # 真の最小値は 0
[1] 8.825241e-08
$counts
function gradient
195 NA
$convergence
[1] 0
$message
NULL
---(無限)矩形型の制約 COLOR(red){x1<=1, x2<=1}、最適値は...
> constrOptim(c(-1.2,0.9), fr, grr, ui=rbind(c(-1,0),c(...
$par # 最小値を与えるパラメータ値(...
[1] 0.9999761 0.9999522 # ほぼ境界線上
$value # 最小値
[1] 5.708627e-10 # 不思議なことに制約無しの場合...
$counts # 関数評価回数
function gradient
6 1
$convergence # 完全な収束
[1] 0
$message
NULL
$outer.iterations # 内部での optim 関数の呼出し...
[1] 14
$barrier.value # 収束点でのバリヤ関数の値(零...
[1] -0.0001999198
---領域 COLOR(red){x1<=0.9, x1-x2>=0.1} での最適化(大局解...
> constrOptim(c(.5,0), fr, grr, ui=rbind(c(-1,0),c(1,-1...
$par
[1] 0.8891335 0.7891335 # ほぼ境界上?
$value
[1] 0.01249441
$counts
function gradient
18 1
$convergence
[1] 0
$message
NULL
$outer.iterations
[1] 5
$barrier.value
[1] -7.399944e-05
--COLOR(magenta){線形、2次計画法問題} 適切な初期値が必要...
---グラディエントを使わない。
> 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)
$par
[1] 0.4761374 1.0477253 2.0954507
$value
[1] -2.380952
$counts
function gradient
252 NA
$convergence
[1] 0
$message
NULL
$outer.iterations
[1] 5
$barrier.value
[1] -0.0006243786
---グラディエントを使うと
> gQP <- function(b) {-c(0,5,0)+b}
> constrOptim(c(2,-1,-1), fQP, gQP, ui=t(Amat), ci=bvec)
$par
[1] 0.4761908 1.0476188 2.0952376
$value
[1] -2.380952
$counts
function gradient # グラディエントを与えた分、呼出し回...
21 1
$convergence
[1] 0
$message
NULL
$outer.iterations
[1] 5
$barrier.value
[1] -0.0006243894
---最大化を行なう例
> 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))
$par
[1] 0.4763538 1.0477181 2.0954838
$value
[1] 2.380751
$counts
function gradient
300 NA
$convergence
[1] 0
$message
NULL
$outer.iterations
[1] 1
$barrier.value
[1] -0.001142111
終了行:
COLOR(magenta){SIZE(15){線形不等式制約付きの最適化関数 co...
~
~
constrOptim 関数は adaptive barrier アルゴリズム(制約領域...
-COLOR(magenta){書式} (method オプションの既定値の与え方...
constrOptim(theta, f, grad, ui, ci, mu = 1e-04, cont...
method = if(is.null(grad)) "Nelder-Mead"...
outer.iterations = 100, outer.eps = 1e-0...
-COLOR(magenta){引数}
--COLOR(red){theta} 初期値。制約式を満たす範囲内にとる必...
--COLOR(red){f} 最小化すべき関数
--COLOR(red){grad} f のグラディエント関数
--COLOR(red){ui} 制約(以下を参照)
--COLOR(red){ci} 制約(以下を参照)
--COLOR(red){mu} (小さい)調整用パラメータ
--COLOR(red){control} optim() に引き渡されるパラメータ
--COLOR(red){method} optim() に引き渡されるパラメータ
--COLOR(red){outer.iterations} barrier アルゴリズムの繰返...
--COLOR(red){outer.eps} barrier アルゴリズムの相対的収束...
--COLOR(red){...} optim に引き渡されるその他のパラメータ
-COLOR(magenta){詳細}
--制約範囲は COLOR(red){ui %*% theta - ci >= 0} で定義さ...
--制約条件を強調するため対数的なバリヤが加えられ、それか...
--調整用のパラメータ COLOR(red){mu} はバリヤ項に掛けられ...
--目的関数が無限大値を取ることを許す任意の COLOR(red){opt...
-- optim と同様、既定では最小化を行なう。最大化するにはパ...
-COLOR(magenta){返り値} COLOR(red){optim} と同じだが、追...
-COLOR(magenta){参考文献} K. Lange. Numerical Analysis fo...
-COLOR(magenta){例}
--COLOR(magenta){Rosenbrock の Banana 関数}
---制約無しの最小化
> fr <- function(x) { ## Rosenbrock Banana function
x1 <- x[1]
x2 <- x[2]
100 * (x2 - x1 * x1)^2 + (1 - x1)^2
}
> grr <- function(x) { ## 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) # 制約無しの最小化
$par # 真の解は 1,1
[1] 1.000260 1.000506
$value # 真の最小値は 0
[1] 8.825241e-08
$counts
function gradient
195 NA
$convergence
[1] 0
$message
NULL
---(無限)矩形型の制約 COLOR(red){x1<=1, x2<=1}、最適値は...
> constrOptim(c(-1.2,0.9), fr, grr, ui=rbind(c(-1,0),c(...
$par # 最小値を与えるパラメータ値(...
[1] 0.9999761 0.9999522 # ほぼ境界線上
$value # 最小値
[1] 5.708627e-10 # 不思議なことに制約無しの場合...
$counts # 関数評価回数
function gradient
6 1
$convergence # 完全な収束
[1] 0
$message
NULL
$outer.iterations # 内部での optim 関数の呼出し...
[1] 14
$barrier.value # 収束点でのバリヤ関数の値(零...
[1] -0.0001999198
---領域 COLOR(red){x1<=0.9, x1-x2>=0.1} での最適化(大局解...
> constrOptim(c(.5,0), fr, grr, ui=rbind(c(-1,0),c(1,-1...
$par
[1] 0.8891335 0.7891335 # ほぼ境界上?
$value
[1] 0.01249441
$counts
function gradient
18 1
$convergence
[1] 0
$message
NULL
$outer.iterations
[1] 5
$barrier.value
[1] -7.399944e-05
--COLOR(magenta){線形、2次計画法問題} 適切な初期値が必要...
---グラディエントを使わない。
> 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)
$par
[1] 0.4761374 1.0477253 2.0954507
$value
[1] -2.380952
$counts
function gradient
252 NA
$convergence
[1] 0
$message
NULL
$outer.iterations
[1] 5
$barrier.value
[1] -0.0006243786
---グラディエントを使うと
> gQP <- function(b) {-c(0,5,0)+b}
> constrOptim(c(2,-1,-1), fQP, gQP, ui=t(Amat), ci=bvec)
$par
[1] 0.4761908 1.0476188 2.0952376
$value
[1] -2.380952
$counts
function gradient # グラディエントを与えた分、呼出し回...
21 1
$convergence
[1] 0
$message
NULL
$outer.iterations
[1] 5
$barrier.value
[1] -0.0006243894
---最大化を行なう例
> 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))
$par
[1] 0.4763538 1.0477181 2.0954838
$value
[1] 2.380751
$counts
function gradient
300 NA
$convergence
[1] 0
$message
NULL
$outer.iterations
[1] 1
$barrier.value
[1] -0.001142111
ページ名: