## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to maximize profit by determining the number of winter jackets and rain jackets to produce daily, given certain constraints.

### Decision Variables

- \(W\): Number of winter jackets produced daily.
- \(R\): Number of rain jackets produced daily.

### Objective Function

The objective is to maximize profit. Each winter jacket results in a $5 loss, and each rain jacket results in a $50 profit. Therefore, the objective function can be formulated as:

\[ \text{Maximize:} \quad 50R - 5W \]

### Constraints

1. **Factory Limitations:**
   - At most 60 winter jackets can be made daily: \( W \leq 60 \)
   - At most 70 rain jackets can be made daily: \( R \leq 70 \)

2. **Demand Projections:**
   - At least 30 winter jackets daily: \( W \geq 30 \)
   - At least 35 rain jackets daily: \( R \geq 35 \)

3. **Contract Requirement:**
   - A total of at least 80 jackets must be made daily: \( W + R \geq 80 \)

4. **Non-Negativity Constraints:**
   - \( W \geq 0 \) and \( R \geq 0 \), but these are partially covered by the demand projections.

## Gurobi Code

```python
import gurobi

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

    # Define decision variables
    W = model.addVar(lb=30, ub=60, name="Winter_Jackets")  # At least 30, at most 60
    R = model.addVar(lb=35, ub=70, name="Rain_Jackets")  # At least 35, at most 70

    # Objective function: Maximize 50R - 5W
    model.setObjective(50*R - 5*W, gurobi.GRB.MAXIMIZE)

    # Constraint: W + R >= 80
    model.addConstr(W + R >= 80, name="Total_Jackets")

    # Solve the model
    model.optimize()

    # Print the results
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution found.")
        print(f"Winter Jackets: {W.varValue}")
        print(f"Rain Jackets: {R.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_jacket_production()
```