To solve this optimization problem, we need to define variables and constraints based on the given conditions. Let's denote:

- $x$ as the number of short shots taken,
- $y$ as the number of long shots taken.

The objective is to maximize the total score, which can be calculated as $2x + 5y$, since each short shot is worth 2 points and each long shot is worth 5 points.

Given constraints are:
1. Total shots: $x + y \leq 14$
2. Minimum short shots: $x \geq 5$
3. Minimum long shots: $y \geq 2$
4. Maximum of either type: $x \leq 8$ and $y \leq 8$

We will use Gurobi, a Python library for optimization problems, to solve this linear programming problem.

```python
from gurobipy import *

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

# Define variables
x = m.addVar(name='short_shots', vtype=GRB.INTEGER, lb=5, ub=8)
y = m.addVar(name='long_shots', vtype=GRB.INTEGER, lb=2, ub=8)

# Define the objective function: Maximize total score
m.setObjective(2*x + 5*y, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x + y <= 14, name='total_shots')

# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print(f"Maximum score: {m.objVal}")
    print(f"Short shots: {x.x}")
    print(f"Long shots: {y.x}")
else:
    print("Model is infeasible")

```