To solve this optimization problem, we need to define the decision variables, objective function, and constraints based on the given information. 

Let's denote:
- \(L\) as the number of acres for growing lavender,
- \(T\) as the number of acres for growing tulips.

The objective is to maximize profit. Given that the profit per acre of lavender is $250 and the profit per acre of tulips is $200, the total profit \(P\) can be represented by the equation:
\[ P = 250L + 200T \]

There are several constraints based on the problem description:
1. The gardener has 50 acres available in total: 
\[ L + T \leq 50 \]
2. The gardener must grow at least 5 acres of lavender:
\[ L \geq 5 \]
3. The gardener must grow at least 8 acres of tulips:
\[ T \geq 8 \]
4. The gardener can grow at most twice the amount of lavender as tulips:
\[ L \leq 2T \]

Now, let's translate these conditions into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
m = Model("Gardener_Optimization")

# Define decision variables
L = m.addVar(name="lavender_acres", lb=0)  # Acres for lavender, lower bound 0
T = m.addVar(name="tulip_acres", lb=0)    # Acres for tulips, lower bound 0

# Objective function: Maximize profit
m.setObjective(250*L + 200*T, GRB.MAXIMIZE)

# Constraints
m.addConstr(L + T <= 50, name="total_acres")     # Total acres constraint
m.addConstr(L >= 5, name="min_lavender_acres")    # Minimum lavender acres
m.addConstr(T >= 8, name="min_tulip_acres")       # Minimum tulip acres
m.addConstr(L <= 2*T, name="lavender_to_tulip_ratio")  # Lavender to tulip ratio

# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Lavender acres: {L.x}")
    print(f"Tulip acres: {T.x}")
    print(f"Total profit: ${250*L.x + 200*T.x:.2f}")
else:
    print("No optimal solution found")
```