## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to maximize profit from selling adult and children's tickets on a bus, given certain constraints.

### Variables
- Let \(A\) be the number of adult tickets sold.
- Let \(C\) be the number of children's tickets sold.

### Objective Function
The profit made on each adult ticket is $3, and on each children's ticket is $1. Therefore, the total profit \(P\) can be represented as:
\[ P = 3A + C \]

The goal is to maximize \(P\).

### Constraints
1. **Bus Capacity**: The bus can carry at most 80 people.
\[ A + C \leq 80 \]

2. **Children's Tickets Reservation**: The bus reserves at least 15 tickets for children.
\[ C \geq 15 \]

3. **Adult vs Children's Tickets Ratio**: At least 3 times as many tickets sold are adult tickets than children's tickets.
\[ A \geq 3C \]

4. **Non-Negativity**: The number of tickets cannot be negative.
\[ A \geq 0, C \geq 0 \]

However, given that \(C \geq 15\) and \(A \geq 3C\), the non-negativity constraints for \(A\) and \(C\) are implicitly satisfied.

## Gurobi Code

```python
import gurobi

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

    # Define variables
    A = m.addVar(name="Adult_Tickets", lb=0, ub=None)
    C = m.addVar(name="Children_Tickets", lb=0, ub=None)

    # Objective function: Maximize profit
    m.setObjective(3*A + C, gurobi.GRB.MAXIMIZE)

    # Constraints
    m.addConstr(A + C <= 80, name="Bus_Capacity")
    m.addConstr(C >= 15, name="Children_Tickets_Reservation")
    m.addConstr(A >= 3*C, name="Adult_vs_Children_Tickets_Ratio")

    # Solve the problem
    m.optimize()

    # Check if the model is optimized
    if m.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution: Adult Tickets = {A.varValue}, Children's Tickets = {C.varValue}")
        print(f"Max Profit: ${3*A.varValue + C.varValue}")
    else:
        print("The model is infeasible")

solve_ticket_problem()
```

This Gurobi code formulates the problem as described, with the objective to maximize profit under the given constraints, and then solves it. If a feasible solution exists, it prints out the optimal number of adult and children's tickets to sell and the maximum profit achievable. If the problem is infeasible, it indicates that as well.