To solve this problem, we need to formulate a linear programming model that captures the cyclist's nutritional requirements and minimizes his costs. Let's define two decision variables: `chicken` (the number of chickens to buy) and `potatoes` (the number of potatoes to buy).

The objective function is to minimize the total cost, which can be represented as:

Minimize: 6*chicken + 2*potatoes

We have three nutritional constraints:

1. Protein constraint: The cyclist needs at least 80 grams of protein.
20*chicken + 2*potatoes >= 80

2. Fat constraint: The cyclist needs at least 50 grams of fat.
4*chicken + 3*potatoes >= 50

3. Carbs constraint: The cyclist needs at least 100 grams of carbs.
4*chicken + 7*potatoes >= 100

We also have non-negativity constraints, as the number of chickens and potatoes cannot be negative:

chicken >= 0
potatoes >= 0

Now, let's translate this model into Gurobi code in Python.

```python
from gurobipy import *

# Create a new model
model = Model("Cyclist_Diet")

# Define the decision variables
chicken = model.addVar(vtype=GRB.CONTINUOUS, name="chicken", lb=0)
potatoes = model.addVar(vtype=GRB.CONTINUOUS, name="potatoes", lb=0)

# Define the objective function
model.setObjective(6*chicken + 2*potatoes, GRB.MINIMIZE)

# Add the nutritional constraints
model.addConstr(20*chicken + 2*potatoes >= 80, "protein")
model.addConstr(4*chicken + 3*potatoes >= 50, "fat")
model.addConstr(4*chicken + 7*potatoes >= 100, "carbs")

# Optimize the model
model.optimize()

# Print the results
if model.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print("Number of chickens to buy:", chicken.x)
    print("Number of potatoes to buy:", potatoes.x)
    print("Total cost: $", model.objVal)
else:
    print("No optimal solution found.")
```