## Problem Description and Formulation

The tropical farmer has 200 acres of land to grow mangoes and pineapples. The goal is to maximize profit given the constraints on land, nutrient costs, and picking hours.

Let's define the variables:
- \(M\): Acres of mangoes
- \(P\): Acres of pineapples

The objective function to maximize profit is:
\[ \text{Maximize:} \quad 400M + 450P \]

Subject to the constraints:
1. Land constraint: \( M + P \leq 200 \)
2. Nutrient cost constraint: \( 80M + 100P \leq 18000 \)
3. Picking hours constraint: \( 2M + 1.5P \leq 350 \)
4. Non-negativity constraints: \( M \geq 0, P \geq 0 \)

## Gurobi Code

```python
import gurobi

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

    # Define the variables
    M = model.addVar(lb=0, name="Mangoes")
    P = model.addVar(lb=0, name="Pineapples")

    # Objective function: Maximize profit
    model.setObjective(400 * M + 450 * P, gurobi.GRB.MAXIMIZE)

    # Land constraint
    model.addConstr(M + P <= 200, name="Land_Constraint")

    # Nutrient cost constraint
    model.addConstr(80 * M + 100 * P <= 18000, name="Nutrient_Cost_Constraint")

    # Picking hours constraint
    model.addConstr(2 * M + 1.5 * P <= 350, name="Picking_Hours_Constraint")

    # Optimize the model
    model.optimize()

    # Print the status
    if model.status == gurobi.GRB.Status.OPTIMAL:
        print("Optimal solution found.")
        print(f"Acres of Mangoes: {M.varValue}")
        print(f"Acres of Pineapples: {P.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_farmer_problem()
```