## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to maximize profit by determining the number of moving seat tickets and regular seat tickets to sell, given certain constraints.

### Decision Variables

- \(x\): The number of moving seat tickets sold.
- \(y\): The number of regular seat tickets sold.

### Objective Function

The profit made on each moving seat ticket is $15, and on each regular seat ticket is $10. The objective is to maximize the total profit \(P = 15x + 10y\).

### Constraints

1. **Total Capacity Constraint**: The movie theatre can seat at most 100 people. Therefore, \(x + y \leq 100\).
2. **Minimum Moving Seats Constraint**: The theatre reserves at least 15 seats to be moving seats. Thus, \(x \geq 15\).
3. **Preference Constraint**: At least 3 times as many people prefer sitting in regular seats than in moving seats. This implies \(y \geq 3x\).
4. **Non-Negativity Constraint**: The number of tickets sold cannot be negative. Hence, \(x \geq 0\) and \(y \geq 0\).

However, since \(x \geq 15\) is specified, the \(x \geq 0\) constraint is implicitly satisfied.

## Gurobi Code

```python
import gurobi

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

    # Define the decision variables
    x = model.addVar(lb=15, name="moving_seats")  # At least 15 moving seats
    y = model.addVar(name="regular_seats")

    # Objective function: Maximize profit
    model.setObjective(15 * x + 10 * y, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(x + y <= 100, name="total_capacity")
    model.addConstr(y >= 3 * x, name="preference_constraint")
    model.addConstr(y >= 0, name="non_negativity_y")  # Explicitly adding non-negativity for y

    # Optimize the model
    model.optimize()

    # Print the results
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal moving seats: {x.varValue}")
        print(f"Optimal regular seats: {y.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("The model is infeasible")

solve_movie_theatre_problem()
```

This code defines the optimization problem as described, using Gurobi to find the optimal number of moving and regular seat tickets to sell in order to maximize profit, subject to the given constraints.