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