## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to maximize profit by determining the optimal number of acres to allocate to growing ylang ylang and vanilla, given certain constraints.

### Variables
- Let \(Y\) be the number of acres allocated to ylang ylang.
- Let \(V\) be the number of acres allocated to vanilla.

### Objective Function
The profit per acre of ylang ylang is $150, and the profit per acre of vanilla is $100. The objective is to maximize the total profit \(P\), which can be represented as:
\[P = 150Y + 100V\]

### Constraints
1. **Total Acres**: The producer has 100 acres available.
\[Y + V \leq 100\]

2. **Minimum Ylang Ylang**: The producer must grow at least 10 acres of ylang ylang.
\[Y \geq 10\]

3. **Minimum Vanilla**: The producer must grow at least 20 acres of vanilla.
\[V \geq 20\]

4. **Ylang Ylang vs. Vanilla**: The producer can grow at most twice the amount of ylang ylang as vanilla.
\[Y \leq 2V\]

5. **Non-Negativity**: Acres cannot be negative, but given the minimum requirements, this is implicitly satisfied.

## Gurobi Code

To solve this problem using Gurobi in Python, we can use the following code:

```python
import gurobi

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

    # Define variables
    Y = model.addVar(lb=0, name="Ylang_Ylang")
    V = model.addVar(lb=0, name="Vanilla")

    # Set bounds based on problem description
    Y.lb = 10  # At least 10 acres of ylang ylang
    V.lb = 20  # At least 20 acres of vanilla

    # Objective function: Maximize profit
    model.setObjective(150 * Y + 100 * V, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(Y + V <= 100, name="Total_Acres")  # Total acres constraint
    model.addConstr(Y <= 2 * V, name="Ylang_Ylang_vs_Vanilla")  # Ylang ylang vs. vanilla constraint

    # Solve the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal acres of Ylang Ylang: {Y.varValue}")
        print(f"Optimal acres of Vanilla: {V.varValue}")
        print(f"Maximum profit: ${model.objVal:.2f}")
    else:
        print("The model is infeasible.")

solve_optimization_problem()
```

This code defines the optimization problem using Gurobi's Python interface, solves it, and prints out the optimal acres for each crop and the maximum achievable profit. If the problem is infeasible, it will indicate that instead.