File size: 1,175 Bytes
323c6ec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import tensorflow as tf

def compute_rewards(mode, env_info):
    """
    Calculates zero-sum competitive rewards based on live environment info keys.
    Guarantees a 2-value tuple output to prevent unpacking errors.
    """
    if not env_info:
        return 0.0, 0.0

    score_diff = env_info.get('score_difference', 0.0)
    progress = env_info.get('team_progress', 0.0)
        
    # Extract values safely regardless of whether they arrive as scalars or tensors
    if hasattr(score_diff, 'numpy'): score_diff = score_diff.numpy()
    if hasattr(progress, 'numpy'): progress = progress.numpy()
        
    score_diff = float(score_diff)
    progress = float(progress)

    if str(mode).lower() == "competitive":
        # Red gets rewarded when score difference grows, but pays a step penalty
        red_reward = score_diff + (progress * 0.1) - 0.5            
        # Blue gets rewarded when score difference shrinks, plus a survival bonus
        blue_reward = -score_diff - (progress * 0.1) + 0.5
    else:
        # Cooperative or fallback layout
        red_reward = score_diff
        blue_reward = progress

    return float(red_reward), float(blue_reward)