Article #969

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.

Pongと強化学習 (95)

posted by sakurai on April 2, 2025 #969

インベーダゲームの報酬設計はどのようにしたら良いですか?


インベーダーゲームで移動に対しても微小なペナルティを適用することは、エージェントが無駄な動きを避け、より効率的な戦略を学習するために有用です。このペナルティを適切に設定することで、エージェントは必要な時にのみ移動し、より多くのインベーダーを撃破することに集中するようになります。以下に、移動に対する微小なペナルティを含む報酬設計のアプローチを説明します。

移動ペナルティの追加

  1. ペナルティの設定:

    • 移動に対するペナルティは小さく設定することが一般的です。例えば、移動するたびに -0.01 などの値を適用することが考えられます。これは、移動が基本的には許容されるが、できるだけ少ない移動で高い効率を達成することが望ましいためです。
  2. 報酬関数の更新:

    • 移動したことを検知し、それに応じて報酬から微小な値を引くように報酬関数を更新します。このとき、他の報酬要素(インベーダー撃破の得点や自機破壊のペナルティ)とのバランスを考える必要があります。

コード例

以下の関数get_rewardは、インベーダーの撃破、自機の破壊、そして移動に対する報酬を計算し、それを正規化する例を示しています。

    def normalize_reward(score, max_score=30, min_score=-1):
        # 最大得点で正規化
        return max(min(score / max_score, 1), -1)
    
    def get_reward(invader_type, player_hit, moved):
        base_scores = {1: 10, 2: 20, 3: 30}
        reward = 0
    
        # インベーダー撃破の得点を追加
        if not player_hit:
            reward += base_scores.get(invader_type, 0)
        
        # 自機が破壊された場合のペナルティ
        if player_hit:
            reward -= 100
        
        # 移動した場合の微小なペナルティ
        if moved:
            reward -= 0.01  # 移動するたびに少しのペナルティを適用
    
        # 報酬の正規化
        normalized_reward = normalize_reward(reward)
        return normalized_reward

ペナルティの影響の監視

この報酬設計を実装した後、エージェントの行動パターンを注意深く監視し、移動ペナルティが望ましい効果をもたらしているかどうかを評価することが重要です。ペナルティが高すぎると、エージェントが必要なときに移動を避けるようになり、パフォーマンスが低下する可能性があります。一方で、ペナルティが低すぎると、エージェントが無駄に多く移動し続ける可能性があります。そのため、適切なペナルティの設定とその効果の評価が、成功への鍵となります。


左矢前のブログ 次のブログ右矢

Leave a Comment

Your email address will not be published.

You may use Markdown syntax. If you include an ad such as http://, it will be invalidated by our AI system.

Please enter the numbers as they are shown in the image above.