## Problem Description and Formulation

The problem is a linear programming optimization problem. Lisa wants to maximize her profit by investing in NFTs and crypto-currency with certain constraints.

- The total investment is limited to $5000.
- Each dollar invested in NFTs yields $0.30 profit.
- Each dollar invested in crypto-currency yields $0.40 profit.
- A minimum of 25% of all money invested must be in NFTs.
- At least $2300 must be invested in crypto-currency.

## Symbolic Representation

Let's denote:
- \(x_1\) as the amount invested in NFTs.
- \(x_2\) as the amount invested in crypto-currency.

The objective function to maximize profit (\(P\)) is:
\[ P = 0.30x_1 + 0.40x_2 \]

Subject to:
1. \( x_1 + x_2 \leq 5000 \) (Total investment limit)
2. \( x_1 \geq 0.25(x_1 + x_2) \) (Minimum 25% in NFTs)
3. \( x_2 \geq 2300 \) (Minimum investment in crypto-currency)
4. \( x_1, x_2 \geq 0 \) (Non-negativity constraint)

## Simplifying Constraints

2. \( x_1 \geq 0.25(x_1 + x_2) \) simplifies to \( 0.75x_1 \geq 0.25x_2 \) or \( 3x_1 \geq x_2 \).

## Gurobi Code

```python
import gurobi

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

    # Define variables
    x1 = m.addVar(name="NFTs", lb=0)  # Investment in NFTs
    x2 = m.addVar(name="crypto-currency", lb=0)  # Investment in crypto-currency

    # Objective function: Maximize profit
    m.setObjective(0.30 * x1 + 0.40 * x2, gurobi.GRB.MAXIMIZE)

    # Constraints
    m.addConstr(x1 + x2 <= 5000, name="total_investment_limit")
    m.addConstr(3 * x1 >= x2, name="min_NFTs_percentage")
    m.addConstr(x2 >= 2300, name="min_crypto_investment")

    # Optimize
    m.optimize()

    # Print solution
    if m.status == gurobi.GRB.OPTIMAL:
        print("Optimal profit: ", m.objVal)
        print("Investment in NFTs: ", x1.varValue)
        print("Investment in crypto-currency: ", x2.varValue)
    else:
        print("The problem is infeasible")

lisa_investment_problem()
```