```json
{
  "sym_variables": [
    ("x0", "hours worked by Ringo"),
    ("x1", "hours worked by Jean"),
    ("x2", "hours worked by Peggy")
  ],
  "objective_function": "2.78*x0**2 + 3.17*x0*x2 + 1.44*x1**2 + 4.25*x2**2 + 1.63*x0 + 9.56*x2",
  "constraints": [
    "3*x0**2 + 10*x1**2 >= 23",
    "10*x1 + 6*x2 >= 16",
    "3*x0 + 10*x1 + 6*x2 >= 16",
    "6*x1 + 12*x2 >= 15",
    "1*x0 + 12*x2 >= 27",
    "1*x0 + 6*x1 + 12*x2 >= 27",
    "13*x0**2 + 4*x2**2 >= 21",
    "13*x0 + 10*x1 >= 10",
    "13*x0 + 10*x1 + 4*x2 >= 10",
    "2*x0 - x2 >= 0",
    "3*x1 - 10*x2 >= 0",
    "10*x1**2 + 6*x2**2 <= 32",
    "3*x0**2 + 10*x1**2 + 6*x2**2 <= 35",
    "1*x0 + 6*x1 <= 72",
    "1*x0**2 + 12*x2**2 <= 95",
    "6*x1 + 12*x2 <= 82"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
ringo = m.addVar(vtype=gp.GRB.INTEGER, name="ringo")
jean = m.addVar(vtype=gp.GRB.CONTINUOUS, name="jean")
peggy = m.addVar(vtype=gp.GRB.INTEGER, name="peggy")

# Set objective function
m.setObjective(2.78*ringo**2 + 3.17*ringo*peggy + 1.44*jean**2 + 4.25*peggy**2 + 1.63*ringo + 9.56*peggy, gp.GRB.MINIMIZE)

# Add constraints
m.addConstr(3*ringo**2 + 10*jean**2 >= 23)
m.addConstr(10*jean + 6*peggy >= 16)
m.addConstr(3*ringo + 10*jean + 6*peggy >= 16)
m.addConstr(6*jean + 12*peggy >= 15)
m.addConstr(ringo + 12*peggy >= 27)
m.addConstr(ringo + 6*jean + 12*peggy >= 27)
m.addConstr(13*ringo**2 + 4*peggy**2 >= 21)
m.addConstr(13*ringo + 10*jean >= 10)
m.addConstr(13*ringo + 10*jean + 4*peggy >= 10)
m.addConstr(2*ringo - peggy >= 0)
m.addConstr(3*jean - 10*peggy >= 0)
m.addConstr(10*jean**2 + 6*peggy**2 <= 32)
m.addConstr(3*ringo**2 + 10*jean**2 + 6*peggy**2 <= 35)
m.addConstr(ringo + 6*jean <= 72)
m.addConstr(ringo**2 + 12*peggy**2 <= 95)
m.addConstr(6*jean + 12*peggy <= 82)


# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    print('ringo:', ringo.x)
    print('jean:', jean.x)
    print('peggy:', peggy.x)
elif m.status == gp.GRB.INFEASIBLE:
    print('The model is infeasible.')
else:
    print('Optimization ended with status %d' % m.status)

```
