## Problem Description and Formulation

The problem requires minimizing the objective function: $3 \times \text{CBRN platoons} + 6 \times \text{airborne infantry companies}$, subject to several constraints.

### Constraints

1. **Offensive Capability Ratings**:
   - CBRN platoons: 17 each
   - Airborne infantry companies: 16 each
   - Total offensive capability rating $\geq 11$
   - Total offensive capability rating $\leq 36$

2. **Deployment Weights**:
   - CBRN platoons: 2 metric tons each
   - Airborne infantry companies: 17 metric tons each
   - Total deployment weight $\leq 27$ metric tons
   - Minimum total deployment weight $\geq 12$ metric tons

3. **Operational Constraints**:
   - $2 \times \text{CBRN platoons} - 8 \times \text{airborne infantry companies} \geq 0$

4. **Variable Constraints**:
   - CBRN platoons and airborne infantry companies must be whole numbers.

## Gurobi Code Formulation

```python
import gurobi

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

    # Define variables
    cbrn_platoons = model.addVar(name="CBRN_platoons", vtype=gurobi.GRB.INTEGER)
    airborne_infantry_companies = model.addVar(name="airborne_infantry_companies", vtype=gurobi.GRB.INTEGER)

    # Objective function: Minimize 3*CBRN_platoons + 6*airborne_infantry_companies
    model.setObjective(3 * cbrn_platoons + 6 * airborne_infantry_companies, gurobi.GRB.MINIMIZE)

    # Constraints
    # Total offensive capability rating >= 11
    model.addConstr(17 * cbrn_platoons + 16 * airborne_infantry_companies >= 11, name="offensive_capability_rating_min")

    # Total offensive capability rating <= 36
    model.addConstr(17 * cbrn_platoons + 16 * airborne_infantry_companies <= 36, name="offensive_capability_rating_max")

    # Total deployment weight <= 27
    model.addConstr(2 * cbrn_platoons + 17 * airborne_infantry_companies <= 27, name="deployment_weight_max")

    # Minimum total deployment weight >= 12
    model.addConstr(2 * cbrn_platoons + 17 * airborne_infantry_companies >= 12, name="deployment_weight_min")

    # Operational constraint: 2*CBRN_platoons - 8*airborne_infantry_companies >= 0
    model.addConstr(2 * cbrn_platoons - 8 * airborne_infantry_companies >= 0, name="operational_constraint")

    # Solve the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution found: CBRN platoons = {cbrn_platoons.varValue}, Airborne infantry companies = {airborne_infantry_companies.varValue}")
        print(f"Objective function value: {model.objVal}")
    else:
        print("No optimal solution found")

solve_optimization_problem()
```