## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to maximize profit given certain constraints on the number of coats and shirts a clothing store can sell, along with their respective costs and profits.

### Decision Variables

- Let \(C\) be the number of coats sold.
- Let \(S\) be the number of shirts sold.

### Objective Function

The profit from selling one coat is $12, and the profit from selling one shirt is $8. The objective is to maximize the total profit \(P\), which can be represented as:
\[ P = 12C + 8S \]

### Constraints

1. **Budget Constraint**: The total cost of coats and shirts must not exceed $50,000. Given that a coat costs $55 and a shirt costs $25:
\[ 55C + 25S \leq 50000 \]

2. **Coat Sales Constraint**: At least 60 but at most 100 coats are sold each month:
\[ 60 \leq C \leq 100 \]

3. **Shirt Sales Constraint**: The number of shirts sold is at most four times the number of coats sold:
\[ S \leq 4C \]

4. **Non-Negativity Constraint**: The number of coats and shirts sold cannot be negative:
\[ C \geq 0, S \geq 0 \]
However, given the constraints on \(C\) and \(S\), \(C \geq 0\) and \(S \geq 0\) are implicitly satisfied.

## Gurobi Code Formulation

```python
import gurobi

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

    # Define the decision variables
    C = model.addVar(lb=60, ub=100, name="Coats")  # At least 60, at most 100 coats
    S = model.addVar(name="Shirts")  # No explicit bounds for shirts

    # Objective function: Maximize profit
    model.setObjective(12*C + 8*S, gurobi.GRB.MAXIMIZE)

    # Budget constraint
    model.addConstr(55*C + 25*S <= 50000, name="Budget")

    # Shirts sold is at most four times the number of coats sold
    model.addConstr(S <= 4*C, name="Shirt_vs_Coat")

    # Solve the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution: Coats = {C.varValue}, Shirts = {S.varValue}")
        print(f"Max Profit: ${model.objVal:.2f}")
    else:
        print("The model is infeasible.")

solve_optimization_problem()
```

This Gurobi code formulates the problem as described and solves it to find the optimal number of coats and shirts the store should sell to maximize profit, given the constraints.