## Problem Description and Formulation

The problem requires maximizing the profit from selling cushioned and regular seats on a bus with 150 seats. The profit on each cushioned seat is $30, and on each regular seat is $10. There are two main constraints:

1. At least 50 seats must be cushioned.
2. At least twice as many people prefer to travel by regular seats than by cushioned seats.

## Symbolic Representation

Let's denote:
- \(C\) as the number of cushioned seats to be sold.
- \(R\) as the number of regular seats to be sold.

The objective function to maximize profit (\(P\)) is:
\[ P = 30C + 10R \]

Subject to:
1. \( C \geq 50 \) (at least 50 seats must be cushioned)
2. \( R \geq 2C \) (at least twice as many regular seats as cushioned seats)
3. \( C + R \leq 150 \) (total seats cannot exceed 150)

## Gurobi Code

```python
import gurobi

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

    # Define variables
    C = m.addVar(lb=0, name="Cushioned_Seats")
    R = m.addVar(lb=0, name="Regular_Seats")

    # Objective function: Maximize profit
    m.setObjective(30*C + 10*R, gurobi.GRB.MAXIMIZE)

    # Constraints
    m.addConstr(C >= 50, name="Min_Cushioned_Seats")
    m.addConstr(R >= 2*C, name="Regular_vs_Cushioned")
    m.addConstr(C + R <= 150, name="Total_Seats")

    # Optimize
    m.optimize()

    # Print solution
    if m.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution: Cushioned Seats = {C.varValue}, Regular Seats = {R.varValue}")
        print(f"Max Profit: ${30*C.varValue + 10*R.varValue}")
    else:
        print("No optimal solution found.")

solve_seats_allocation()
```