• 検索結果がありません。

プログラミング メモ

N/A
N/A
Protected

Academic year: 2021

シェア "プログラミング メモ"

Copied!
22
0
0

読み込み中.... (全文を見る)

全文

(1)

プログラミング メモ

http://www.cs.miyazaki-u.ac.jp/~date/

伊達 章

宮崎大学 工学部 情報システム工学科

2017616

1 / 22

(2)

概要

1. データ構造とアルゴリズムについて

2. ともかく書く.わからなければ日本語で書く 3. おまじないについて.

4. 空関数を作る.

5. デバグ・テスト

2 / 22

(3)

目標

ともかく

動くコードを

自分一人で

作ることができるように!

3 / 22

(4)

データ構造とアルゴリズムについて

アルゴリズム

前々回の資料と,教科書 8.28.3 分かるまで何度も読む.

データ構造

fi(xi) xˆi(xi+1) を表現する2次元配列

4 / 22

(5)

データ構造

i= 0,· · · ,199, a = 0,1として,

xi · · · int x[i] 真の値

yi · · · double y[i] 観測データ

xˆi · · · int xmap[i] 推定値

fi(xi) · · · double f[i][a]

i番目の変数の値がxi =aのとき,そこに至る最適経 路の尤もらしさを保持.

xˆi(xi+1) · · · int xhat[i][a]

xi+1 =a のとき,xi が取るべき値を保持.

5 / 22

(6)

C言語 チュートリアル

(7)

とにかく書きはじめる!

1 # i n c l u d e < s t d i o . h > // おまじない 2 # i n c l u d e < s t d l i b . h >

3 # i n c l u d e < m a t h . h >

4 5

6 int

7 m a i n (int argc , c h a r * a r g v [])

8 {

9

10 r e t u r n 0;

11 }

C言語のテンプレート.さっそくコンパイル!

7 / 22

(8)

わからなければ日本語で書く!

1 # i n c l u d e < s t d i o . h > // おまじない 2 # i n c l u d e < s t d l i b . h >

3 # i n c l u d e < m a t h . h >

4

5 int

6 m a i n (int argc , c h a r * a r g v [])

7 {

8

9 // 問題を作る(200 個のデータ生成)

10

11 // 復元する

12

13 // 結果を表示する 14

15 r e t u r n 0;

16 }

https://github.com/date333cs/optimization/blob/master/hmm001.c

8 / 22

(9)

空の関数を作る!

1 # i n c l u d e < s t d i o . h > // おまじない 2 # i n c l u d e < s t d l i b . h >

3 # i n c l u d e < m a t h . h >

4

5 v o i d g e n e r a t e _ x () { 6

7 }

8 v o i d g e n e r a t e _ y () { 9

10 } 11

12 int m a i n (int argc , c h a r * a r g v []) { 13

14 g e n e r a t e _ x () ; // 問題を作る 15 g e n e r a t e _ y () ;

16 c o m p u t e _ x m a p () ; // 復元する 17 // 結果を表示する

18

19 r e t u r n 0;

20 } 9 / 22

(10)

データ構造

1 int x [ N _ D A T A ]; // もともとの信号. 0 1

2 int x m a p [ N _ D A T A ]; // 推定値. 0 1 3 d o u b l e y [ N _ D A T A ]; // 観測データ 4

5 int x h a t [ N _ D A T A ] [ 2 ] ;

6 // x h a t [ 2 ] [ b ] = a r g m a x _ a { ( f [ 2 ] [ a ] + h ( a , b ) } 7 // 教科書 p . 2 1 8 参照

8 d o u b l e f [ N _ D A T A ] [ 2 ] ;

i= 0,· · · ,199, a = 0,1

fi(xi) · · · double f[i][a]

i番目の変数の値がxi =aのとき,そこに至る最適経 路の尤もらしさ.

xˆi(xi+1) · · · int xhat[i][a]

xi+1 =a のとき,xi が取るべき値

10 / 22

(11)

正規分布にしたがう乱数の生成

nrnd() という関数を用意しているので,それを使う.

1 v o i d t e s t _ n r n d () { 2

3 int i ;

4 for ( i =0; i < 1 0 ; i ++) {

5 p r i n t f (" %.8 lf \ n ", n r n d () ) ;

6 }

7 }

σ * nrnd() とすれば,標準偏差 σ のデータを生成できる.

平均 µ,標準偏差 σ にしたければ,σ * nrnd() + µ 0.97430744

-0.18328546 -0.20470468 -0.26548298 ...

11 / 22

(12)

使って良い知識

データ(観測値) y= (y1,· · · , yn) モデル:p(x), p(y|x)

p(x1) =

{ 0.5 if x1 = 0 0.5 if x1 = 1

p(xi+1|xi) =

0.99 if xi = 0, xi+1 = 0 0.01 if xi = 0, xi+1 = 1 0.97 if xi = 1, xi+1 = 1 0.03 if xi = 1, xi+1 = 0 p(yi|xi) = 1

2πσexp

{

(yixi)2 2

}

以降,この課題では,特に指定しない限りσ = 0.7

12 / 22

(13)

事後確率最大化

x3

x1 x2 xn-1 xn

y3

y1 y2 yn-1 yn

J = logp(x1) +

n

i=2

logp(xi|xi1) +

n

i=1

logp(yi|xi)

= logp(x1) + logp(y1|x1) +

n1

i=1

{

logp(xi+1|xi) + logp(yi+1|xi+1) }

yiは定数 ⇒ 教科書p.216 (8.2)式と同じ形

= f1(x1) +h1(x1, x2) +h2(x2, x3) +· · ·+hn1(xn1, xn)

f1(x1) = logp(x1) + logp(y1|x1)

hi(xi, xi+1) = logp(xi+1|xi) + logp(yi+1|xi+1)

13 / 22

(14)

事後確率最大化

x3

x1 x2 xn-1 xn

y3

y1 y2 yn-1 yn

J = logp(x1) +

n

i=2

logp(xi|xi1) +

n

i=1

logp(yi|xi)

= logp(x1) + logp(y1|x1) +

n1

i=1

{

logp(xi+1|xi) + logp(yi+1|xi+1) }

yiは定数 ⇒ 教科書p.216 (8.2)式と同じ形

= f1(x1) +h1(x1, x2) +h2(x2, x3) +· · ·+hn1(xn1, xn)

f1(x1) = logp(x1) + logp(y1|x1)

hi(xi, xi+1) = logp(xi+1|xi) + logp(yi+1|xi+1)

14 / 22

(15)

動的計画法

x3

x1 x2 xn-1 xn

y3

y1 y2 yn-1 yn

J = logp(x1) + logp(y1|x1) +

n1

i=1

{

logp(xi+1|xi) + logp(yi+1|xi+1) }

= f1(x1) +h1(x1, x2) +h2(x2, x3) +· · ·+hn1(xn1, xn)

x1 に着目 ⇒f1(x1), h1(x1, x2)にしか関係しない

f1(x1) +h1(x1, x2)を最大にするようx1 を選ぶ

x2の値がわかっていないければ選べない

そこで,x2の可能なすべての値(0,1)に対して,以下を計算

f2(x2) = maxx

1

{f1(x1) +h1(x1, x2)} ˆ

x1(x2) = argmax

x1

{f1(x1) +h1(x1, x2)}

J =f2(x2) +h2(x2, x3) +· · ·+hn1(xn1, xn)

15 / 22

(16)

動的計画法

x3

x1 x2 xn-1 xn

y3

y1 y2 yn-1 yn

J = logp(x1) + logp(y1|x1) +

n1

i=1

{

logp(xi+1|xi) + logp(yi+1|xi+1) }

= f1(x1) +h1(x1, x2) +h2(x2, x3) +· · ·+hn1(xn1, xn)

x1 に着目 ⇒f1(x1), h1(x1, x2)にしか関係しない

f1(x1) +h1(x1, x2)を最大にするようx1 を選ぶ

x2の値がわかっていないければ選べない

そこで,x2の可能なすべての値(0,1)に対して,以下を計算

f2(x2) = maxx

1

{f1(x1) +h1(x1, x2)} ˆ

x1(x2) = argmax

x1

{f1(x1) +h1(x1, x2)}

J =f2(x2) +h2(x2, x3) +· · ·+hn1(xn1, xn)

16 / 22

(17)

動的計画法

x3

x1 x2 xn-1 xn

y3

y1 y2 yn-1 yn

J = logp(x1) + logp(y1|x1) +

n1

i=1

{

logp(xi+1|xi) + logp(yi+1|xi+1) }

= f1(x1) +h1(x1, x2) +h2(x2, x3) +· · ·+hn1(xn1, xn)

x1 に着目 ⇒f1(x1), h1(x1, x2)にしか関係しない

f1(x1) +h1(x1, x2)を最大にするようx1 を選ぶ

x2の値がわかっていないければ選べない

そこで,x2の可能なすべての値(0,1)に対して,以下を計算

f2(x2) = maxx

1

{f1(x1) +h1(x1, x2)} ˆ

x1(x2) = argmax

x1

{f1(x1) +h1(x1, x2)}

J =f2(x2) +h2(x2, x3) +· · ·+hn1(xn1, xn)

17 / 22

(18)

動的計画法

x3

x1 x2 xn-1 xn

y3

y1 y2 yn-1 yn

J = logp(x1) + logp(y1|x1) +

n1

i=1

{

logp(xi+1|xi) + logp(yi+1|xi+1) }

= f1(x1) +h1(x1, x2) +h2(x2, x3) +· · ·+hn1(xn1, xn)

x1 に着目 ⇒f1(x1), h1(x1, x2)にしか関係しない

f1(x1) +h1(x1, x2)を最大にするようx1 を選ぶ

x2の値がわかっていないければ選べない

そこで,x2の可能なすべての値(0,1)に対して,以下を計算

f2(x2) = maxx

1

{f1(x1) +h1(x1, x2)} ˆ

x1(x2) = argmax

x1

{f1(x1) +h1(x1, x2)}

J =f2(x2) +h2(x2, x3) +· · ·+hn1(xn1, xn) 18 / 22

(19)

ここまで

x3

x1 x2 xn-1 xn

y3

y1 y2 yn-1 yn

f1(x1) = logp(x1) + logp(y1|x1)

p(x1)x1= 0, x1= 1どちらの場合も0.5.

hi(xi, xi+1) = logp(xi+1|xi) + logp(yi+1|xi+1)

上の図では,p(xi+1|xi)が横棒,p(yi+1|xi+1)が縦棒に対応.

f2(x2) = max

x1 {f1(x1) +h1(x1, x2)} ˆ

x1(x2) = argmax

x1 {f1(x1) +h1(x1, x2)}

J =f1(x1) +h1(x1, x2) +h2(x2, x3) +· · ·+hn1(xn1, xn) J =f2(x2) +h2(x2, x3) +· · ·+hn1(xn1, xn)

J =fn(xn)

19 / 22

(20)

縦棒 logp(yi|xi)について

x3

x1 x2 xn-1 xn

y3

y1 y2 yn-1 yn

logをとるのはコンピュータにはさせない. 手計算で!

p(yi|xi) = 1

2πσexp {

(yixi)2 2

}

logp(yi|xi) =log(

2πσ)(yixi)2 2

上式,右辺第1項は,xiの値に依存しない.最大化には関係ない.

20 / 22

(21)

チュートリアル 【終わり】

(22)

22 / 22

参照

関連したドキュメント

There is a bijection between left cosets of S n in the affine group and certain types of partitions (see Bjorner and Brenti (1996) and Eriksson and Eriksson (1998)).. In B-B,

(The Elliott-Halberstam conjecture does allow one to take B = 2 in (1.39), and therefore leads to small improve- ments in Huxley’s results, which for r ≥ 2 are weaker than the result

“Breuil-M´ezard conjecture and modularity lifting for potentially semistable deformations after

lines. Notice that Theorem 4 can be reformulated so as to give the mean harmonic stability of the configuration rather than that of the separate foliations. To this end it is

S., Oxford Advanced Learner's Dictionary of Current English, Oxford University Press, Oxford

At the end of the section, we will be in the position to present the main result of this work: a representation of the inverse of T under certain conditions on the H¨older

支払方法 支払日 ※② 緊急時連絡先等 ※③.

また、同法第 13 条第 2 項の規定に基づく、本計画は、 「北区一般廃棄物処理基本計画 2020」や「北区食育推進計画」、