## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to minimize the cost of a mixture of perfume made from essential oils and fruit scents while meeting certain constraints.

### Decision Variables

- Let \(x\) be the number of units of essential oil used.
- Let \(y\) be the number of units of fruit scent used.

### Objective Function

The cost of a unit of essential oil is $3.50, and the cost of a unit of fruit scent is $2. The objective is to minimize the total cost:

\[ \text{Minimize:} \quad 3.50x + 2y \]

### Constraints

1. **Aromatic Notes Constraint**: A unit of essential oil contains 3 units of aromatic notes, and a unit of fruit scent contains 10 units. The mixture must contain at least 6 units of aromatic notes but at most 8 units.

\[ 6 \leq 3x + 10y \leq 8 \]

This can be broken down into two constraints:

\[ 3x + 10y \geq 6 \]
\[ 3x + 10y \leq 8 \]

2. **Duration Constraint**: A unit of essential oil lasts 9 hours, and a unit of fruit scent lasts 4 hours. The mixture must last at least 7 hours.

\[ 9x + 4y \geq 7 \]

3. **Non-Negativity Constraint**: The number of units of each ingredient cannot be negative.

\[ x \geq 0, y \geq 0 \]

## Gurobi Code

```python
import gurobi

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

    # Define variables
    x = model.addVar(name="essential_oil", lb=0, vtype=gurobi.GRB.CONTINUOUS)
    y = model.addVar(name="fruit_scent", lb=0, vtype=gurobi.GRB.CONTINUOUS)

    # Objective function: Minimize cost
    model.setObjective(3.50 * x + 2 * y, gurobi.GRB.MINIMIZE)

    # Constraints
    model.addConstr(3 * x + 10 * y >= 6, name="aromatic_notes_min")
    model.addConstr(3 * x + 10 * y <= 8, name="aromatic_notes_max")
    model.addConstr(9 * x + 4 * y >= 7, name="duration")

    # Solve the model
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal solution found.")
        print(f"Essential Oil: {x.varValue}")
        print(f"Fruit Scent: {y.varValue}")
        print(f"Cost: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_perfume_mixture()
```