## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The processing plant needs to decide how many crabs and lobsters to clean and shell in order to maximize profit, given the constraints on cleaning and shelling time.

Let's define the decision variables:

* $c$ = number of crabs to clean and shell
* $l$ = number of lobsters to clean and shell

The objective function is to maximize profit:

* Profit = $14c + 18l$

The constraints are:

* Cleaning time: $4c + 5l \leq 400$
* Shelling time: $15c + 12l \leq 900$
* Non-negativity: $c \geq 0, l \geq 0$

## Gurobi Code

```python
import gurobi

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

# Define the decision variables
c = m.addVar(lb=0, name="crabs")
l = m.addVar(lb=0, name="lobsters")

# Define the objective function
m.setObjective(14*c + 18*l, gurobi.GRB.MAXIMIZE)

# Define the constraints
m.addConstr(4*c + 5*l <= 400, name="cleaning_time")
m.addConstr(15*c + 12*l <= 900, name="shelling_time")

# Optimize the model
m.optimize()

# Print the solution
if m.status == gurobi.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Crabs: {c.varValue}")
    print(f"Lobsters: {l.varValue}")
    print(f"Max Profit: {m.objVal}")
else:
    print("No optimal solution found.")
```