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