## Problem Description and Formulation

Matter Auto aims to advertise its EV cars and hybrid trucks to baby boomers and millennials through TV commercials on two channels: TV shows and sports programs. The goal is to minimize the cost of advertising while reaching at least 40 million baby boomers and 25 million millennials.

Let's define the decision variables:
- \(x_1\): Number of sports program ads
- \(x_2\): Number of TV show ads

The objective function to minimize is the total cost:
\[ \text{Minimize:} \quad 90,000x_1 + 20,000x_2 \]

Subject to the constraints:
1. Reach at least 40 million baby boomers:
\[ 4x_1 + 12x_2 \geq 40,000,000 \]
2. Reach at least 25 million millennials:
\[ 18x_1 + 5x_2 \geq 25,000,000 \]
3. Non-negativity constraints:
\[ x_1 \geq 0, x_2 \geq 0 \]
And \(x_1, x_2\) should be integers since they represent the number of ads.

## Gurobi Code

```python
import gurobi

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

    # Define the decision variables
    x1 = model.addVar(name="sports_ads", lb=0, vtype=gurobi.GRB.INTEGER)
    x2 = model.addVar(name="tv_show_ads", lb=0, vtype=gurobi.GRB.INTEGER)

    # Objective function: Minimize cost
    model.setObjective(90000*x1 + 20000*x2, gurobi.GRB.MINIMIZE)

    # Constraints
    model.addConstr(4*x1 + 12*x2 >= 40000000, name="baby_boomers_constraint")
    model.addConstr(18*x1 + 5*x2 >= 25000000, name="millennials_constraint")

    # Solve the model
    model.optimize()

    if model.status == gurobi.GRB.Status.OPTIMAL:
        print("Optimal Solution:")
        print(f"Sports ads: {x1.varValue}")
        print(f"TV show ads: {x2.varValue}")
        print(f"Minimum cost: ${model.objVal:.2f}")
    else:
        print("The model is infeasible.")

solve_advertising_problem()
```

This code defines the optimization problem as described, using Gurobi's Python interface. It sets up the decision variables, the objective function, and the constraints, then solves the model. If an optimal solution exists, it prints out the number of each type of ad and the minimum cost; otherwise, it indicates that the model is infeasible.