## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to maximize the return on investment for a client with $60,000 to invest over a 1-year term. The client can invest in a trust yielding a 2% return or a savings account yielding a 3% return. The constraints are:

1. At least 15% of the investment must be placed in the trust.
2. At most 80% of the investment can be placed in the savings account.

## Symbolic Representation

Let's denote:
- \(T\) as the amount invested in the trust,
- \(S\) as the amount invested in the savings account.

The objective function to maximize the total return on investment is:
\[ \text{Maximize:} \quad 0.02T + 0.03S \]

Subject to:
1. \( T + S \leq 60,000 \) (total investment constraint)
2. \( T \geq 0.15 \times 60,000 \) (minimum trust investment constraint)
3. \( S \leq 0.80 \times 60,000 \) (maximum savings account investment constraint)
4. \( T \geq 0 \) and \( S \geq 0 \) (non-negativity constraints)

## Gurobi Code

```python
import gurobi

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

    # Define variables
    T = model.addVar(name="Trust_Investment", lb=0)
    S = model.addVar(name="Savings_Account_Investment", lb=0)

    # Objective function: Maximize 0.02T + 0.03S
    model.setObjective(0.02 * T + 0.03 * S, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(T + S <= 60000, name="Total_Investment_Constraint")
    model.addConstr(T >= 0.15 * 60000, name="Minimum_Trust_Constraint")
    model.addConstr(S <= 0.80 * 60000, name="Maximum_Savings_Constraint")

    # Optimize model
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Trust Investment: ${T.varValue:.2f}")
        print(f"Optimal Savings Account Investment: ${S.varValue:.2f}")
        print(f"Optimal Return: ${0.02 * T.varValue + 0.03 * S.varValue:.2f}")
    else:
        print("No optimal solution found.")

solve_investment_problem()
```