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

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

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

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

R

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

統計

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

Q&A

解決済

1回答

1412閲覧

統計Rの関数が実行されない

YYJP

総合スコア23

強化学習

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

R

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

統計

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

0グッド

0クリップ

投稿2021/05/16 07:53

前提・実現したいこと

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

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

上記の課題において、α, βの値を変更することで、Aを選択する割合がどのように変化するかを確認したいのですが、関数の実行ができていません。
R初心者で、関数の定義、引数、返り値、呼び出しの部分が、曖昧なので、物凄く単純な問題だと思います。
どうしたら、calc_optimrate関数を実行できるようになるでしょうか?

発生している問題・エラーメッセージ

エラーは発生しません。ただ、関数が実行されません。

該当のソースコード

R

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

試したこと

関数の定義、引数、返り値、呼び出しの部分が、曖昧です。
物凄く単純な問題だと思います。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんな結果が表示されましたが。

> ret <- calc_optimrate(T, pr, alpha, beta) > ret $optimrate [1] 0.69 $pr [1] 0.7 0.3 $alpha [1] 0.3 $beta [1] 2 >

投稿2021/05/16 09:12

technocore

総合スコア7200

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

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

YYJP

2021/05/16 09:37

実行できてたんですね。本当に助かりました、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問