## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to maximize the profit of a ferry service by determining the number of vehicle tickets and passenger tickets to sell.

### Decision Variables

*   $v$: Number of vehicle tickets sold
*   $p$: Number of passenger tickets sold

### Objective Function

The profit made per vehicle ticket and per passenger ticket is $50. Therefore, the total profit $P$ can be represented as:

$P = 50v + 50p$

The objective is to maximize $P$.

### Constraints

1.  **Total Tickets Constraint**: The ferry can sell at most 100 tickets.

    $v + p \leq 100$

2.  **Minimum Vehicle Tickets Constraint**: The ferry reserved a minimum of 10 tickets for vehicles.

    $v \geq 10$

3.  **Passenger vs. Vehicle Tickets Constraint**: At least 5 times as many people buy passenger tickets than vehicle tickets.

    $p \geq 5v$

### Non-Negativity Constraints

*   $v \geq 0$ (Number of vehicle tickets cannot be negative)
*   $p \geq 0$ (Number of passenger tickets cannot be negative)

However, the constraint $v \geq 10$ already implies $v \geq 0$, and $p \geq 5v$ implies $p \geq 0$ given that $v \geq 0$. So, we keep the constraints as is.

## Gurobi Code

```python
import gurobi

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

    # Define the decision variables
    v = model.addVar(lb=0, name="vehicle_tickets")
    p = model.addVar(lb=0, name="passenger_tickets")

    # Objective function: Maximize profit
    model.setObjective(gurobi.quicksum([50 * v, 50 * p]), gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(v + p <= 100, name="total_tickets")
    model.addConstr(v >= 10, name="min_vehicle_tickets")
    model.addConstr(p >= 5 * v, name="passenger_vs_vehicle_tickets")

    # Optimize the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution:")
        print(f"Vehicle Tickets: {v.varValue}")
        print(f"Passenger Tickets: {p.varValue}")
        print(f"Max Profit: ${50 * v.varValue + 50 * p.varValue}")
    else:
        print("No optimal solution found.")

# Run the optimization
ferry_ticket_optimization()
```

This Gurobi code defines the optimization problem as per the given description and solves it to find the optimal number of vehicle and passenger tickets that maximize profit.