To solve the given optimization problem, we first need to formulate it mathematically and then translate it into Gurobi code. The problem involves minimizing an objective function subject to several constraints.

### Mathematical Formulation:

#### Objective Function:
Minimize \(3.72K^2 + 4.42KB + 7.14B^2 + 5.68K + 3.49B\)

#### Variables:
- \(K\): milligrams of vitamin K
- \(B\): milligrams of vitamin B3

#### Constraints:
1. \(K \geq 0\), \(B \geq 0\)
2. Energy stability index for \(K\) is 8, for \(B\) is 8.
3. \(8^2K + 8^2B \geq 51\)
4. \(8K + 8B \geq 51\)
5. \(-2K + 5B \geq 0\)
6. \(8K + 8B \leq 67\)
7. \(K\) is an integer.

### Translating to Gurobi Code:

```python
import gurobi

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

    # Define variables
    K = model.addVar(lb=0, name="milligrams of vitamin K", vtype=gurobi.GRB.INTEGER)
    B = model.addVar(lb=0, name="milligrams of vitamin B3")

    # Objective function
    model.setObjective(3.72*K**2 + 4.42*K*B + 7.14*B**2 + 5.68*K + 3.49*B, gurobi.GRB.MINIMIZE)

    # Constraints
    model.addConstr(8**2*K + 8**2*B >= 51, name="energy_stability_index_combined_squared")
    model.addConstr(8*K + 8*B >= 51, name="energy_stability_index_combined_linear")
    model.addConstr(-2*K + 5*B >= 0, name="vitamin_interaction_constraint")
    model.addConstr(8*K + 8*B <= 67, name="energy_stability_index_combined_upper_bound")

    # Solve the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal solution found.")
        print(f"Milligrams of vitamin K: {K.varValue}")
        print(f"Milligrams of vitamin B3: {B.varValue}")
        print(f"Objective function value: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_optimization_problem()
```

This code defines the optimization problem as specified, using Gurobi's Python interface. It sets up the variables, objective function, and constraints according to the problem description. The `solve_optimization_problem` function creates a Gurobi model, adds variables and constraints, sets the objective function, and solves the model. Finally, it prints out the optimal solution if one is found.