nation_optimizer / scripts /full_simulation_test.py
Algio-1452's picture
Environment Testing phase done done
0fc5daf
Raw
History Blame Contribute Delete
3.62 kB
"""Comprehensive test script: Retry Loop + Multi-Round Stability."""
from server.environment import NationEnvironment
from server.models import ParliamentaryAction
from schemas.phases import Phase
def run_combined_test():
env = NationEnvironment(seed=42)
obs, _ = env.reset()
departments = env.departments
print("=== STARTING COMPREHENSIVE SIMULATION TEST ===")
# --- ROUND 1: THE RETRY SCENARIO ---
print(f"\n[ROUND {obs.round}] Starting Phase: {obs.phase_name}")
# 1. Debate
obs, _, _, _, _ = env.step(ParliamentaryAction(agent_id=departments[0], type="DEBATE", message="Crisis debate"))
obs, _, _, _, _ = env.step(ParliamentaryAction(agent_id=departments[0], type="DEBATE", message="")) # End debate
# 2. Proposals
for dept in departments:
obs, _, _, _, _ = env.step(ParliamentaryAction(
agent_id=dept, type="PROPOSE_BUDGET", department=dept, amount=150.0, justification="Greedy request"
))
# 3. Voting (VOTE NO to trigger retry)
print(f"Current Phase: {obs.phase_name}. Agents voting NO...")
while obs.phase_name == "VOTING":
dept = obs.current_agent
target = next((p for p in obs.proposals if dept != p.agent_id and dept not in p.votes), None)
if target:
obs, _, _, _, _ = env.step(ParliamentaryAction(agent_id=dept, type="VOTE", proposal_id=target.proposal_id, vote="NO"))
else: break
print(f"Transitioned to: {obs.phase_name} (Retry Count: {obs.retry_count})")
if obs.retry_count == 1:
print("SUCCESS: Retry loop triggered correctly.")
else:
print("FAILURE: Retry loop did not trigger.")
return
# 4. Re-Proposal (Retry Round)
print(f"Submiting safer proposals for Retry {obs.retry_count}...")
for dept in departments:
obs, _, _, _, _ = env.step(ParliamentaryAction(
agent_id=dept, type="PROPOSE_BUDGET", department=dept, amount=60.0, justification="Safe request"
))
# 5. Voting (VOTE YES to finish round)
print("Agents voting YES on retry proposals...")
while obs.phase_name == "VOTING":
dept = obs.current_agent
target = next((p for p in obs.proposals if dept != p.agent_id and dept not in p.votes), None)
if target:
obs, reward, done, _, info = env.step(ParliamentaryAction(agent_id=dept, type="VOTE", proposal_id=target.proposal_id, vote="YES"))
else: break
print(f"Round 1 Complete! Reward: {reward:.4f} | Treasury: {obs.treasury:.2f}")
# --- ROUND 2: NORMAL STABILITY ---
print(f"\n[ROUND {obs.round}] Phase: {obs.phase_name}")
# Skip debate
obs, _, _, _, _ = env.step(ParliamentaryAction(agent_id=departments[0], type="DEBATE", message=""))
# Propose
for dept in departments:
obs, _, _, _, _ = env.step(ParliamentaryAction(
agent_id=dept, type="PROPOSE_BUDGET", department=dept, amount=70.0, justification="Normal request"
))
# Vote YES
while obs.phase_name == "VOTING":
dept = obs.current_agent
target = next((p for p in obs.proposals if dept != p.agent_id and dept not in p.votes), None)
if target:
obs, reward, done, _, info = env.step(ParliamentaryAction(agent_id=dept, type="VOTE", proposal_id=target.proposal_id, vote="YES"))
else: break
print(f"Round 2 Complete! Reward: {reward:.4f} | Treasury: {obs.treasury:.2f} | Pop: {obs.population}")
print("\n=== COMPREHENSIVE TEST FINISHED SUCCESSFULLY ===")
if __name__ == "__main__":
run_combined_test()