To solve this optimization problem, we will first define the symbolic representation of the problem. Let's denote 'pathfinder teams' as $x_0$ and 'reconnaissance troops' as $x_1$. The objective function is to minimize $1.09x_0 + 7.7x_1$.

The constraints can be represented as follows:
- $23x_0 + 10x_1 \geq 45$ (total combined offensive capability rating from pathfinder teams and reconnaissance troops should be at least 45)
- $21x_0 + 19x_1 \geq 65$ (total combined mobility rating from pathfinder teams and reconnaissance troops should be at least 65)
- $6x_0 - 2x_1 \geq 0$ (six times the number of pathfinder teams, plus minus two times the number of reconnaissance troops should be no less than zero)
- $23x_0 + 10x_1 \leq 188$ (total combined offensive capability rating from pathfinder teams and reconnaissance troops should be equal to or less than 188)
- $21x_0 + 19x_1 \leq 141$ (total combined mobility rating from pathfinder teams and reconnaissance troops should be at most 141)
- $x_0, x_1 \in \mathbb{Z}^+$ (the number of pathfinder teams and reconnaissance troops must be whole numbers)

Here is the symbolic representation in JSON format:
```json
{
    'sym_variables': [('x0', 'pathfinder teams'), ('x1', 'reconnaissance troops')],
    'objective_function': '1.09*x0 + 7.7*x1',
    'constraints': [
        '23*x0 + 10*x1 >= 45',
        '21*x0 + 19*x1 >= 65',
        '6*x0 - 2*x1 >= 0',
        '23*x0 + 10*x1 <= 188',
        '21*x0 + 19*x1 <= 141'
    ]
}
```

Now, we will write the Gurobi code to solve this optimization problem:
```python
from gurobipy import *

# Create a new model
m = Model("Optimization_Problem")

# Define variables
x0 = m.addVar(vtype=GRB.INTEGER, name="pathfinder_teams")
x1 = m.addVar(vtype=GRB.INTEGER, name="reconnaissance_troops")

# Set objective function
m.setObjective(1.09*x0 + 7.7*x1, GRB.MINIMIZE)

# Add constraints
m.addConstr(23*x0 + 10*x1 >= 45, "offensive_capability_min")
m.addConstr(21*x0 + 19*x1 >= 65, "mobility_rating_min")
m.addConstr(6*x0 - 2*x1 >= 0, "pathfinder_reconnaissance_ratio")
m.addConstr(23*x0 + 10*x1 <= 188, "offensive_capability_max")
m.addConstr(21*x0 + 19*x1 <= 141, "mobility_rating_max")

# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print("Pathfinder teams:", x0.x)
    print("Reconnaissance troops:", x1.x)
    print("Objective function value:", m.objVal)
else:
    print("No optimal solution found")
```