## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to minimize the cost of mixing two different concrete mixes, A and B, to meet certain requirements for cement, sand, and gravel.

### Variables

- Let \(x\) be the number of units of mix A.
- Let \(y\) be the number of units of mix B.

### Objective Function

The cost per unit of mix A is $1, and the cost per unit of mix B is $1.25. The objective is to minimize the total cost:

\[ \text{Minimize:} \quad 1x + 1.25y \]

### Constraints

1. **Cement Constraint:** One unit of mix A contains 5 units of cement, and one unit of mix B contains 6 units of cement. The mixture must contain at least 70 units of cement:

\[ 5x + 6y \geq 70 \]

2. **Sand Constraint:** One unit of mix A contains 2 units of sand, and one unit of mix B contains 1 unit of sand. The mixture must contain at least 20 units of sand:

\[ 2x + y \geq 20 \]

3. **Gravel Constraint:** One unit of mix A contains 1 unit of gravel, and one unit of mix B contains 2 units of gravel. The mixture must contain at least 15 units of gravel:

\[ x + 2y \geq 15 \]

4. **Non-Negativity Constraints:** The number of units of each mix cannot be negative:

\[ x \geq 0, \quad y \geq 0 \]

## Gurobi Code

```python
import gurobi

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

    # Define variables
    x = model.addVar(name="mix_A", lb=0, ub=gurobi.GRB.INFINITY)
    y = model.addVar(name="mix_B", lb=0, ub=gurobi.GRB.INFINITY)

    # Objective function: Minimize cost
    model.setObjective(x + 1.25 * y, gurobi.GRB.MINIMIZE)

    # Constraints
    model.addConstr(5 * x + 6 * y >= 70, name="cement_constraint")
    model.addConstr(2 * x + y >= 20, name="sand_constraint")
    model.addConstr(x + 2 * y >= 15, name="gravel_constraint")

    # Optimize
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal cost: {model.objVal}")
        print(f"Units of mix A: {x.varValue}")
        print(f"Units of mix B: {y.varValue}")
    else:
        print("No optimal solution found")

solve_concrete_mix_problem()
```