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

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

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

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

R

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

関数

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

統計

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

Q&A

解決済

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

YYJP
YYJP

総合スコア22

強化学習

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

R

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

関数

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

統計

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

1回答

0グッド

0クリップ

787閲覧

投稿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)

試したこと

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答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

総合スコア7124

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

YYJP

2021/05/16 09:37

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

強化学習

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

R

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

関数

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

統計

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