## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to maximize profit from selling seats at a concert, given certain constraints.

- There are 250 seats in total.
- First-floor seats make a profit of $100 each.
- Second-floor seats make a profit of $70 each.
- At least 70 seats must be assigned as first-floor seats.
- At least 2 times as many people prefer the second-floor seats to the first-floor seats.

## Symbolic Representation

Let's denote:
- \(x_1\) as the number of first-floor seats sold.
- \(x_2\) as the number of second-floor seats sold.

The objective function to maximize profit (\(P\)) is:
\[ P = 100x_1 + 70x_2 \]

Subject to:
1. \( x_1 + x_2 \leq 250 \) (Total seats constraint)
2. \( x_1 \geq 70 \) (Minimum first-floor seats constraint)
3. \( x_2 \geq 2x_1 \) (Preference constraint for second-floor seats)
4. \( x_1, x_2 \geq 0 \) and are integers (Non-negativity and integrality constraint)

## Gurobi Code

```python
import gurobi

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

    # Define variables
    x1 = model.addVar(name="first_floor_seats", lb=0, ub=250, vtype=gurobi.GRB.INTEGER)
    x2 = model.addVar(name="second_floor_seats", lb=0, ub=250, vtype=gurobi.GRB.INTEGER)

    # Objective function: Maximize profit
    model.setObjective(100 * x1 + 70 * x2, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(x1 + x2 <= 250, name="total_seats")
    model.addConstr(x1 >= 70, name="min_first_floor_seats")
    model.addConstr(x2 >= 2 * x1, name="second_floor_preference")

    # Solve the model
    model.optimize()

    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal profit: ${model.objVal:.2f}")
        print(f"First-floor seats to sell: {x1.varValue:.0f}")
        print(f"Second-floor seats to sell: {x2.varValue:.0f}")
    else:
        print("The problem is infeasible.")

solve_concert_seating_problem()
```

This code defines the optimization problem using Gurobi's Python interface, sets up the objective function and constraints, and then solves the model. If the model is optimal, it prints out the maximum profit and the number of seats to sell on each floor. If the model is infeasible, it indicates that there is no solution that satisfies all the constraints.