To solve Cooper's problem, we first need to translate the natural language description into a mathematical optimization model. The goal is to maximize profit under given constraints.

Let's define:
- \(x\) as the number of potatoes sold,
- \(y\) as the number of pumpkins sold.

The objective function (to maximize profit) can be written as:
\[ \text{Maximize:} \quad 1.5x + 2.8y \]

Given constraints are:
1. Total cost constraint: \(0.50x + 0.90y \leq 1000\)
2. Relationship between pumpkins and potatoes sold: \(y \leq \frac{1}{3}x\)
3. Minimum and maximum number of potatoes sold: \(250 \leq x \leq 800\)

All variables are non-negative since they represent quantities of items.

Now, let's write the Gurobi code in Python to solve this linear programming problem:

```python
from gurobipy import *

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

# Define variables
x = m.addVar(lb=250, ub=800, vtype=GRB.CONTINUOUS, name="potatoes")
y = m.addVar(vtype=GRB.CONTINUOUS, name="pumpkins")

# Objective function: Maximize profit
m.setObjective(1.5*x + 2.8*y, GRB.MAXIMIZE)

# Constraints
m.addConstr(0.50*x + 0.90*y <= 1000, "cost_constraint")
m.addConstr(y <= (1/3)*x, "relationship_constraint")
m.addConstr(x >= 250, "min_potatoes")
m.addConstr(x <= 800, "max_potatoes")
m.addConstr(y >= 0, "non_negative_pumpkins")

# Solve the model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution: Sell {x.x:.2f} potatoes and {y.x:.2f} pumpkins.")
else:
    print("No optimal solution found.")

```
```python
```