質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

Q&A

解決済

1回答

1119閲覧

統計Rで、変数の値を変えても、出力結果が変わらない。

YYJP

総合スコア23

強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

0グッド

0クリップ

投稿2021/05/15 17:53

前提・実現したいこと

強化学習で、下記の初心者向けの課題に取り組んでいます。

『選択肢A(報酬が70%の確率で得られる), B(報酬が30%の確率で得られる)のうちから行動を選択する、Q学習モデルの仮想実験を、1セット200試行として、1000セット行い、1セットあたりで、報酬が70%の確率で得られるAを選んだ試行の割合を算出しなさい。』
*片平健太郎著 行動データの計算論モデリング:強化学習モデルを例として 問題2.2

上記の課題において、α, βの値を変更することで、Aを選択する割合がどのように変化するかを確認したいのですが、α, βの値を変更しても、出力結果(=print(table(c)) の値)が変わりません。
どうしたら、α, βの値の変更が、反映されるようになるでしょうか?

該当のソースコード

R

1# ----------------------------------------------------- # 2# calc_optimrate() 3# 章末問題2.3の回答に使える関数 4# qlearning_simulation.Rがベース 5# ----------------------------------------------------- # 6 7# 関数calc_optimrateの定義 8# 最適な選択肢を選択した割合を返す関数 9# 引数 10# T: 試行数、pr: それぞれの選択肢の報酬確率、alpha: 学習率、beta: 逆温度 11i<-1 12 13for (i in 1:1000) { 14 15 # 試行数 16 T <- 200 17 alpha <- 0.3 # 学習率 18 beta <- 5.0 # 逆温度 19 20 # それぞれの選択肢の報酬確率 21 pr <- c(0.7,0.3) 22 23 24 calc_optimrate <- function(T, pr, alpha, beta) { 25 26 # 最適な選択肢を必ず1番目の選択肢にする 27 if (pr[1] <= pr[2]) { 28 stop(paste("1番目の報酬確率を2番目より大きくしてください。")) 29 } 30 31 # Q値の初期化(選択肢の数 x T) 32 Q <- matrix(numeric(2*T), nrow=2, ncol=T) 33 34 c <- numeric(T) # 各試行での選択(1=A, 2=B) 35 r <- numeric(T) # 各試行での報酬 36 pA <- numeric(T) # Aの選択確率 37 38 39 40 41 for (t in 1:T) { 42 43 # ソフトマックスで選択肢Aの選択確率を決定する 44 pA[t] <- 1/(1+exp(-beta*(Q[1,t]-Q[2,t]))) 45 46 if (runif(1,0,1) < pA[t]) { 47 # Aを選択 48 c[t] <- 1 49 r[t] <- as.numeric(runif(1,0,1) < pr[1]) 50 } else { 51 # Bを選択 52 c[t] <- 2 53 r[t] <- as.numeric(runif(1,0,1) < pr[2]) 54 } 55 56 # 行動価値の更新 57 if (t < T) { 58 59 Q[c[t],t+1] <- Q[c[t],t] + alpha * (r[t] - Q[c[t],t] ) 60 61 # 選択肢していない行動の価値はそのままの値を次の時刻に引き継ぐ。 62 # 3-c でc=1 なら2, c=2 なら1, というように 63 # 逆側の選択肢のインデックスが求まる。 64 Q[3-c[t],t+1] <- Q[3-c[t],t] 65 } 66 } 67 68 return(list(optimrate=mean(c==1), 69 pr=pr, 70 alpha=alpha, 71 beta=beta)) 72 } 73 74print(table(c)) 75i <- i+1 76}

試したこと

α, βの値を変更することにより、print(table(c))の値が変わることを期待したのですが、変わりません。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

関数を定義しているだけで実行していないので、alphaやbetaをいくら変えてみたところで、「結果」が変わるはずがありません。というか何の結果も出ていないはずです。

投稿2021/05/15 18:12

編集2021/05/15 18:13
KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YYJP

2021/05/16 06:49

そうなんですね。見直して、再度投稿し直します。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問