```json
{
  "sym_variables": [
    ("x0", "network administrators"),
    ("x1", "intrusion analysts"),
    ("x2", "Mbps bandwidth allocated to monitoring"),
    ("x3", "patches per day"),
    ("x4", "SOC operators")
  ],
  "objective_function": "7.63 * x0 + 7.32 * x1 + 7.5 * x2 + 3.2 * x3 + 1.63 * x4",
  "constraints": [
    "10 * x0 + 7 * x1 + 9 * x2 + 9 * x3 + 11 * x4 <= 104",
    "2 * x0 + 8 * x1 + 11 * x2 + 10 * x3 + 2 * x4 <= 114",
    "7 * x1 + 11 * x4 >= 14",
    "8 * x1 + 10 * x3 >= 11",
    "2 * x0 + 8 * x1 >= 16",
    "8 * x1 + 2 * x4 >= 9",
    "11 * x2 + 10 * x3 >= 20",
    "2 * x0 + 8 * x1 + 11 * x2 >= 20",
    "8 * x1 + 11 * x2 + 2 * x4 >= 20",
    "2 * x0 + 10 * x3 + 2 * x4 >= 20",
    "2 * x0 + 8 * x1 + 11 * x2 >= 11",
    "8 * x1 + 11 * x2 + 2 * x4 >= 11",
    "2 * x0 + 10 * x3 + 2 * x4 >= 11",
    "2 * x0 + 8 * x1 + 11 * x2 >= 12",
    "8 * x1 + 11 * x2 + 2 * x4 >= 12",
    "2 * x0 + 10 * x3 + 2 * x4 >= 12",
    "-9 * x0 + 9 * x1 + 10 * x3 >= 0",
    "9 * x2 + 9 * x3 <= 85",
    "10 * x0 + 9 * x3 <= 92",
    "7 * x1 + 9 * x2 + 9 * x3 <= 36",
    "10 * x0 + 7 * x1 + 9 * x3 <= 54",
    "10 * x0 + 7 * x1 + 9 * x2 + 9 * x3 + 11 * x4 <= 54",
    "8 * x1 + 10 * x3 <= 69",
    "2 * x0 + 8 * x1 <= 70",
    "2 * x0 + 2 * x4 <= 81",
    "8 * x1 + 11 * x2 <= 39",
    "2 * x0 + 8 * x1 + 11 * x2 <= 44",
    "11 * x2 + 10 * x3 + 2 * x4 <= 27",
    "2 * x0 + 10 * x3 + 2 * x4 <= 108",
    "2 * x0 + 11 * x2 + 2 * x4 <= 56",
    "8 * x1 + 11 * x2 + 10 * x3 <= 70",
    "2 * x0 + 11 * x2 + 10 * x3 <= 105",
    "2 * x0 + 8 * x1 + 11 * x2 + 10 * x3 + 2 * x4 <= 105",
    "x0, x1, x2, x3, x4 are integers"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
x = m.addVars(5, vtype=gp.GRB.INTEGER, name=["network_admins", "intrusion_analysts", "bandwidth", "patches", "soc_operators"])


# Set objective function
m.setObjective(7.63 * x[0] + 7.32 * x[1] + 7.5 * x[2] + 3.2 * x[3] + 1.63 * x[4], gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(10 * x[0] + 7 * x[1] + 9 * x[2] + 9 * x[3] + 11 * x[4] <= 104, "r0")
m.addConstr(2 * x[0] + 8 * x[1] + 11 * x[2] + 10 * x[3] + 2 * x[4] <= 114, "r1")
m.addConstr(7 * x[1] + 11 * x[4] >= 14, "c1")
m.addConstr(8 * x[1] + 10 * x[3] >= 11, "c2")
m.addConstr(2 * x[0] + 8 * x[1] >= 16, "c3")
m.addConstr(8 * x[1] + 2 * x[4] >= 9, "c4")
m.addConstr(11 * x[2] + 10 * x[3] >= 20, "c5")
m.addConstr(2 * x[0] + 8 * x[1] + 11 * x[2] >= 20, "c6")
m.addConstr(8 * x[1] + 11 * x[2] + 2 * x[4] >= 20, "c7")
m.addConstr(2 * x[0] + 10 * x[3] + 2 * x[4] >= 20, "c8")
m.addConstr(2 * x[0] + 8 * x[1] + 11 * x[2] >= 11, "c9")
m.addConstr(8 * x[1] + 11 * x[2] + 2 * x[4] >= 11, "c10")
m.addConstr(2 * x[0] + 10 * x[3] + 2 * x[4] >= 11, "c11")
m.addConstr(2 * x[0] + 8 * x[1] + 11 * x[2] >= 12, "c12")
m.addConstr(8 * x[1] + 11 * x[2] + 2 * x[4] >= 12, "c13")
m.addConstr(2 * x[0] + 10 * x[3] + 2 * x[4] >= 12, "c14")
m.addConstr(-9 * x[0] + 9 * x[1] + 10 * x[3] >= 0, "c15")
m.addConstr(9 * x[2] + 9 * x[3] <= 85, "c16")
m.addConstr(10 * x[0] + 9 * x[3] <= 92, "c17")
m.addConstr(7 * x[1] + 9 * x[2] + 9 * x[3] <= 36, "c18")
m.addConstr(10 * x[0] + 7 * x[1] + 9 * x[3] <= 54, "c19")
m.addConstr(10 * x[0] + 7 * x[1] + 9 * x[2] + 9 * x[3] + 11 * x[4] <= 54, "c20")
m.addConstr(8 * x[1] + 10 * x[3] <= 69, "c21")
m.addConstr(2 * x[0] + 8 * x[1] <= 70, "c22")
m.addConstr(2 * x[0] + 2 * x[4] <= 81, "c23")
m.addConstr(8 * x[1] + 11 * x[2] <= 39, "c24")
m.addConstr(2 * x[0] + 8 * x[1] + 11 * x[2] <= 44, "c25")
m.addConstr(11 * x[2] + 10 * x[3] + 2 * x[4] <= 27, "c26")
m.addConstr(2 * x[0] + 10 * x[3] + 2 * x[4] <= 108, "c27")
m.addConstr(2 * x[0] + 11 * x[2] + 2 * x[4] <= 56, "c28")
m.addConstr(8 * x[1] + 11 * x[2] + 10 * x[3] <= 70, "c29")
m.addConstr(2 * x[0] + 11 * x[2] + 10 * x[3] <= 105, "c30")
m.addConstr(2 * x[0] + 8 * x[1] + 11 * x[2] + 10 * x[3] + 2 * x[4] <= 105, "c31")


# Optimize model
m.optimize()

# Print solution
if m.status == gp.GRB.OPTIMAL:
    for v in m.getVars():
        print(f'{v.varName}: {v.x}')
    print(f'Objective Value: {m.objVal}')
elif m.status == gp.GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print(f"Optimization ended with status {m.status}")

```