## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to maximize the profit of a wine company that produces two types of wine: regular and premium. The company wants to determine the optimal number of bottles of each type of wine to produce per day.

### Decision Variables

* $x_1$: Number of bottles of regular wine produced per day
* $x_2$: Number of bottles of premium wine produced per day

### Objective Function

The profit per bottle of regular wine is $20, and the profit per bottle of premium wine is $50. The objective function is to maximize the total profit:

Maximize: $20x_1 + 50x_2$

### Constraints

1. Demand constraints:
	* $x_1 \leq 80$ (at most 80 bottles of regular wine per day)
	* $x_2 \leq 50$ (at most 50 bottles of premium wine per day)
2. Supply constraint:
	* $x_1 + x_2 \leq 120$ (at most 120 bottles of either type per day)
3. Non-negativity constraints:
	* $x_1 \geq 0$ (number of bottles of regular wine cannot be negative)
	* $x_2 \geq 0$ (number of bottles of premium wine cannot be negative)

## Gurobi Code

```python
import gurobipy as gp

# Create a new model
m = gp.Model("Wine Production")

# Define decision variables
x1 = m.addVar(lb=0, name="Regular_Wine")
x2 = m.addVar(lb=0, name="Premium_Wine")

# Define objective function
m.setObjective(20*x1 + 50*x2, gp.GRB.MAXIMIZE)

# Add demand constraints
m.addConstr(x1 <= 80, name="Regular_Demand")
m.addConstr(x2 <= 50, name="Premium_Demand")

# Add supply constraint
m.addConstr(x1 + x2 <= 120, name="Supply")

# Optimize the model
m.optimize()

# Print the solution
if m.status == gp.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Regular Wine: {x1.varValue} bottles")
    print(f"Premium Wine: {x2.varValue} bottles")
    print(f"Max Profit: ${m.objVal:.2f}")
else:
    print("No optimal solution found.")
```

This code defines the optimization problem using Gurobi's Python interface, solves the problem, and prints the optimal solution if one is found.