INITIAL_CASH = 1000.0 # Product name -> base price (selling price before multiplier) BASE_PRICES = { "electronics": 150.0, "clothing": 40.0, "groceries": 10.0, "furniture": 200.0, "toys": 25.0, } # Product name -> cost price (what you pay to buy stock) COST_PRICES = { "electronics": 100.0, "clothing": 25.0, "groceries": 5.0, "furniture": 130.0, "toys": 12.0, } # Product name -> shelf life in days (None = no expiry) SHELF_LIFE = { "electronics": None, "clothing": None, "groceries": 5, "furniture": None, "toys": None, } # Product name -> starting stock quantity INITIAL_STOCK = { "electronics": 10, "clothing": 20, "groceries": 50, "furniture": 5, "toys": 30, } # Delivery method -> cost per unit SHIPPING_COST = { "slow": 2.0, "medium": 5.0, "fast": 10.0, } # Delivery method -> days to arrive SHIPPING_DAYS = { "slow": 5, "medium": 3, "fast": 1, } # Event name -> days until event (spread across 30 days) EVENTS = { "black_friday": 6, "christmas": 12, "back_to_school": 18, "summer_clearance": 24, "new_competitor": 28, } # Product name -> max inventory space (units) INVENTORY_CAPACITY = { "electronics": 100, "clothing": 200, "groceries": 500, "furniture": 50, "toys": 300, } # Product name -> additional cost per unit for extra inventory beyond capacity EXTRA_INVENTORY_COST = { "electronics": 20.0, "clothing": 5.0, "groceries": 2.0, "furniture": 30.0, "toys": 4.0, } # Product name -> (min_demand, max_demand) per day BASE_DEMAND = { "electronics": (3, 8), "clothing": (5, 15), "groceries": (20, 40), "furniture": (1, 3), "toys": (5, 12), } WEEKEND_MULTIPLIER = 1.2 # Event name -> {product: demand_multiplier} when event triggers EVENT_EFFECTS = { "black_friday": {"electronics": 3.0, "clothing": 2.5, "toys": 2.0, "furniture": 1.5, "groceries": 1.0}, "christmas": {"toys": 3.0, "electronics": 2.0, "clothing": 1.5, "furniture": 1.0, "groceries": 1.5}, "back_to_school": {"clothing": 2.5, "electronics": 1.5, "toys": 1.5, "furniture": 1.0, "groceries": 1.0}, "summer_clearance": {"clothing": 2.0, "toys": 1.5, "electronics": 1.0, "furniture": 1.5, "groceries": 1.0}, "new_competitor": {"electronics": 0.6, "clothing": 0.7, "toys": 0.7, "furniture": 0.8, "groceries": 0.9}, } EVENT_DURATION = 2 MAX_DAYS = 30 UPGRADE_DELIVERY_COST = 50.0 # Task configs for easy/medium/hard TASKS = { # Easy: High starting stock, low demand, no events, full warehouse capacity. # Agent just needs to maintain stock and sell. Minimal challenge. "easy": { "seed": 100, "max_days": 30, "initial_cash": 1000.0, "events": {}, # no events "initial_stock": { "electronics": 5, "clothing": 10, "groceries": 20, "furniture": 3, "toys": 10, }, "inventory_capacity": INVENTORY_CAPACITY, "base_demand": { "electronics": (2, 5), "clothing": (3, 10), "groceries": (15, 30), "furniture": (1, 2), "toys": (3, 8), }, }, # Medium: Default stock/cash, all 5 events spread across 30 days, normal demand. # Agent must anticipate demand spikes from events and restock accordingly. "medium": { "seed": 200, "max_days": 30, "initial_cash": 1000.0, "events": EVENTS, "initial_stock": INITIAL_STOCK, "inventory_capacity": INVENTORY_CAPACITY, "base_demand": BASE_DEMAND, }, # Hard: Half starting cash ($500), low stock, events packed close together, # higher demand, smaller warehouse. Agent must balance tight budget, # overlapping event spikes, and fast-expiring groceries. "hard": { "seed": 300, "max_days": 30, "initial_cash": 500.0, "events": { "black_friday": 4, "christmas": 8, "back_to_school": 12, "summer_clearance": 16, "new_competitor": 20, }, "initial_stock": { "electronics": 5, "clothing": 10, "groceries": 30, "furniture": 3, "toys": 15, }, "inventory_capacity": { "electronics": 50, "clothing": 100, "groceries": 250, "furniture": 25, "toys": 150, }, "base_demand": { "electronics": (5, 12), "clothing": (8, 20), "groceries": (30, 60), "furniture": (2, 5), "toys": (8, 18), }, }, } PRICE_ELASTICITY = { "electronics": 1.2, "clothing": 1.5, "groceries": 0.4, "furniture": 0.8, "toys": 1.3, }