To solve the given optimization problem, we need to define variables and constraints based on the natural language description. Let's denote:

- \(x_1\) as the number of first-floor seats sold,
- \(x_2\) as the number of second-floor seats sold.

Given information:
- Total seats = 250
- Profit per first-floor seat = $100
- Profit per second-floor seat = $70
- Minimum first-floor seats to be assigned = 70
- Preference for second-floor seats is at least twice that of first-floor seats, implying \(x_2 \geq 2x_1\).

Objective: Maximize profit \(P = 100x_1 + 70x_2\), subject to the constraints.

Constraints:
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 for second-floor seats constraint)
4. \(x_1, x_2 \geq 0\) (Non-negativity constraints)

Now, let's translate this problem into Gurobi code in Python:

```python
from gurobipy import *

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

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

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

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

# Solve the model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"First-floor seats: {x1.x}")
    print(f"Second-floor seats: {x2.x}")
    print(f"Maximum profit: ${100*x1.x + 70*x2.x}")
else:
    print("No optimal solution found")
```