## Problem Description and Formulation

The problem is a linear programming optimization problem. Lucas wants to maximize his profit by planting mango trees and durian trees on his 150 acres of tropical land. The goal is to determine the optimal number of acres for each type of tree.

### Decision Variables

Let \(M\) be the number of acres for mango trees and \(D\) be the number of acres for durian trees.

### Objective Function

The profit per acre for mango trees is $200, and for durian trees, it is $300. The objective is to maximize the total profit:

\[ \text{Maximize:} \quad 200M + 300D \]

### Constraints

1. **Land Constraint:** Lucas has 150 acres of land available.
\[ M + D \leq 150 \]

2. **Budget Constraint:** Mango trees cost $150 per acre to maintain, and durian trees cost $180 per acre. Lucas has a budget of $20,000.
\[ 150M + 180D \leq 20000 \]

3. **Labor Constraint:** Mango trees require 6 days of labor per acre, and durian trees require 3 days of labor per acre. Lucas has 700 days of labor available.
\[ 6M + 3D \leq 700 \]

4. **Non-Negativity Constraint:** The number of acres for each type of tree cannot be negative.
\[ M \geq 0, D \geq 0 \]

## Gurobi Code

```python
import gurobi

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

    # Define the decision variables
    M = model.addVar(lb=0, name="Mango_Acres")
    D = model.addVar(lb=0, name="Durian_Acres")

    # Objective function: Maximize profit
    model.setObjective(200 * M + 300 * D, gurobi.GRB.MAXIMIZE)

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

    # Budget constraint
    model.addConstr(150 * M + 180 * D <= 20000, name="Budget_Constraint")

    # Labor constraint
    model.addConstr(6 * M + 3 * D <= 700, name="Labor_Constraint")

    # Optimize the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution:")
        print(f"Mango Acres: {M.varValue}")
        print(f"Durian Acres: {D.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("The model is infeasible.")

if __name__ == "__main__":
    solve_optimization_problem()
```