To solve this optimization problem, we first need to define the decision variables and the objective function. Let's denote the number of acres dedicated to growing pineapples as \(P\) and the number of acres dedicated to growing bananas as \(B\).

The objective is to maximize profit, with each acre of pineapples generating $200 in profit and each acre of bananas generating $150 in profit. Thus, the objective function can be written as:

\[ \text{Maximize:} \quad 200P + 150B \]

Given constraints are:
1. Total land available is 200 acres, so \( P + B \leq 200 \).
2. The farmer can grow at most 4 times the amount of bananas as pineapples, so \( B \leq 4P \).
3. Minimum requirements: \( P \geq 40 \) and \( B \geq 60 \).

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

```python
from gurobipy import *

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

# Define the decision variables
P = m.addVar(lb=40, name="Pineapples")  # Minimum 40 acres of pineapples
B = m.addVar(lb=60, name="Bananas")    # Minimum 60 acres of bananas

# Objective function: Maximize profit
m.setObjective(200*P + 150*B, GRB.MAXIMIZE)

# Constraints
m.addConstr(P + B <= 200, "Total_Land")  # Total land constraint
m.addConstr(B <= 4*P, "Banana_to_Pineapple_Ratio")  # Banana to pineapple ratio

# Optimize the model
m.optimize()

# Print results if the model is optimal
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Pineapples: {P.x} acres")
    print(f"Bananas: {B.x} acres")
    print(f"Total Profit: ${m.objVal}")
else:
    print("No optimal solution found.")
```