## Problem Description and Formulation

The problem is a classic example of a linear programming (LP) problem. The goal is to maximize the profit of a soup store by determining the optimal number of servings of crab soup and lobster soup to produce, given the available resources (water, crab meat, and lobster meat).

Let's define the decision variables:

* `x`: number of servings of crab soup
* `y`: number of servings of lobster soup

The objective function is to maximize the profit:

* Profit per serving of crab soup: $3
* Profit per serving of lobster soup: $5
* Objective function: `maximize 3x + 5y`

The constraints are:

* Water: 7 units of water per serving of crab soup, 10 units of water per serving of lobster soup, and 80 units of water available: `7x + 10y <= 80`
* Crab meat: 8 units of crab meat per serving of crab soup, and 65 units of crab meat available: `8x <= 65`
* Lobster meat: 5 units of lobster meat per serving of lobster soup, and 55 units of lobster meat available: `5y <= 55`
* Non-negativity: `x >= 0`, `y >= 0`

## Gurobi Code

```python
import gurobi

# Create a new Gurobi model
model = gurobi.Model()

# Define the decision variables
x = model.addVar(lb=0, name="crab_soup")
y = model.addVar(lb=0, name="lobster_soup")

# Define the objective function
model.setObjective(3*x + 5*y, gurobi.GRB.MAXIMIZE)

# Define the constraints
model.addConstr(7*x + 10*y <= 80, name="water_constraint")
model.addConstr(8*x <= 65, name="crab_meat_constraint")
model.addConstr(5*y <= 55, name="lobster_meat_constraint")

# Optimize the model
model.optimize()

# Print the solution
if model.status == gurobi.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Crab soup servings: {x.varValue}")
    print(f"Lobster soup servings: {y.varValue}")
    print(f"Max profit: {model.objVal}")
else:
    print("No optimal solution found.")
```