## Step 1: Define the symbolic representation of the problem

Let's define the symbolic variables:
- $x_1$ represents the amount invested in the paper industry.
- $x_2$ represents the amount invested in the glass industry.

The objective is to maximize the return on investment. The return from the paper industry is 2% of $x_1$, and the return from the glass industry is 5% of $x_2$. Therefore, the objective function to maximize is $0.02x_1 + 0.05x_2$.

## Step 2: List the constraints

The constraints given are:
1. The total investment is $300,000: $ $x_1 + x_2 \leq 300,000$.
2. A minimum of 30% of the investment must be in the paper industry: $x_1 \geq 0.3 \times 300,000$.
3. At most 50% of the investment can be in the glass industry: $x_2 \leq 0.5 \times 300,000$.
4. Non-negativity constraints: $x_1 \geq 0$ and $x_2 \geq 0$.

However, upon closer inspection, we see that the first constraint should actually be an equality since the company has exactly $300,000 to invest: $x_1 + x_2 = 300,000$.

## 3: Correct and formalize the symbolic representation

The correct symbolic representation is:
- Variables: $x_1$ (paper industry investment), $x_2$ (glass industry investment)
- Objective function: Maximize $0.02x_1 + 0.05x_2$
- Constraints:
  1. $x_1 + x_2 = 300,000$
  2. $x_1 \geq 0.3 \times 300,000$
  3. $x_2 \leq 0.5 \times 300,000$
  4. $x_1 \geq 0$
  5. $x_2 \geq 0$

## 4: Convert to JSON format for clarity

```json
{
'sym_variables': [('x1', 'paper industry investment'), ('x2', 'glass industry investment')],
'objective_function': 'Maximize 0.02x1 + 0.05x2',
'constraints': [
  'x1 + x2 = 300000',
  'x1 >= 0.3 * 300000',
  'x2 <= 0.5 * 300000',
  'x1 >= 0',
  'x2 >= 0'
]
}
```

## 5: Implement in Gurobi Python

```python
import gurobi

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

    # Define variables
    x1 = model.addVar(name="paper_investment", lb=0)
    x2 = model.addVar(name="glass_investment", lb=0)

    # Objective function: Maximize 0.02x1 + 0.05x2
    model.setObjective(0.02 * x1 + 0.05 * x2, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(x1 + x2 == 300000)  # Total investment
    model.addConstr(x1 >= 0.3 * 300000)  # Minimum in paper industry
    model.addConstr(x2 <= 0.5 * 300000)  # Maximum in glass industry

    # Solve the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal investment in paper industry: $", x1.varValue)
        print("Optimal investment in glass industry: $", x2.varValue)
        print("Maximum return: ", 0.02 * x1.varValue + 0.05 * x2.varValue)
    else:
        print("No optimal solution found")

solve_investment_problem()
```