| import random | |
| import torch | |
| AU = 149.6e9 | |
| G = 6.67428e-11 | |
| Scale = 250 / AU # 1AU = 100 pixels | |
| Step_p_frame = 1 | |
| TIMESTEP = 3600 # 1 hour | |
| WIDTH, HEIGHT = 800, 600 | |
| FPS = 60e3 | |
| ACCELERATING_RATE = 1_000_000 | |
| WHITE = (255, 255, 255) | |
| JUP = (255,255,75) | |
| YELLOW = (255, 255, 0) | |
| BLUE = (100, 149, 237) | |
| RED = (188, 39, 50) | |
| DARK_GREY = (80, 78, 81) | |
| LIGHT_GREY = (175,173,179) | |
| GREEN = (100,230,72) | |
| random.random() | |
| DEVICE = "cpu" | |
| # Weights for reward components | |
| # --- Constants for Target Distance Reward Function --- | |
| TARGET_DISTANCE_FACTOR = 5e3 # Target distance = TARGET_DISTANCE_FACTOR * planet_radius | |
| # Scale factor for error (e.g., 1 million km = 1e9 meters, or adjust based on typical orbital scales) | |
| DISTANCE_REWARD_SCALE_FACTOR = 1e9 | |
| # Alpha controls the sharpness of the peak reward (applied to scaled error) | |
| REWARD_ALPHA = 10.0 | |
| # Coeff determines the max bonus reward at the target distance | |
| REWARD_COEFF = 50.0 | |
| """ TESTS ON REWARD DISTANCE | |
| # REWARD_POTENTIAL_SCALE = 1e13 | |
| """ | |
| REWARD_DISTANCE_SCALE = 1e-9 # Scales the reward/penalty for change in distance | |
| REWARD_SPEED_SCALE = 1e1 # Scales the reward for being close to orbital speed | |
| NO_THRUST_REWARD = 25 # Penalty for firing any thruster (action > 0) | |
| TIME_PENALTY = 0.01 # Small penalty for each time step taken | |
| GOAL_REWARD = 100.0 # Large reward for achieving stable orbit with motors off | |
| ORBIT_SPEED_TOLERANCE = 100 # Speed difference tolerance (m/s) to be considered 'in orbit' for reward | |
| # --- DQN Hyperparameters --- | |
| STATE_SIZE = 4 # State vector size: [dx, dy, dvx, dvy] -> Update if state definition changes | |
| ACTION_SIZE = 7 # Actions: 0: none, 1: right, 2: left, 3: up, 4:right+up, 5:left+up, 6:right+left | |
| MEMORY_CAPACITY = 50000 # Replay memory size (adjust based on RAM) | |
| BATCH_SIZE = 128 # Number of experiences to sample for each learning step | |
| GAMMA = 0.99 # Discount factor for future rewards | |
| EPS_START = 0.05 # Starting value for epsilon (exploration rate) | |
| EPS_END = 0.01 # Minimum value for epsilon | |
| EPS_DECAY = 20000 # Controls how fast epsilon decreases (higher means slower decay) | |
| TAU = 0.005 # Soft update parameter for target network weights | |
| LR = 5e-4 # Learning rate for the Adam optimizer | |
| TARGET_UPDATE_FREQ = 10 # How many steps between hard updates of target network (if not using soft updates) | |
| # If using soft updates (TAU > 0), this can be ignored or set to 1 for updates every step. | |
| # --- Att Hyperparameters --- | |
| # Define constants (consider moving these to Const.py) | |
| SEQ_LENGTH_DEFAULT = 50 | |
| # Velocity normalization factor used in the original get_state [cite: 124] | |
| NORM_FACTOR_VEL = 5e4 | |
| PADDING_VALUE = 0.0 # Default padding for numerical sequences | |
| ACTION_PADDING_VALUE = 0 # Default padding for action sequence | |
| # These should match the output of get_state_sequence | |
| NUM_FEATURES = 5 # action, rel_x, rel_y, rel_vx, rel_vy | |
| SEQ_LENGTH = 50 # Example sequence length, should be configurable | |
| MAX_HISTORY_LEN = 5000 # Max length for deques (can be larger than SEQ_LENGTH) | |
| MODEL_NAME = "AttentionDQN" # Name for saving/loading | |
| # --- Simulation Settings for RL --- | |
| CRASH_DISTANCE_THRESHOLD = 1.0E6 # Example: Define a crash distance from planet surface (meters) - needs tuning | |
| OUT_OF_BOUNDS_DISTANCE = 25 * AU # Example: Max distance from Sun before episode ends | |
| Core_position = { | |
| 0:'Sun', | |
| 1:'Mercury', | |
| 2:'Venus', | |
| 3:'Earth', | |
| 4:'Moon', | |
| 5:'Mars', | |
| 6:'Jupiter', | |
| 7:'Saturn', | |
| 8:'Uranus', | |
| 9:'Neptune', | |
| 10:'Pluto', | |
| } |