## Problem Description and Formulation

The problem is a linear programming optimization problem where the goal is to maximize the total score from taking short shots (worth 2 points each) and long shots (worth 5 points each). The constraints are:

- The total number of shots cannot exceed 14.
- At least 5 short shots must be taken.
- At least 2 long shots must be taken.
- No more than 8 shots of either type can be taken.

## Symbolic Representation

Let's denote:
- \(S\) as the number of short shots.
- \(L\) as the number of long shots.

The objective function to maximize the total score is:
\[ \text{Maximize:} \quad 2S + 5L \]

Subject to:
1. \( S + L \leq 14 \) (Total shots not exceeding 14)
2. \( S \geq 5 \) (At least 5 short shots)
3. \( L \geq 2 \) (At least 2 long shots)
4. \( S \leq 8 \) (No more than 8 short shots)
5. \( L \leq 8 \) (No more than 8 long shots)
6. \( S, L \geq 0 \) and are integers (Non-negativity and integrality constraints)

## Gurobi Code

```python
import gurobi

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

    # Define variables
    S = model.addVar(lb=0, ub=8, vtype=gurobi.GRB.INTEGER, name="Short Shots")
    L = model.addVar(lb=0, ub=8, vtype=gurobi.GRB.INTEGER, name="Long Shots")

    # Objective function: Maximize 2S + 5L
    model.setObjective(2 * S + 5 * L, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(S + L <= 14, name="Total Shots")
    model.addConstr(S >= 5, name="Min Short Shots")
    model.addConstr(L >= 2, name="Min Long Shots")
    model.addConstr(S <= 8, name="Max Short Shots")
    model.addConstr(L <= 8, name="Max Long Shots")

    # Update model
    model.update()

    # Solve the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution: Short Shots = {S.varValue}, Long Shots = {L.varValue}")
        print(f"Maximum Score: {2 * S.varValue + 5 * L.varValue}")
    else:
        print("The model is infeasible.")

solve_shot_optimization()
```