## Problem Description and Formulation

The clothing company produces two types of t-shirts: blue and dark blue. The production of each type of t-shirt requires a certain amount of dye, water, and worker minutes. The company has limited resources available: 1000 units of dye, 1200 units of water, and 8000 worker minutes. The profit per blue t-shirt is $10, and the profit per dark blue t-shirt is $15. The goal is to determine the number of blue and dark blue t-shirts to produce in order to maximize profit.

## Decision Variables

Let \(B\) be the number of blue t-shirts produced and \(D\) be the number of dark blue t-shirts produced.

## Objective Function

The objective is to maximize profit. The profit per blue t-shirt is $10, and the profit per dark blue t-shirt is $15. Therefore, the objective function can be written as:

Maximize \(10B + 15D\)

## Constraints

1. **Dye Constraint**: A blue t-shirt requires 3 units of dye, and a dark blue t-shirt requires 5 units of dye. The company only has 1000 units of dye available.
\[3B + 5D \leq 1000\]

2. **Water Constraint**: A blue t-shirt requires 5 units of water, and a dark blue t-shirt requires 4 units of water. The company only has 1200 units of water available.
\[5B + 4D \leq 1200\]

3. **Worker Minutes Constraint**: A blue t-shirt requires 30 worker minutes, and a dark blue t-shirt requires 25 worker minutes. The company only has 8000 worker minutes available.
\[30B + 25D \leq 8000\]

4. **Non-Negativity Constraints**: The number of t-shirts produced cannot be negative.
\[B \geq 0, D \geq 0\]

## Gurobi Code

```python
import gurobipy as gp

# Create a new model
model = gp.Model("T-Shirt_Production")

# Define the decision variables
B = model.addVar(lb=0, name="Blue_T-Shirts")
D = model.addVar(lb=0, name="Dark_Blue_T-Shirts")

# Define the objective function
model.setObjective(10*B + 15*D, gp.GRB.MAXIMIZE)

# Add the constraints
model.addConstr(3*B + 5*D <= 1000, name="Dye_Constraint")
model.addConstr(5*B + 4*D <= 1200, name="Water_Constraint")
model.addConstr(30*B + 25*D <= 8000, name="Worker_Minutes_Constraint")

# Solve the model
model.optimize()

# Print the solution
if model.status == gp.GRB.OPTIMAL:
    print(f"Optimal Solution: Blue T-Shirts = {B.varValue}, Dark Blue T-Shirts = {D.varValue}")
    print(f"Max Profit: ${model.objVal:.2f}")
else:
    print("The model is infeasible.")
```