## Problem Description and Formulation

The problem is a linear programming optimization problem. Party Supplies Ltd wants to maximize its total profit by producing the optimal number of superhero costumes and fantasy costumes given certain constraints.

Let's define the decision variables:
- \(x\): the number of superhero costumes to produce
- \(y\): the number of fantasy costumes to produce

The objective function to maximize the total profit is:
\[ \text{Maximize:} \quad 24x + 32y \]

The constraints are:
1. Time constraint: It takes 20 minutes to make a superhero costume and 15 minutes to make a fantasy costume, with 3000 minutes available.
\[ 20x + 15y \leq 3000 \]

2. Market research constraint: The company should make at least 3 times as many fantasy costumes as superhero costumes.
\[ y \geq 3x \]

3. Non-negativity constraint: The number of costumes cannot be negative.
\[ x \geq 0, y \geq 0 \]

## Gurobi Code

To solve this problem using Gurobi in Python, we will use the following code:

```python
import gurobi

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

    # Define the decision variables
    x = model.addVar(name="superhero_costumes", lb=0, vtype=gurobi.GRB.INTEGER)
    y = model.addVar(name="fantasy_costumes", lb=0, vtype=gurobi.GRB.INTEGER)

    # Objective function: Maximize 24x + 32y
    model.setObjective(24 * x + 32 * y, sense=gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(20 * x + 15 * y <= 3000, name="time_constraint")
    model.addConstr(y >= 3 * x, name="market_research_constraint")

    # Solve the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution found.")
        print(f"Superhero costumes: {x.varValue}")
        print(f"Fantasy costumes: {y.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_party_supplies_problem()
```

This code defines the problem in Gurobi, solves it, and prints out the optimal number of superhero and fantasy costumes to produce in order to maximize profit, given the constraints.