始める無料で始める

マルチアーム・バンディットにおける収束の評価

マルチアーム・バンディット問題における各戦略の性能と収束を評価することは、その有効性を理解するうえで重要です。時間の経過とともに各アームがどのくらいの頻度で選ばれているかを分析することで、学習の進み方や最良のアームを見つけて活用できているかを推測できます。この演習では、各イテレーションにおける各アームの選択割合を可視化し、epsilon-greedy 戦略の収束状況を評価します。

各イテレーションでどのアームを引いたかを示す selected_arms 配列は、あらかじめ読み込まれています。

この演習はコースの一部です

Pythonで学ぶGymnasiumによるReinforcement Learning

コースを見る

演習の手順

  • 各バンディットの選択割合を時間とともに追跡できるよう、ゼロで初期化した配列 selections_percentage を作成します。
  • 各バンディットについて、イテレーションごとの選択の累積和を計算し、イテレーション番号で割って、時間経過に伴う selections_percentage を求めます。
  • 各バンディットの累積選択割合をプロットし、イテレーションにわたってどのくらいの頻度で選ばれたかを可視化します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Initialize the selection percentages with zeros
selections_percentage = ____
for i in range(n_iterations):
    selections_percentage[i, selected_arms[i]] = 1
# Compute the cumulative selection percentages 
selections_percentage = np.____(____, axis=____) / np.arange(1, ____).reshape(-1, 1)
for arm in range(n_bandits):
  	# Plot the cumulative selection percentage for each arm
    plt.plot(____, label=f'Bandit #{arm+1}')
plt.xlabel('Iteration Number')
plt.ylabel('Percentage of Bandit Selections (%)')
plt.legend()
plt.show()
for i, prob in enumerate(true_bandit_probs, 1):
    print(f"Bandit #{i} -> {prob:.2f}")
コードを編集して実行