## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to maximize the profit of a souvenir shop by determining the optimal number of red and blue umbrellas to display and sell.

### Decision Variables

- Let \(R\) be the number of red umbrellas displayed and sold.
- Let \(B\) be the number of blue umbrellas displayed and sold.

### Objective Function

The profit made on each red umbrella is $3, and on each blue umbrella is $5. The objective is to maximize the total profit \(P\), which can be represented as:
\[ P = 3R + 5B \]

### Constraints

1. **Maximum Umbrellas**: The souvenir shop can display and sell at most 100 umbrellas in total.
\[ R + B \leq 100 \]

2. **Minimum Red Umbrellas**: The shop ensures a minimum of 10 umbrellas displayed are red.
\[ R \geq 10 \]

3. **Preference for Blue Umbrellas**: At least 4 times as many customers prefer blue umbrellas to red umbrellas.
\[ B \geq 4R \]

4. **Non-Negativity**: The number of umbrellas cannot be negative.
\[ R \geq 0, B \geq 0 \]
However, since \(R \geq 10\), the \(R \geq 0\) and \(B \geq 0\) constraints are partially satisfied.

## Gurobi Code

```python
import gurobi

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

    # Define the decision variables
    R = model.addVar(lb=10, name="Red_Umbrellas")  # Minimum of 10 red umbrellas
    B = model.addVar(name="Blue_Umbrellas")

    # Objective function: Maximize profit
    model.setObjective(3*R + 5*B, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(R + B <= 100, name="Total_Umbrellas")  # At most 100 umbrellas
    model.addConstr(B >= 4*R, name="Blue_Preference")  # Blue umbrellas preference

    # Solve the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution: Red Umbrellas = {R.varValue}, Blue Umbrellas = {B.varValue}")
        print(f"Maximum Profit: ${3*R.varValue + 5*B.varValue}")
    else:
        print("The model is infeasible.")

solve_umbrella_problem()
```

This code defines the optimization problem using Gurobi's Python interface, sets up the objective function and constraints according to the problem description, and solves the model to find the optimal number of red and blue umbrellas to maximize profit.