## Problem Description and Formulation

The ice cream bar sells two types of ice cream cones: chocolate and vanilla. The goal is to maximize profit given certain constraints on the number of cones of each type that can be sold.

### Decision Variables
- \(x\): Number of chocolate ice cream cones to sell
- \(y\): Number of vanilla ice cream cones to sell

### Objective Function
Maximize profit \(P = 2x + 1.5y\)

### Constraints
1. \(x \geq 30\) (At least 30 chocolate ice cream cones must be sold)
2. \(x \leq 50\) (No more than 50 chocolate ice cream cones can be sold)
3. \(y \geq 20\) (At least 20 vanilla ice cream cones must be sold)
4. \(y \leq 60\) (No more than 60 vanilla ice cream cones can be sold)
5. \(x + y \leq 70\) (In total, no more than 70 items can be sold)

## Gurobi Code

```python
import gurobipy as gp

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

# Decision variables
x = m.addVar(lb=30, ub=50, name="chocolate_cones")
y = m.addVar(lb=20, ub=60, name="vanilla_cones")

# Objective function: Maximize profit
m.setObjective(2*x + 1.5*y, gp.GRB.MAXIMIZE)

# Constraint: Total cones sold cannot exceed 70
m.addConstraint(x + y <= 70)

# Solve the model
m.solve()

# Output the solution
if m.status == gp.GRB.OPTIMAL:
    print(f"Optimal solution: Sell {x.varValue} chocolate cones and {y.varValue} vanilla cones.")
    print(f"Maximum profit: ${2*x.varValue + 1.5*y.varValue:.2f}")
else:
    print("No optimal solution found.")
```