## Problem Description and Formulation

The problem involves determining a daily production plan for Tom Designs to minimize the cost of meeting the company's daily demands for three types of coats: long, short, and mini. The production occurs in two factories: north and south, each with different production rates and costs.

### Decision Variables

- \(x_n\): The number of hours to run the north factory.
- \(x_s\): The number of hours to run the south factory.

### Objective Function

The objective is to minimize the total cost of running the factories. The cost to run the north factory for an hour is $200, and the cost to run the south factory for an hour is $400. Therefore, the objective function is:

\[ \text{Minimize:} \quad 200x_n + 400x_s \]

### Constraints

1. **Production Constraints:**
   - Long coats: \(20x_n + 30x_s \geq 75\)
   - Short coats: \(15x_n + 25x_s \geq 30\)
   - Mini coats: \(10x_n + 30x_s \geq 40\)

2. **Non-Negativity Constraints:**
   - \(x_n \geq 0\)
   - \(x_s \geq 0\)

## Gurobi Code

```python
import gurobi

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

    # Decision variables
    x_n = model.addVar(lb=0, name="North_Factory_Hours")
    x_s = model.addVar(lb=0, name="South_Factory_Hours")

    # Objective function: Minimize cost
    model.setObjective(200 * x_n + 400 * x_s, gurobi.GRB.MINIMIZE)

    # Production constraints
    model.addConstr(20 * x_n + 30 * x_s >= 75, name="Long_Coats")
    model.addConstr(15 * x_n + 25 * x_s >= 30, name="Short_Coats")
    model.addConstr(10 * x_n + 30 * x_s >= 40, name="Mini_Coats")

    # Solve the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal Solution:")
        print(f"North Factory Hours: {x_n.varValue}")
        print(f"South Factory Hours: {x_s.varValue}")
        print(f"Total Cost: {model.objVal}")
    else:
        print("The model is infeasible or unbounded.")

solve_production_problem()
```