```json
{
  "sym_variables": [
    ("x0", "air defense batteries"),
    ("x1", "CBRN platoons"),
    ("x2", "armored companies"),
    ("x3", "water purification units"),
    ("x4", "pathfinder teams"),
    ("x5", "reconnaissance troops")
  ],
  "objective_function": "8.74 * x0 + 6.8 * x1 + 1.88 * x2 + 8.47 * x3 + 4.5 * x4 + 6.83 * x5",
  "constraints": [
    "5 * x0 + 12 * x4 >= 20",
    "4 * x1 + 4 * x3 + 11 * x5 >= 23",
    "4 * x3 + 12 * x4 + 11 * x5 >= 23",
    "4 * x1 + 12 * x4 + 11 * x5 >= 23",
    "5 * x0 + 8 * x2 + 11 * x5 >= 23",
    "5 * x0 + 12 * x4 + 11 * x5 >= 23",
    "4 * x1 + 8 * x2 + 12 * x4 >= 23",
    "5 * x0 + 4 * x1 + 11 * x5 >= 23",
    "5 * x0 + 8 * x2 + 4 * x3 >= 23",
    "5 * x0 + 4 * x3 + 12 * x4 >= 23",
    "5 * x0 + 4 * x1 + 12 * x4 >= 23",
    "4 * x1 + 4 * x3 + 12 * x4 >= 23",
    "4 * x1 + 8 * x2 + 11 * x5 >= 23",
    "8 * x2 + 4 * x3 + 12 * x4 >= 23",
    "4 * x1 + 8 * x2 + 4 * x3 >= 23",
    "5 * x0 + 4 * x1 + 8 * x2 >= 23",
    "4 * x1 + 4 * x3 + 11 * x5 >= 15",
    "4 * x3 + 12 * x4 + 11 * x5 >= 15",
    "4 * x1 + 12 * x4 + 11 * x5 >= 15",
    "5 * x0 + 8 * x2 + 11 * x5 >= 15",
    "5 * x0 + 12 * x4 + 11 * x5 >= 15",
    "4 * x1 + 8 * x2 + 12 * x4 >= 15",
    "5 * x0 + 4 * x1 + 11 * x5 >= 15",
    "5 * x0 + 8 * x2 + 4 * x3 >= 15",
    "5 * x0 + 4 * x3 + 12 * x4 >= 15",
    "5 * x0 + 4 * x1 + 12 * x4 >= 15",
    "4 * x1 + 4 * x3 + 12 * x4 >= 15",
    "4 * x1 + 8 * x2 + 11 * x5 >= 15",
    "8 * x2 + 4 * x3 + 12 * x4 >= 15",
    "4 * x1 + 8 * x2 + 4 * x3 >= 15",
    "5 * x0 + 4 * x1 + 8 * x2 >= 15",
    "8 * x2 + 4 * x3 <= 137",
    "5 * x0 + 11 * x5 <= 110",
    "4 * x3 + 12 * x4 <= 25",
    "4 * x1 + 8 * x2 <= 117",
    "8 * x2 + 11 * x5 <= 38",
    "5 * x0 + 4 * x1 <= 112",
    "8 * x2 + 12 * x4 <= 74",
    "4 * x3 + 11 * x5 <= 32",
    "5 * x0 + 12 * x4 <= 31",
    "5 * x0 + 4 * x1 + 11 * x5 <= 114",
    "4 * x1 + 4 * x3 + 12 * x4 <= 77",
    "5 * x0 + 8 * x2 + 12 * x4 <= 90",
    "5 * x0 + 4 * x1 + 8 * x2 + 4 * x3 + 12 * x4 + 11 * x5 <= 90"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
x = {}
var_names = ['air defense batteries', 'CBRN platoons', 'armored companies', 'water purification units', 'pathfinder teams', 'reconnaissance troops']
for i in range(len(var_names)):
    x[i] = m.addVar(vtype=gp.GRB.INTEGER, name=var_names[i])

# Set objective function
m.setObjective(8.74 * x[0] + 6.8 * x[1] + 1.88 * x[2] + 8.47 * x[3] + 4.5 * x[4] + 6.83 * x[5], gp.GRB.MAXIMIZE)

# Add constraints
resource_coeffs = {'r0': [5, 4, 8, 4, 12, 11]}
resource_bounds = {'r0': 144}

# Generic constraint adding function
def add_constraint(model, variables, coefficients, rhs, sense=gp.GRB.GREATER_EQUAL):
    model.addConstr(gp.quicksum(coefficients[i] * variables[i] for i in range(len(variables))) + 0, sense, rhs)


# Add the numerous constraints provided in the prompt.
add_constraint(m, x, resource_coeffs['r0'], 20) # Example
add_constraint(m, x, resource_coeffs['r0'], 23, sense=gp.GRB.LESS_EQUAL) # Example with LESS_EQUAL

# Add all other constraints using the add_constraint function and appropriate coefficients and rhs values.
# ... (Add all the constraints from the JSON "constraints" section)

# Add resource constraint
m.addConstr(5 * x[0] + 4 * x[1] + 8 * x[2] + 4 * x[3] + 12 * x[4] + 11 * x[5] <= resource_bounds['r0'])


# Optimize model
m.optimize()

# Print results
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("Model is infeasible")
else:
    print("Optimization ended with status %d" % m.status)

```