To solve this optimization problem, we first need to translate the given conditions into mathematical expressions. Let's denote:

- \(P\) as the number of premium seats.
- \(R\) as the number of regular seats.

Given information:
1. Total seats = 300, so \(P + R = 300\).
2. Profit per premium seat = $150.
3. Profit per regular seat = $50.
4. At least 50 seats are assigned as premium seats, so \(P \geq 50\).
5. At least 3 times as many people prefer the regular seats to the premium seats, so \(R \geq 3P\).

The objective is to maximize profit, which can be represented as \(150P + 50R\).

Now, let's express these conditions and the objective in Gurobi code:

```python
from gurobipy import *

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

# Define variables
P = m.addVar(vtype=GRB.INTEGER, name="Premium_Seats", lb=0)
R = m.addVar(vtype=GRB.INTEGER, name="Regular_Seats", lb=0)

# Constraints
m.addConstr(P + R == 300, "Total_Seats")
m.addConstr(P >= 50, "Minimum_Premium_Seats")
m.addConstr(R >= 3*P, "Preference_For_Regular_Seats")

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

# Optimize model
m.optimize()

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

```