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

- \(V\) as the number of vehicle tickets sold.
- \(P\) as the number of passenger tickets sold.

The objective is to maximize profit. Given that each vehicle ticket and each passenger ticket generates a profit of $50, the total profit can be represented as \(50V + 50P\).

Now, let's outline the constraints:

1. The ferry can sell at most 100 tickets in total: \(V + P \leq 100\).
2. A minimum of 10 tickets must be reserved for vehicles: \(V \geq 10\).
3. At least 5 times as many people buy passenger tickets as vehicle tickets: \(P \geq 5V\).

To solve this problem using Gurobi in Python, we will first import the necessary library, define our variables and constraints, and then use Gurobi's solver to find the optimal solution.

```python
from gurobipy import *

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

# Define the variables
V = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Vehicle_Tickets")
P = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Passenger_Tickets")

# Define the objective function: Maximize profit
m.setObjective(50*V + 50*P, GRB.MAXIMIZE)

# Add constraints
m.addConstr(V + P <= 100, "Total_Tickets_Constraint")
m.addConstr(V >= 10, "Minimum_Vehicle_Tickets_Constraint")
m.addConstr(P >= 5*V, "Passenger_to_Vehicle_Ratio_Constraint")

# Optimize the model
m.optimize()

# Print out the results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution: {V.varName} = {V.x}, {P.varName} = {P.x}")
    print(f"Maximum Profit: ${50*V.x + 50*P.x}")
else:
    print("No optimal solution found")
```