To solve this problem, we first need to define the variables and constraints based on the given information.

Let's denote:
- \(x\) as the number of boat trips.
- \(y\) as the number of trips his neighbor makes.
- The objective is to maximize the total number of berries transported, which can be represented as \(200x + 40y\).

The constraints are:
1. The cost constraint: \(30x + 8y \leq 500\), since the man does not want to spend more than $500.
2. The boat trip constraint: \(x \leq y\), because the number of boat trips cannot exceed the number of trips his neighbor makes.

Now, let's formulate this into a linear programming problem:

Maximize: \(200x + 40y\)

Subject to:
- \(30x + 8y \leq 500\)
- \(x \leq y\)
- \(x \geq 0\) and \(y \geq 0\), since the number of trips cannot be negative.

Here's how we can implement this in Gurobi using Python:

```python
from gurobipy import *

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

# Define variables
x = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="boat_trips")
y = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="neighbor_trips")

# Set the objective function
m.setObjective(200*x + 40*y, GRB.MAXIMIZE)

# Add constraints
m.addConstr(30*x + 8*y <= 500, "cost_constraint")
m.addConstr(x <= y, "boat_trip_constraint")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of boat trips: {x.x}")
    print(f"Number of neighbor trips: {y.x}")
    print(f"Total berries transported: {200*x.x + 40*y.x}")
else:
    print("No optimal solution found")
```