## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to minimize the cost of producing a tasty tomato paste that meets certain sugar and acid requirements using two types of tomatoes: cherry tomatoes and cocktail tomatoes.

### Decision Variables

- \(x\): The number of units of cherry tomatoes to use.
- \(y\): The number of units of cocktail tomatoes to use.

### Objective Function

The objective is to minimize the total cost. Given that cherry tomatoes cost $3 per unit and cocktail tomatoes cost $4 per unit, the objective function can be written as:

\[ \text{Minimize:} \quad 3x + 4y \]

### Constraints

1. **Sugar Requirement**: Cherry tomatoes contain 5 grams of sugar per unit, and cocktail tomatoes contain 2.5 grams of sugar per unit. The factory needs at least 350 grams of sugar.
   \[ 5x + 2.5y \geq 350 \]

2. **Acid Requirement**: Cherry tomatoes contain 1.5 grams of acid per unit, and cocktail tomatoes contain 3 grams of acid per unit. The factory needs at least 250 grams of acid.
   \[ 1.5x + 3y \geq 250 \]

3. **Non-Negativity Constraints**: The number of units of each type of tomato cannot be negative.
   \[ x \geq 0, y \geq 0 \]

## Gurobi Code

```python
import gurobi

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

    # Define the decision variables
    x = model.addVar(name="cherry_tomatoes", lb=0, vtype=gurobi.GRB.CONTINUOUS)
    y = model.addVar(name="cocktail_tomatoes", lb=0, vtype=gurobi.GRB.CONTINUOUS)

    # Objective function: Minimize the total cost
    model.setObjective(3*x + 4*y, gurobi.GRB.MINIMIZE)

    # Sugar requirement constraint
    model.addConstr(5*x + 2.5*y >= 350, name="sugar_requirement")

    # Acid requirement constraint
    model.addConstr(1.5*x + 3*y >= 250, name="acid_requirement")

    # Solve the model
    model.optimize()

    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution:")
        print(f"Cherry Tomatoes: {x.varValue} units")
        print(f"Cocktail Tomatoes: {y.varValue} units")
        print(f"Minimum Cost: ${model.objVal:.2f}")
    elif model.status == gurobi.GRB.INFEASIBLE:
        print("The problem is infeasible.")
    else:
        print("The model status is not optimal or infeasible.")

solve_tomato_paste_problem()
```