## Problem Description and Symbolic Representation

The problem involves maximizing viewership by placing posters in three malls: northside, southside, and central, under certain constraints.

### Symbolic Variables
Let's denote:
- $x_1$ as the number of posters at the northside mall,
- $x_2$ as the number of posters at the southside mall,
- $x_3$ as the number of posters at the central mall.

### Objective Function
The objective is to maximize viewership. Given:
- The northside mall attracts 20000 viewers per poster,
- The southside mall attracts 50000 viewers per poster,
- The central mall attracts 40000 viewers per poster,

The objective function can be represented as:
\[ \text{Maximize:} \quad 20000x_1 + 50000x_2 + 40000x_3 \]

### Constraints
1. **Budget Constraint:** The weekly budget is $30000. Given:
   - The northside mall costs $500 per poster,
   - The southside mall costs $1000 per poster,
   - The central mall costs $800 per poster,

\[ 500x_1 + 1000x_2 + 800x_3 \leq 30000 \]

2. **Southside Mall Limit:** The southside mall limits the number of posters to 5.

\[ x_2 \leq 5 \]

3. **Central Mall Limitation:** At most a third of the posters should be placed at the central mall.

\[ x_3 \leq \frac{1}{3}(x_1 + x_2 + x_3) \]

   Simplifying:
\[ 3x_3 \leq x_1 + x_2 + x_3 \]
\[ 2x_3 \leq x_1 + x_2 \]

4. **Northside Mall Requirement:** At least 20% of the posters should be placed at the northside mall.

\[ x_1 \geq 0.2(x_1 + x_2 + x_3) \]

   Simplifying:
\[ 5x_1 \geq x_1 + x_2 + x_3 \]
\[ 4x_1 \geq x_2 + x_3 \]

5. **Non-Negativity Constraint:** The number of posters cannot be negative.

\[ x_1, x_2, x_3 \geq 0 \]
\[ x_1, x_2, x_3 \in \mathbb{Z} \] (Integer constraint, as posters must be whole)

## Symbolic Representation in JSON

```json
{
    'sym_variables': [('x1', 'posters at northside mall'), ('x2', 'posters at southside mall'), ('x3', 'posters at central mall')],
    'objective_function': 'Maximize: 20000x1 + 50000x2 + 40000x3',
    'constraints': [
        '500x1 + 1000x2 + 800x3 <= 30000',
        'x2 <= 5',
        '2x3 <= x1 + x2',
        '4x1 >= x2 + x3',
        'x1, x2, x3 >= 0'
    ]
}
```

## Gurobi Code in Python

```python
import gurobipy as gp
from gurobipy import GRB

# Create a new model
model = gp.Model("poster_placement")

# Define variables
x1 = model.addVar(name="northside", vtype=GRB.INTEGER)  # posters at northside mall
x2 = model.addVar(name="southside", vtype=GRB.INTEGER)  # posters at southside mall
x3 = model.addVar(name="central", vtype=GRB.INTEGER)   # posters at central mall

# Objective function: Maximize viewership
model.setObjective(20000*x1 + 50000*x2 + 40000*x3, GRB.MAXIMIZE)

# Budget constraint
model.addConstr(500*x1 + 1000*x2 + 800*x3 <= 30000, name="budget_constraint")

# Southside mall limit
model.addConstr(x2 <= 5, name="southside_limit")

# Central mall limitation
model.addConstr(2*x3 <= x1 + x2, name="central_limitation")

# Northside mall requirement
model.addConstr(4*x1 >= x2 + x3, name="northside_requirement")

# Non-negativity constraints
model.addConstr(x1 >= 0, name="x1_nonneg")
model.addConstr(x2 >= 0, name="x2_nonneg")
model.addConstr(x3 >= 0, name="x3_nonneg")

# Solve the model
model.optimize()

# Print solution
if model.status == GRB.OPTIMAL:
    print("Optimal Solution:")
    print(f"Northside Mall: {x1.varValue}")
    print(f"Southside Mall: {x2.varValue}")
    print(f"Central Mall: {x3.varValue}")
    print(f"Max Viewership: {model.objVal}")
else:
    print("No optimal solution found.")
```