## Problem Description and Formulation

The tutoring company wants to maximize the influence of their advertisements under certain constraints. Let's denote the number of advertisements on search engines, videos, and social media as \(x_1\), \(x_2\), and \(x_3\), respectively.

### Objective Function

The objective is to maximize the total influence. The influence of each type of advertisement is given as follows:
- Search engine advertisement reaches 100,000 users.
- Video advertisement reaches 7,000 users.
- Social media advertisement reaches 800 users.

So, the objective function to maximize is: \(100,000x_1 + 7,000x_2 + 800x_3\).

### Constraints

1. **Cost Constraint**: The cost of each type of advertisement is given as:
   - Search engine: $50,000
   - Video: $5,000
   - Social media: $1,000

   The weekly budget is $850,000. So, the cost constraint is: \(50,000x_1 + 5,000x_2 + 1,000x_3 \leq 850,000\).

2. **Video Advertisements Limit**: The company can make at most 4 advertisements on videos: \(x_2 \leq 4\).

3. **Social Media Advertisements Limit**: At most half of all advertisements must be on social media: \(x_3 \leq 0.5(x_1 + x_2 + x_3)\).

4. **Search Engines Advertisements Requirement**: At least 10% of advertisements should be on search engines: \(x_1 \geq 0.1(x_1 + x_2 + x_3)\).

5. **Non-Negativity and Integer Constraints**: \(x_1, x_2, x_3 \geq 0\) and are integers.

### Gurobi Code

```python
import gurobipy as gp

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

# Variables
x1 = m.addVar(name="search_engines", vtype=gp.GRB.INTEGER)  # Advertisements on search engines
x2 = m.addVar(name="videos", vtype=gp.GRB.INTEGER)      # Advertisements on videos
x3 = m.addVar(name="social_media", vtype=gp.GRB.INTEGER) # Advertisements on social media

# Objective: Maximize influence
m.setObjective(100000*x1 + 7000*x2 + 800*x3, gp.GRB.MAXIMIZE)

# Cost constraint
m.addConstr(50000*x1 + 5000*x2 + 1000*x3 <= 850000, name="budget_constraint")

# Video advertisements limit
m.addConstr(x2 <= 4, name="video_limit")

# Social media advertisements limit
m.addConstr(x3 <= 0.5*(x1 + x2 + x3), name="social_media_limit")

# Search engines advertisements requirement
m.addConstr(x1 >= 0.1*(x1 + x2 + x3), name="search_engines_requirement")

# Non-negativity constraints are inherently handled by defining variables as non-negative

# Solve the model
m.solve()

# Print the results
if m.status == gp.GRB.OPTIMAL:
    print("Optimal Solution:")
    print(f"Advertisements on search engines: {x1.varValue}")
    print(f"Advertisements on videos: {x2.varValue}")
    print(f"Advertisements on social media: {x3.varValue}")
    print(f"Max Influence: {m.objVal}")
else:
    print("The model is infeasible")
```