To solve the given optimization problem, we need to capture the objective function and all constraints in a mathematical model. The objective is to minimize the function:

\[1 \times (\text{air defense batteries})^2 + 5 \times (\text{air defense batteries}) \times (\text{reconnaissance troops}) + 4 \times (\text{medical platoons})^2 + 5 \times (\text{medical platoons})\]

Subject to the constraints:

1. Mobility ratings and fun factors for each unit type.
2. Minimum combined mobility ratings from certain combinations of units.
3. Minimum combined fun factors from certain combinations of units.
4. Linear inequalities involving the quantities of different units.

Given variables:
- \(x_0\) = quantity of air defense batteries
- \(x_1\) = quantity of medical platoons
- \(x_2\) = quantity of reconnaissance troops

Resource/Attribute constraints:
- Mobility rating: \(7.23x_0 + 24.81x_1 + 14.26x_2 \geq 147\)
- Minimum mobility from medical platoons and reconnaissance troops: \(24.81x_1 + 14.26x_2 \geq 147\)
- Fun factor constraints:
  - \(12.68x_0 + 22.6x_1 \geq 73\)
  - \(12.68x_0 + 11.12x_2 \geq 90\) (squared terms imply a quadratic constraint, but the problem statement seems to have an inconsistency regarding squared terms in fun factor constraints; assuming it's linear for air defense and reconnaissance, as squaring individual terms would not directly align with typical linear or quadratic programming formulations without further clarification)
  - \(12.68x_0 + 22.6x_1 + 11.12x_2 \geq 73\)
- Linear inequality: \(x_0 - 7x_1 \geq 0\)

All variables must be non-negative integers.

To address the squared terms in the objective function and to clarify the fun factor constraints, we'll proceed with the interpretation that allows for a mixed-integer quadratic programming (MIQP) formulation. The Gurobi Python interface will be used to model and solve this problem.

```python
from gurobipy import *

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

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

# Objective function
m.setObjective(1*x0**2 + 5*x0*x2 + 4*x1**2 + 5*x1, GRB.MINIMIZE)

# Constraints
m.addConstr(7.23*x0 + 24.81*x1 + 14.26*x2 >= 147, name="total_mobility")
m.addConstr(24.81*x1 + 14.26*x2 >= 147, name="mobility_med_recon")
m.addConstr(12.68*x0 + 22.6*x1 >= 73, name="fun_factor_air_med")
m.addConstr(12.68*x0 + 11.12*x2 >= 90, name="fun_factor_air_recon") # Assuming linear for simplicity
m.addConstr(12.68*x0 + 22.6*x1 + 11.12*x2 >= 73, name="total_fun_factor")
m.addConstr(x0 - 7*x1 >= 0, name="linear_inequality")

# Solve the model
m.optimize()

# Print solution
for v in m.getVars():
    print(f"{v.varName}: {v.x}")
print(f"Objective: {m.objVal}")
```