```json
{
  "sym_variables": [
    ("x0", "security onions"),
    ("x1", "pen testers"),
    ("x2", "deployed decoys"),
    ("x3", "security engineers")
  ],
  "objective_function": "1.88 * x0 + 7.42 * x1 + 4.68 * x2 + 1.93 * x3",
  "constraints": [
    "18 * x0 + 4 * x1 + 18 * x2 + 4 * x3 <= 273",
    "13 * x0 + 19 * x1 + 6 * x2 + 18 * x3 <= 143",
    "4 * x1 + 18 * x2 >= 67",
    "18 * x0 + 4 * x1 >= 55",
    "4 * x1 + 4 * x3 >= 39",
    "18 * x0 + 4 * x1 + 18 * x2 >= 41",
    "4 * x1 + 18 * x2 + 4 * x3 >= 41",
    "4 * x1 + 18 * x2 + 4 * x3 >= 67",
    "18 * x0 + 4 * x1 + 18 * x2 + 4 * x3 >= 67",
    "13 * x0 + 19 * x1 >= 22",
    "13 * x0 + 18 * x3 >= 22",
    "13 * x0 + 6 * x2 >= 15",
    "19 * x1 + 6 * x2 >= 21",
    "13 * x0 + 19 * x1 + 6 * x2 >= 21",
    "13 * x0 + 19 * x1 + 6 * x2 + 18 * x3 >= 21",
    "-1 * x1 + 2 * x3 >= 0",
    "-7 * x0 + 5 * x1 >= 0",
    "18 * x0 + 4 * x1 <= 197",
    "18 * x0 + 4 * x1 + 4 * x3 <= 99",
    "18 * x0 + 18 * x2 + 4 * x3 <= 103",
    "4 * x1 + 18 * x2 + 4 * x3 <= 164",
    "13 * x0 + 6 * x2 <= 115"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
security_onions = m.addVar(vtype=gp.GRB.INTEGER, name="security_onions")
pen_testers = m.addVar(vtype=gp.GRB.INTEGER, name="pen_testers")
deployed_decoys = m.addVar(vtype=gp.GRB.INTEGER, name="deployed_decoys")
security_engineers = m.addVar(vtype=gp.GRB.INTEGER, name="security_engineers")

# Set objective function
m.setObjective(1.88 * security_onions + 7.42 * pen_testers + 4.68 * deployed_decoys + 1.93 * security_engineers, gp.GRB.MINIMIZE)

# Add constraints
m.addConstr(18 * security_onions + 4 * pen_testers + 18 * deployed_decoys + 4 * security_engineers <= 273, "bandwidth_constraint")
m.addConstr(13 * security_onions + 19 * pen_testers + 6 * deployed_decoys + 18 * security_engineers <= 143, "computational_load_constraint")
m.addConstr(4 * pen_testers + 18 * deployed_decoys >= 67, "bandwidth_constraint1")
m.addConstr(18 * security_onions + 4 * pen_testers >= 55, "bandwidth_constraint2")
m.addConstr(4 * pen_testers + 4 * security_engineers >= 39, "bandwidth_constraint3")
m.addConstr(18 * security_onions + 4 * pen_testers + 18 * deployed_decoys >= 41, "bandwidth_constraint4")
m.addConstr(4 * pen_testers + 18 * deployed_decoys + 4 * security_engineers >= 41, "bandwidth_constraint5")
m.addConstr(4 * pen_testers + 18 * deployed_decoys + 4 * security_engineers >= 67, "bandwidth_constraint6")
m.addConstr(18 * security_onions + 4 * pen_testers + 18 * deployed_decoys + 4 * security_engineers >= 67, "bandwidth_constraint7")
m.addConstr(13 * security_onions + 19 * pen_testers >= 22, "computational_load_constraint1")
m.addConstr(13 * security_onions + 18 * security_engineers >= 22, "computational_load_constraint2")
m.addConstr(13 * security_onions + 6 * deployed_decoys >= 15, "computational_load_constraint3")
m.addConstr(19 * pen_testers + 6 * deployed_decoys >= 21, "computational_load_constraint4")
m.addConstr(13 * security_onions + 19 * pen_testers + 6 * deployed_decoys >= 21, "computational_load_constraint5")
m.addConstr(13 * security_onions + 19 * pen_testers + 6 * deployed_decoys + 18 * security_engineers >= 21, "computational_load_constraint6")
m.addConstr(-1 * pen_testers + 2 * security_engineers >= 0, "constraint1")
m.addConstr(-7 * security_onions + 5 * pen_testers >= 0, "constraint2")
m.addConstr(18 * security_onions + 4 * pen_testers <= 197, "bandwidth_constraint8")
m.addConstr(18 * security_onions + 4 * pen_testers + 4 * security_engineers <= 99, "bandwidth_constraint9")
m.addConstr(18 * security_onions + 18 * deployed_decoys + 4 * security_engineers <= 103, "bandwidth_constraint10")
m.addConstr(4 * pen_testers + 18 * deployed_decoys + 4 * security_engineers <= 164, "bandwidth_constraint11")
m.addConstr(13 * security_onions + 6 * deployed_decoys <= 115, "computational_load_constraint7")


# 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)

```
