## Problem Description and Formulation

The amusement park sells two types of tickets: regular tickets and premium tickets. The goal is to maximize profit given the following constraints:

- The amusement park can sell at most 1000 tickets in total.
- The profit per regular ticket is $50.
- The profit per premium ticket is $100.
- At least 100 tickets must be premium tickets.
- At least 5 times as many people prefer to buy regular tickets than premium tickets.

## Symbolic Representation

Let's denote:
- \(R\) as the number of regular tickets sold.
- \(P\) as the number of premium tickets sold.

The objective function to maximize profit (\(Profit = 50R + 100P\)) subject to:
1. \(R + P \leq 1000\) (at most 1000 tickets sold)
2. \(P \geq 100\) (at least 100 premium tickets)
3. \(R \geq 5P\) (at least 5 times as many regular tickets as premium tickets)
4. \(R, P \geq 0\) (non-negativity constraint, as tickets cannot be negative)

## Gurobi Code

```python
import gurobi

def solve_amusement_park_problem():
    # Create a new model
    model = gurobi.Model()

    # Define variables
    R = model.addVar(lb=0, name="Regular_Tickets")
    P = model.addVar(lb=0, name="Premium_Tickets")

    # Objective function: Maximize profit
    model.setObjective(50*R + 100*P, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(R + P <= 1000, name="Total_Tickets")
    model.addConstr(P >= 100, name="Premium_Tickets_Min")
    model.addConstr(R >= 5*P, name="Regular_to_Premium_Ratio")

    # Optimize
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution:")
        print(f"Regular Tickets: {R.varValue}")
        print(f"Premium Tickets: {P.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_amusement_park_problem()
```