## Problem Description and Formulation

The problem requires maximizing the objective function: $2.08 \times \text{agave} + 3.75 \times \text{orange trees}$, subject to several constraints.

### Constraints

1. **Resilience Index of Agave**: The resilience index of agave is given as 13.
2. **Cost of Agave**: The cost of agave is $9.
3. **Resilience Index of Orange Trees**: Each orange tree has a resilience index of 15.
4. **Cost of Orange Trees**: Each orange tree costs $12.
5. **Total Resilience Index**: The total combined resilience index from agave and orange trees must be $\geq 37$ and $\leq 43$.
6. **Total Cost**: The total cost must be $\geq 42$ and $\leq 85$.
7. **Agave and Orange Trees Relationship**: $-4 \times \text{agave} + 7 \times \text{orange trees} \geq 0$.
8. **Non-Fractional Requirement**: Both agave and orange trees must be non-fractional (integer).

### Gurobi Formulation

```python
import gurobi as gp

# Create a new model
m = gp.Model("optimization_problem")

# Define variables
agave = m.addVar(name="agave", vtype=gp.GRB.INTEGER)
orange_trees = m.addVar(name="orange_trees", vtype=gp.GRB.INTEGER)

# Objective function
m.setObjective(2.08 * agave + 3.75 * orange_trees, gp.GRB.MAXIMIZE)

# Constraints
m.addConstr(13 * agave + 15 * orange_trees >= 37, name="resilience_index_min")
m.addConstr(13 * agave + 15 * orange_trees <= 43, name="resilience_index_max")
m.addConstr(9 * agave + 12 * orange_trees >= 42, name="cost_min")
m.addConstr(9 * agave + 12 * orange_trees <= 85, name="cost_max")
m.addConstr(-4 * agave + 7 * orange_trees >= 0, name="agave_orange_relationship")

# Solve the model
m.optimize()

# Print the solution
if m.status == gp.GRB.OPTIMAL:
    print("Optimal Solution:")
    print(f"Agave: {agave.varValue}")
    print(f"Orange Trees: {orange_trees.varValue}")
    print(f"Objective: {m.objVal}")
else:
    print("No optimal solution found.")
```