To solve this optimization problem, we need to define the decision variables, objective function, and constraints. Let's denote:

- \(M\) as the number of acres of mangoes to be grown.
- \(P\) as the number of acres of pineapples to be grown.

The objective is to maximize profit. The profit per acre from mangoes is $400, and from pineapples is $450. Therefore, the total profit can be represented as \(400M + 450P\).

There are two main constraints:
1. **Nutrient Cost Constraint**: The farmer has a budget of $18,000 for nutrients. Mangoes cost $80 per acre, and pineapples cost $100 per acre. This gives us the constraint \(80M + 100P \leq 18000\).
2. **Picking Time Constraint**: The farmer has 350 hours available for picking. Mangoes require 2 hours per acre, and pineapples require 1.5 hours per acre. Thus, we have \(2M + 1.5P \leq 350\).
3. **Land Availability Constraint**: The farmer only has 200 acres of land. Therefore, \(M + P \leq 200\).

Additionally, \(M \geq 0\) and \(P \geq 0\) because the number of acres cannot be negative.

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

```python
from gurobipy import *

# Create a model
m = Model("Tropical_Farmer")

# Define decision variables
M = m.addVar(vtype=GRB.CONTINUOUS, name="Mangoes", lb=0)
P = m.addVar(vtype=GRB.CONTINUOUS, name="Pineapples", lb=0)

# Set the objective function
m.setObjective(400*M + 450*P, GRB.MAXIMIZE)

# Add constraints
m.addConstr(80*M + 100*P <= 18000, "Nutrient_Budget")
m.addConstr(2*M + 1.5*P <= 350, "Picking_Time")
m.addConstr(M + P <= 200, "Land_Availability")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Mangoes: {M.x}")
    print(f"Pineapples: {P.x}")
    print(f"Maximum Profit: {m.objVal}")
else:
    print("No optimal solution found")

```