## Problem Description and Formulation

The problem requires maximizing an objective function with two variables: 'hours worked by George' and 'hours worked by Dale'. The objective function to be maximized is:

\[ 5.47 \times (\text{hours worked by George})^2 + 1.32 \times (\text{hours worked by George}) \times (\text{hours worked by Dale}) + 4.27 \times (\text{hours worked by Dale})^2 + 3.04 \times (\text{hours worked by George}) + 1.6 \times (\text{hours worked by Dale}) \]

The problem is subject to several constraints:

1. George's dollar cost per hour is 6.
2. Dale's dollar cost per hour is 15.
3. The total combined dollar cost per hour from hours worked by George and Dale should be at least 37.
4. \(-3 \times (\text{hours worked by George}) + 5 \times (\text{hours worked by Dale}) \geq 0\).
5. The total combined dollar cost per hour from hours worked by George squared plus hours worked by Dale squared must be 44 or less.
6. The total combined dollar cost per hour from hours worked by George plus hours worked by Dale should be 44 at maximum.
7. Hours worked by George can be non-integer.
8. Hours worked by Dale must be a non-fractional (integer) number.

## Gurobi Code Formulation

```python
import gurobi

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

    # Define variables
    G = model.addVar(name="hours_worked_by_George", lb=0, ub=None)  # Non-integer
    D = model.addVar(name="hours_worked_by_Dale", lb=0, ub=None, integrality=gurobi.GRB.INTEGER)  # Integer

    # Objective function
    model.setObjective(5.47 * G**2 + 1.32 * G * D + 4.27 * D**2 + 3.04 * G + 1.6 * D, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(6 * G + 15 * D >= 37, name="total_cost_min")
    model.addConstr(-3 * G + 5 * D >= 0, name="cost_ratio")
    model.addConstr(G**2 + D**2 <= 44, name="cost_squared_max")
    model.addConstr(G + D <= 44, name="total_hours_max")

    # Solve the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Objective: ", model.objVal)
        print("Hours worked by George: ", G.varValue)
        print("Hours worked by Dale: ", D.varValue)
    else:
        print("The model is infeasible")

optimization_problem()
```

This code defines the optimization problem using Gurobi's Python interface, sets up the objective function and constraints according to the problem description, and solves the model. The solution is then printed out, including the optimal values for the hours worked by George and Dale, if the model is feasible.