#!/bin/bash # Test script to verify DQN initialization is non-deterministic # Runs 3 parallel training instances and extracts initial Q-values set -e echo "=== DQN Non-Deterministic Initialization Test ===" echo "Starting 3 parallel training runs with 1 epoch each..." echo "" # Clean up old test outputs rm -rf /tmp/init_test_* 2>/dev/null || true # Run 3 training instances in parallel cargo run --package ml --example train_dqn --release --features cuda -- \ --epochs 1 --output-dir /tmp/init_test_1 > /tmp/init_test_1.log 2>&1 & PID1=$! cargo run --package ml --example train_dqn --release --features cuda -- \ --epochs 1 --output-dir /tmp/init_test_2 > /tmp/init_test_2.log 2>&1 & PID2=$! cargo run --package ml --example train_dqn --release --features cuda -- \ --epochs 1 --output-dir /tmp/init_test_3 > /tmp/init_test_3.log 2>&1 & PID3=$! echo "Waiting for training runs to complete..." echo " PID $PID1 (test 1)" echo " PID $PID2 (test 2)" echo " PID $PID3 (test 3)" echo "" wait $PID1 $PID2 $PID3 echo "All training runs completed. Extracting Q-values..." echo "" # Extract initial Q-values from logs echo "=== Run 1 - Initial Q-Values ===" grep -E "Step 0.*Q-values:" /tmp/init_test_1.log | head -1 || echo "No Q-values found in Run 1" echo "" echo "=== Run 2 - Initial Q-Values ===" grep -E "Step 0.*Q-values:" /tmp/init_test_2.log | head -1 || echo "No Q-values found in Run 2" echo "" echo "=== Run 3 - Initial Q-Values ===" grep -E "Step 0.*Q-values:" /tmp/init_test_3.log | head -1 || echo "No Q-values found in Run 3" echo "" # Extract entropy seeds echo "=== Entropy Seeds Used ===" echo "Run 1:" grep "Device RNG seeded with entropy:" /tmp/init_test_1.log | head -1 || echo "No seed found" echo "Run 2:" grep "Device RNG seeded with entropy:" /tmp/init_test_2.log | head -1 || echo "No seed found" echo "Run 3:" grep "Device RNG seeded with entropy:" /tmp/init_test_3.log | head -1 || echo "No seed found" echo "" echo "=== Validation ===" echo "SUCCESS: If the Q-values and seeds are DIFFERENT across runs, the fix is working!" echo "FAILURE: If the Q-values are IDENTICAL across runs, the issue persists." echo "" echo "Logs saved to: /tmp/init_test_{1,2,3}.log"