## Problem Description and Formulation

The problem requires determining the number of single and couple's rooms to be sold on a cruise ship to maximize profit, given certain constraints.

- The cruise ship has at most 800 rooms.
- A profit of $200 is made on each single room and $1200 on each couple's room.
- At least 125 rooms are reserved for single rooms.
- A minimum of twice as many passengers prefer to travel as a couple and stay in a couple's room than stay in a single's room.

## Symbolic Representation

Let's denote:
- \(S\) as the number of single rooms sold.
- \(C\) as the number of couple's rooms sold.

The objective is to maximize profit \(P = 200S + 1200C\).

Subject to:
1. \(S + C \leq 800\) (Total rooms constraint)
2. \(S \geq 125\) (Minimum single rooms constraint)
3. \(C \geq 2S\) (Couple's rooms preference constraint)
4. \(S, C \geq 0\) and are integers (Non-negativity and integrality constraint)

## Gurobi Code

```python
import gurobipy as gp

# Create a new model
m = gp.Model("CruiseShipProfitMaximization")

# Define variables
S = m.addVar(name="SingleRooms", lb=0, vtype=gp.GRB.INTEGER)
C = m.addVar(name="CoupleRooms", lb=0, vtype=gp.GRB.INTEGER)

# Objective: Maximize profit
m.setObjective(200 * S + 1200 * C, gp.GRB.MAXIMIZE)

# Constraints
m.addConstr(S + C <= 800, name="TotalRooms")
m.addConstr(S >= 125, name="MinSingleRooms")
m.addConstr(C >= 2 * S, name="CouplePreference")

# Solve the model
m.solve()

# Output solution
if m.status == gp.GRB.OPTIMAL:
    print(f"Optimal Solution: Single Rooms = {S.varValue}, Couple Rooms = {C.varValue}")
    print(f"Maximum Profit: ${200 * S.varValue + 1200 * C.varValue}")
else:
    print("No optimal solution found")
```