To solve the given optimization problem, we first need to translate the natural language description into a symbolic representation. This involves defining variables and formulating the objective function and constraints.

Let's denote:
- \(x_1\) as the number of regular tickets sold,
- \(x_2\) as the number of premium tickets sold.

The objective is to maximize profit. Given that the profit per regular ticket is $50 and per premium ticket is $100, the objective function can be written as:
\[ \text{Maximize: } 50x_1 + 100x_2 \]

The constraints are:
1. The total number of tickets sold cannot exceed 1000: \( x_1 + x_2 \leq 1000 \)
2. At least 100 tickets must be premium: \( x_2 \geq 100 \)
3. At least 5 times as many people prefer to buy regular tickets than premium tickets: \( x_1 \geq 5x_2 \)

Symbolic representation:
```json
{
  'sym_variables': [('x1', 'number of regular tickets'), ('x2', 'number of premium tickets')],
  'objective_function': '50*x1 + 100*x2',
  'constraints': ['x1 + x2 <= 1000', 'x2 >= 100', 'x1 >= 5*x2']
}
```

Now, let's implement this problem using Gurobi in Python:

```python
from gurobipy import *

# Create a model
m = Model("Amusement_Park_Ticket_Sales")

# Define variables
x1 = m.addVar(name='regular_tickets', vtype=GRB.CONTINUOUS, lb=0)
x2 = m.addVar(name='premium_tickets', vtype=GRB.CONTINUOUS, lb=0)

# Set the objective function
m.setObjective(50*x1 + 100*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x1 + x2 <= 1000, name='total_tickets')
m.addConstr(x2 >= 100, name='minimum_premium_tickets')
m.addConstr(x1 >= 5*x2, name='regular_vs_premium_ratio')

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution: Regular Tickets = {x1.x}, Premium Tickets = {x2.x}")
    print(f"Maximum Profit: ${50*x1.x + 100*x2.x:.2f}")
else:
    print("No optimal solution found")
```