## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The goal is to maximize the profit of a student group that makes chocolate chip and oatmeal cookies, given the time constraints for gathering ingredients, mixing, and baking.

Let's define the decision variables:

* $x$: number of batches of chocolate chip cookies
* $y$: number of batches of oatmeal cookies

The objective function is to maximize the profit:

* Profit per batch of chocolate chip cookies: $12
* Profit per batch of oatmeal cookies: $15

The constraints are:

* Gathering ingredients: $10x + 8y \leq 1000$
* Mixing: $20x + 15y \leq 1200$
* Baking: $50x + 30y \leq 3000$
* Non-negativity: $x \geq 0, y \geq 0$

## Gurobi Code

```python
import gurobi

# Create a new model
model = gurobi.Model()

# Define the decision variables
x = model.addVar(name="chocolate_chip", lb=0, ub=gurobi.GRB.INFINITY)
y = model.addVar(name="oatmeal", lb=0, ub=gurobi.GRB.INFINITY)

# Define the objective function
model.setObjective(12 * x + 15 * y, gurobi.GRB.MAXIMIZE)

# Define the constraints
model.addConstr(10 * x + 8 * y <= 1000, name="gathering_ingredients")
model.addConstr(20 * x + 15 * y <= 1200, name="mixing")
model.addConstr(50 * x + 30 * y <= 3000, name="baking")

# Optimize the model
model.optimize()

# Print the solution
if model.status == gurobi.GRB.OPTIMAL:
    print(f"Optimal solution: x = {x.varValue}, y = {y.varValue}")
    print(f"Maximum profit: ${model.objVal:.2f}")
else:
    print("No optimal solution found")
```