## Problem Description and Formulation

The luxury hotel has 500 rooms and wants to maximize its profit by selling regular and premium rooms. The profit on each regular room is $100, and on each premium room is $500. The hotel must reserve at least 100 rooms for regular customers. Additionally, there is a constraint that the number of customers preferring to stay in a premium room must be at least twice the number staying in a regular room.

## Symbolic Representation

Let's denote:
- \(R\) as the number of regular rooms sold,
- \(P\) as the number of premium rooms sold.

The objective is to maximize the profit \(Z = 100R + 500P\).

Subject to:
1. \(R + P \leq 500\) (Total rooms constraint),
2. \(R \geq 100\) (Minimum regular rooms constraint),
3. \(P \geq 2R\) (Premium rooms vs. regular rooms constraint),
4. \(R \geq 0, P \geq 0\) (Non-negativity constraints).

## Gurobi Code

```python
import gurobi

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

    # Define variables
    R = model.addVar(lb=0, name="Regular_Rooms")
    P = model.addVar(lb=0, name="Premium_Rooms")

    # Objective function: Maximize profit
    model.setObjective(100*R + 500*P, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(R + P <= 500, name="Total_Rooms")
    model.addConstr(R >= 100, name="Min_Regular_Rooms")
    model.addConstr(P >= 2*R, name="Premium_vs_Regular")

    # Optimize
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution:")
        print(f"Regular Rooms: {R.varValue}")
        print(f"Premium Rooms: {P.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_hotel_room_optimization()
```