## Problem Description and Formulation

The problem requires determining the number of business class and coach class tickets that Nova Transport should sell to maximize profit, given certain constraints.

- The train can host up to 600 passengers.
- Business class seats are sold for a $300 profit each, and coach class tickets are sold for a $150 profit each.
- More than 4 times as many passengers prefer to travel by coach seating than by business class.
- There are at least 45 seats reserved for business class passengers.

## Symbolic Representation

Let's denote:
- \(B\) as the number of business class tickets sold.
- \(C\) as the number of coach class tickets sold.

The objective is to maximize profit \(P = 300B + 150C\).

Subject to:
1. \(B + C \leq 600\) (total passengers constraint)
2. \(C > 4B\) (coach vs business class preference constraint)
3. \(B \geq 45\) (minimum business class seats constraint)
4. \(B \geq 0, C \geq 0\) (non-negativity constraint)

## Gurobi Code

To solve this linear programming problem using Gurobi in Python, we can use the following code:

```python
import gurobi

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

    # Define variables
    B = model.addVar(lb=0, name="Business_Class")
    C = model.addVar(lb=0, name="Coach_Class")

    # Objective function: Maximize profit
    model.setObjective(300*B + 150*C, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(B + C <= 600, name="Total_Passengers")
    model.addConstr(C >= 4*B + 1e-6, name="Coach_vs_Business") # Adding a small value to handle strict inequality
    model.addConstr(B >= 45, name="Min_Business_Class")

    # Optimize
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution:")
        print(f"Business Class Tickets: {B.varValue}")
        print(f"Coach Class Tickets: {C.varValue}")
        print(f"Maximum Profit: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_nova_transport()
```

This code defines the problem in Gurobi, solving for the optimal number of business and coach class tickets to sell, and then prints out the solution and the maximum achievable profit. Note that in the second constraint, a small value (`1e-6`) is added to handle the strict inequality \(C > 4B\).