## Problem Description and Formulation

The farmer has 200 acres of land to grow oranges and grapefruits. The goal is to maximize profit given the following constraints:

1. The farmer must grow at least 60 acres of oranges.
2. The farmer must grow at least 50 acres of grapefruits.
3. The farmer prefers to grow more grapefruits than oranges but can grow at most twice the amount of grapefruits as oranges.
4. The total land available is 200 acres.
5. The profit per acre of oranges is $200, and the profit per acre of grapefruits is $220.

## Symbolic Representation

Let's denote:
- \(x\) as the acres of oranges to be grown,
- \(y\) as the acres of grapefruits to be grown.

The objective function to maximize profit is:
\[ \text{Maximize:} \quad 200x + 220y \]

Subject to:
1. \( x \geq 60 \)
2. \( y \geq 50 \)
3. \( y \geq x \)
4. \( y \leq 2x \)
5. \( x + y \leq 200 \)

## Gurobi Code

```python
import gurobi

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

    # Define variables
    x = model.addVar(lb=0, name="acres_of_oranges")
    y = model.addVar(lb=0, name="acres_of_grapefruits")

    # Objective function: Maximize profit
    model.setObjective(200*x + 220*y, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(x >= 60, name="min_oranges")
    model.addConstr(y >= 50, name="min_grapefruits")
    model.addConstr(y >= x, name="more_grapefruits_than_oranges")
    model.addConstr(y <= 2*x, name="at_most_twice_grapefruits")
    model.addConstr(x + y <= 200, name="total_land")

    # Solve the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal acres of oranges: {x.varValue}")
        print(f"Optimal acres of grapefruits: {y.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("The model is infeasible")

solve_farmer_problem()
```