To solve the optimization problem described, we first need to translate the natural language description into a symbolic representation. This involves defining variables for the quantities of each seafood medley package to be sold and then formulating the objective function and constraints based on these variables.

Let's define:
- $x_1$ as the number of packages of Seafood Medley One to be sold.
- $x_2$ as the number of packages of Seafood Medley Two to be sold.

The objective is to maximize profit. Given that the profit per package of Seafood Medley One is $20 and the profit per package of Seafood Medley Two is $25, the objective function can be written as:
\[ \text{Maximize: } 20x_1 + 25x_2 \]

The constraints are based on the availability of scallops, mussels, and oysters:
- Each package of Seafood Medley One contains 20 grams of scallops, so $x_1$ packages will contain $20x_1$ grams of scallops. Similarly, each package of Seafood Medley Two contains 40 grams of scallops, leading to $40x_2$ grams of scallops in $x_2$ packages. The total amount of scallops available is 10,000 grams. Thus, the constraint for scallops is:
\[ 20x_1 + 40x_2 \leq 10000 \]
- For mussels, each package of Seafood Medley One contains 30 grams, and each package of Seafood Medley Two contains 40 grams. With 12,000 grams of mussels available, the constraint is:
\[ 30x_1 + 40x_2 \leq 12000 \]
- For oysters, with 50 grams in each Seafood Medley One package and 20 grams in each Seafood Medley Two package, and 11,000 grams available, the constraint is:
\[ 50x_1 + 20x_2 \leq 11000 \]
- Additionally, the number of packages sold cannot be negative, so we have non-negativity constraints:
\[ x_1 \geq 0 \]
\[ x_2 \geq 0 \]

Thus, the symbolic representation of the problem is:
```json
{
  'sym_variables': [('x1', 'number of Seafood Medley One packages'), ('x2', 'number of Seafood Medley Two packages')],
  'objective_function': '20*x1 + 25*x2',
  'constraints': ['20*x1 + 40*x2 <= 10000', '30*x1 + 40*x2 <= 12000', '50*x1 + 20*x2 <= 11000', 'x1 >= 0', 'x2 >= 0']
}
```

Now, let's implement this problem in Gurobi using Python:

```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="x1")
x2 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="x2")

# Set the objective function
m.setObjective(20*x1 + 25*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(20*x1 + 40*x2 <= 10000, "scallops")
m.addConstr(30*x1 + 40*x2 <= 12000, "mussels")
m.addConstr(50*x1 + 20*x2 <= 11000, "oysters")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"x1 = {x1.x}")
    print(f"x2 = {x2.x}")
    print(f"Objective function value: {m.objVal}")
else:
    print("No optimal solution found")
```