## Problem Description and Formulation

The problem is a linear programming optimization problem. We need to maximize the profit from selling premium and regular seats at a concert, given certain constraints.

### Variables
- $P$ = Number of premium seats sold
- $R$ = Number of regular seats sold

### Objective Function
The objective is to maximize the total profit: $150P + 50R$

### Constraints
1. Total seats: $P + R \leq 300$ (since there are 300 seats in total)
2. Minimum premium seats: $P \geq 50$ (at least 50 seats will be assigned as premium seats)
3. Preference for regular seats: $R \geq 3P$ (at least 3 times as many people prefer the regular seats to the premium seats)
4. Non-negativity: $P \geq 0, R \geq 0$ (number of seats cannot be negative)

## Gurobi Code

```python
import gurobi

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

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

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

    # Constraints
    model.addConstr(P + R <= 300, name="Total_Seats")
    model.addConstr(P >= 50, name="Min_Premium_Seats")
    model.addConstr(R >= 3 * P, name="Preference_Regular_Seats")

    # Optimize
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution: Premium Seats = {P.varValue}, Regular Seats = {R.varValue}")
        print(f"Maximum Profit: ${150 * P.varValue + 50 * R.varValue}")
    else:
        print("No optimal solution found.")

solve_concert_seating_problem()
```