## Problem Description and Formulation

The problem is a linear programming (LP) optimization problem where we need to maximize the return on investment (ROI) from investing $300,000 in four different tech companies: a video game company, a camera company, a cell phone company, and a laptop company. The ROI for each company is given as 7%, 3%, 9%, and 7% respectively.

There are restrictions on the investments:

1. The amount invested in the laptop company cannot exceed the amount invested in the video game company.
2. The amount invested in the camera company cannot exceed the amount invested in the cell phone company.
3. At most 15% of the total investment can be in the laptop company.

## Symbolic Representation

Let's denote the amount invested in each company as:

- \(x_1\): video game company
- \(x_2\): camera company
- \(x_3\): cell phone company
- \(x_4\): laptop company

The objective function to maximize the total return on investment is:

\[ \text{Maximize:} \quad 0.07x_1 + 0.03x_2 + 0.09x_3 + 0.07x_4 \]

Subject to:

1. \( x_4 \leq x_1 \)
2. \( x_2 \leq x_3 \)
3. \( x_4 \leq 0.15 \times 300,000 \)
4. \( x_1 + x_2 + x_3 + x_4 \leq 300,000 \) (total investment constraint)
5. \( x_1, x_2, x_3, x_4 \geq 0 \) (non-negativity constraint)

## Gurobi Code

```python
import gurobi

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

    # Define the variables
    x1 = model.addVar(lb=0, name="video_game_company")
    x2 = model.addVar(lb=0, name="camera_company")
    x3 = model.addVar(lb=0, name="cell_phone_company")
    x4 = model.addVar(lb=0, name="laptop_company")

    # Objective function: Maximize the return on investment
    model.setObjective(0.07*x1 + 0.03*x2 + 0.09*x3 + 0.07*x4, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(x4 <= x1, name="laptop_vs_video_game")
    model.addConstr(x2 <= x3, name="camera_vs_cell_phone")
    model.addConstr(x4 <= 0.15 * 300000, name="laptop_limit")
    model.addConstr(x1 + x2 + x3 + x4 <= 300000, name="total_investment")

    # Optimize the model
    model.optimize()

    # Print the results
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal Solution:")
        print(f"Video Game Company: ${x1.varValue:.2f}")
        print(f"Camera Company: ${x2.varValue:.2f}")
        print(f"Cell Phone Company: ${x3.varValue:.2f}")
        print(f"Laptop Company: ${x4.varValue:.2f}")
        print(f"Max Return: ${model.objVal:.2f}")
    else:
        print("No optimal solution found.")

solve_investment_problem()
```