## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to maximize the total monthly profit of Tim Bakery by determining the optimal number of chocolate and strawberry croissants to produce.

### Decision Variables

Let $x$ be the number of chocolate croissants and $y$ be the number of strawberry croissants.

### Objective Function

The profit per chocolate croissant is $4, and the profit per strawberry croissant is $6. The objective function to maximize the total profit is:

Maximize: $4x + 6y$

### Constraints

1. The store pays $3 for each chocolate croissant and $5 for each strawberry croissant, with a maximum expenditure of $6000:

$3x + 5y \leq 6000$

2. The store expects to sell at most 1200 croissants:

$x + y \leq 1200$

3. Non-negativity constraints:

$x \geq 0, y \geq 0$

## Gurobi Code

```python
import gurobi

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

    # Define decision variables
    x = model.addVar(name="chocolate_croissants", lb=0, ub=None, obj=4)
    y = model.addVar(name="strawberry_croissants", lb=0, ub=None, obj=6)

    # Add constraints
    model.addConstr(x + y <= 1200, name="croissant_sales_limit")
    model.addConstr(3*x + 5*y <= 6000, name="expenditure_limit")

    # Set the model objective to maximize
    model.setObjective(x.obj + y.obj, gurobi.GRB.MAXIMIZE)

    # Optimize the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal Solution:")
        print(f"Chocolate Croissants: {x.x}")
        print(f"Strawberry Croissants: {y.x}")
        print(f"Total Profit: {model.objVal}")
    else:
        print("The model is infeasible or unbounded.")

solve_croissant_problem()
```