```json
{
  "sym_variables": [
    ("x0", "security engineers"),
    ("x1", "pen testers"),
    ("x2", "automatic alerts"),
    ("x3", "network administrators"),
    ("x4", "system administrators")
  ],
  "objective_function": "4*x0 + 6*x1 + 5*x2 + 7*x3 + 2*x4",
  "constraints": [
    "22*x1 + 22*x2 >= 153",
    "22*x2 + 9*x4 >= 133",
    "2*x1 + 9*x4 >= 83",
    "22*x0 + 9*x4 >= 92",
    "22*x2 + 5*x3 + 9*x4 >= 118",
    "22*x0 + 22*x2 + 5*x3 >= 118",
    "2*x1 + 22*x2 + 5*x3 >= 118",
    "2*x1 + 22*x2 + 9*x4 >= 118",
    "22*x2 + 5*x3 + 9*x4 >= 85",
    "22*x0 + 22*x2 + 5*x3 >= 85",
    "2*x1 + 22*x2 + 5*x3 >= 85",
    "2*x1 + 22*x2 + 9*x4 >= 85",
    "22*x2 + 5*x3 + 9*x4 >= 95",
    "22*x0 + 22*x2 + 5*x3 >= 95",
    "2*x1 + 22*x2 + 5*x3 >= 95",
    "2*x1 + 22*x2 + 9*x4 >= 95",
    "22*x2 + 5*x3 + 9*x4 >= 150",
    "22*x0 + 22*x2 + 5*x3 >= 150",
    "2*x1 + 22*x2 + 5*x3 >= 150",
    "2*x1 + 22*x2 + 9*x4 >= 150",
    "22*x0 + 2*x1 + 22*x2 + 5*x3 + 9*x4 >= 150",
    "14*x2 + 23*x3 >= 51",
    "14*x2 + 8*x4 >= 53",
    "15*x0 + 14*x2 >= 32",
    "22*x1 + 14*x2 >= 46",
    "15*x0 + 8*x4 >= 52",
    "22*x1 + 14*x2 + 23*x3 >= 46",
    "15*x0 + 22*x1 + 14*x2 + 23*x3 + 8*x4 >= 46",
    "-x1 + 5*x2 >= 0",
    "7*x0 - 6*x2 >= 0",
    "-4*x2 + 9*x4 >= 0",
    "22*x0 + 2*x1 + 9*x4 <= 560",
    "22*x0 + 2*x1 + 5*x3 <= 343",
    "22*x0 + 22*x2 + 9*x4 <= 285",
    "22*x0 + 5*x3 + 9*x4 <= 263",
    "2*x1 + 5*x3 + 9*x4 <= 168",
    "22*x0 + 22*x2 + 5*x3 <= 670",
    "23*x3 + 8*x4 <= 133",
    "15*x0 + 22*x1 + 8*x4 <= 381",
    "x0 >= 0",
    "x1 >= 0",
    "x2 >= 0",
    "x3 >= 0",
    "x4 >= 0",
    "22*x0 <= 802",
    "15*x0 + 22*x1 + 14*x2 + 23*x3 + 8*x4 <= 403"


  ]
}
```

```python
import gurobipy as gp

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

# Create variables
security_engineers = m.addVar(vtype=gp.GRB.INTEGER, name="security_engineers")
pen_testers = m.addVar(vtype=gp.GRB.INTEGER, name="pen_testers")
automatic_alerts = m.addVar(vtype=gp.GRB.INTEGER, name="automatic_alerts")
network_administrators = m.addVar(vtype=gp.GRB.INTEGER, name="network_administrators")
system_administrators = m.addVar(vtype=gp.GRB.INTEGER, name="system_administrators")


# Set objective function
m.setObjective(4 * security_engineers + 6 * pen_testers + 5 * automatic_alerts + 7 * network_administrators + 2 * system_administrators, gp.GRB.MINIMIZE)

# Add constraints
m.addConstr(22 * pen_testers + 22 * automatic_alerts >= 153)
m.addConstr(22 * automatic_alerts + 9 * system_administrators >= 133)
m.addConstr(2 * pen_testers + 9 * system_administrators >= 83)
m.addConstr(22 * security_engineers + 9 * system_administrators >= 92)
m.addConstr(22 * automatic_alerts + 5 * network_administrators + 9 * system_administrators >= 118)
m.addConstr(22 * security_engineers + 22 * automatic_alerts + 5 * network_administrators >= 118)
m.addConstr(2 * pen_testers + 22 * automatic_alerts + 5 * network_administrators >= 118)
m.addConstr(2 * pen_testers + 22 * automatic_alerts + 9 * system_administrators >= 118)
m.addConstr(22 * automatic_alerts + 5 * network_administrators + 9 * system_administrators >= 85)
m.addConstr(22 * security_engineers + 22 * automatic_alerts + 5 * network_administrators >= 85)
m.addConstr(2 * pen_testers + 22 * automatic_alerts + 5 * network_administrators >= 85)
m.addConstr(2 * pen_testers + 22 * automatic_alerts + 9 * system_administrators >= 85)
m.addConstr(22 * automatic_alerts + 5 * network_administrators + 9 * system_administrators >= 95)
m.addConstr(22 * security_engineers + 22 * automatic_alerts + 5 * network_administrators >= 95)
m.addConstr(2 * pen_testers + 22 * automatic_alerts + 5 * network_administrators >= 95)
m.addConstr(2 * pen_testers + 22 * automatic_alerts + 9 * system_administrators >= 95)
m.addConstr(22 * automatic_alerts + 5 * network_administrators + 9 * system_administrators >= 150)
m.addConstr(22 * security_engineers + 22 * automatic_alerts + 5 * network_administrators >= 150)
m.addConstr(2 * pen_testers + 22 * automatic_alerts + 5 * network_administrators >= 150)
m.addConstr(2 * pen_testers + 22 * automatic_alerts + 9 * system_administrators >= 150)
m.addConstr(22 * security_engineers + 2 * pen_testers + 22 * automatic_alerts + 5 * network_administrators + 9 * system_administrators >= 150)
m.addConstr(14 * automatic_alerts + 23 * network_administrators >= 51)
m.addConstr(14 * automatic_alerts + 8 * system_administrators >= 53)
m.addConstr(15 * security_engineers + 14 * automatic_alerts >= 32)
m.addConstr(22 * pen_testers + 14 * automatic_alerts >= 46)
m.addConstr(15 * security_engineers + 8 * system_administrators >= 52)
m.addConstr(22 * pen_testers + 14 * automatic_alerts + 23 * network_administrators >= 46)
m.addConstr(15 * security_engineers + 22 * pen_testers + 14 * automatic_alerts + 23 * network_administrators + 8 * system_administrators >= 46)
m.addConstr(-pen_testers + 5 * automatic_alerts >= 0)
m.addConstr(7 * security_engineers - 6 * automatic_alerts >= 0)
m.addConstr(-4 * automatic_alerts + 9 * system_administrators >= 0)
m.addConstr(22 * security_engineers + 2 * pen_testers + 9 * system_administrators <= 560)
m.addConstr(22 * security_engineers + 2 * pen_testers + 5 * network_administrators <= 343)
m.addConstr(22 * security_engineers + 22 * automatic_alerts + 9 * system_administrators <= 285)
m.addConstr(22 * security_engineers + 5 * network_administrators + 9 * system_administrators <= 263)
m.addConstr(2 * pen_testers + 5 * network_administrators + 9 * system_administrators <= 168)
m.addConstr(22 * security_engineers + 22 * automatic_alerts + 5 * network_administrators <= 670)
m.addConstr(23 * network_administrators + 8 * system_administrators <= 133)
m.addConstr(15 * security_engineers + 22 * pen_testers + 8 * system_administrators <= 381)
m.addConstr(22 * security_engineers <= 802)
m.addConstr(15 * security_engineers + 22 * pen_testers + 14 * automatic_alerts + 23 * network_administrators + 8 * system_administrators <= 403)



# Optimize model
m.optimize()

# Print solution
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    for v in m.getVars():
        print('%s %g' % (v.varName, v.x))
elif m.status == gp.GRB.INFEASIBLE:
    print('The model is infeasible.')
else:
    print('Optimization ended with status %d' % m.status)

```