トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

BugTrack-donlp2の出力を読み解く/2

R備忘録 /状態空間モデリング/donlp2/その他のメモ

donlp2の出力を読み解く - 記事一覧

とりあえず「Rosenbrock Banana function」の結果を

  • 投稿者: みゅ
  • カテゴリ: なし
  • 優先度: 普通
  • 状態: 着手
  • 日時: 2008年07月25日 17時10分21秒

内容

「Rosenbrock Banana function」を題材に、出力結果を見てみる.結果あわせはRで.

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))
}
#  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))

上の制約条件は誤り

  • x<=0.9, x-y>0.1 が正解

ちなみに、不等式制約を入れて、収束しにくくしてある
入力パラメータはとりあえずあとで列挙するとして、とりあえず結果を見てみる
それも、順列が「1 2」になっていた、8回目のイタレーションを.

結果

            8-th iteration step
  scf= 1.0000e+000 psist= 0.0000e+000   psi= 0.0000e+000  upsi= 0.0000e+000
 fxst= 6.5000e+000    fx= 1.6483e-001
 x=
 6.4929e-002  4.0113e-002                   --- 
valid permutation of x

 1   2 
  • scf
    • 目的関数のスケーリング
  • psist
    • scaled penalty term at x_init
  • psi
    • scaled penalty term
  • upsi
    • unscaled l1-penalty term
  • fxst
    • 初期値の目的関数の値
    • 初期値は(0.5 0.0)
Rで確認
> fr(c(0.5, 0))
[1] 6.5
  • fx
    • いまのxでの目的関数の値
    • いまxのスケーリングを10にしているので評価する値は,裡隠闇
Rで確認
> fr(c(6.4929e-001,  4.0113e-001))
[1] 0.1648075
    • はもちろんいまのxの値
  • valid permutation of x
    • xの順番、入れ替わってる場合がある、なぜ??
 del= 6.00000e-002  b2n0= 2.86041e-001   b2n= 6.16332e+001   gfn= 6.16332e+001
  • del
    • bound for currently active constraints(δk)
  • b2n0
    • l2-norm of projected gradient
  • b2n
    • weighted norm of projected gradient
  • gfn
    • 微係数のノルム
    • このケースだとスケーリングが10なので以下の計算方法
Rで確認
> sum((10 * grr(c(6.4929e-001,  4.0113e-001)))^2)^0.5
[1] 61.61821

数式では

  • f(x) = f(10x')
  • [f(x)]' = [f(10x')]'
  • = 10 x [f(x)]'
  • = 10 x grr(x)
 values of restrictions
 (   1   1.4816e-001   1.0000e+001)  (   2   2.5071e-001   1.0000e+001)  
  • values of restrictions
    • list of values of binding constraints and gradient norm
Rで確認
> 6.4929e-001 -  4.0113e-001 - 0.1
[1] 0.14816
> - 6.4929e-001 + 0.9
[1] 0.25071
    • 微係数は制約条件の定義から明らか
 switch(i) {
 case 1:
   gradgi[1] = 1.e0;
   gradgi[2] = -1.e0;
 case 2:
   gradgi[1] = -1.e0;
   gradgi[2] = 0.e0;
 default:    
    • あーれー?たしか、これは出力のバグだったな・・・

コメント