To solve this optimization problem, we need to define the decision variables, objective function, and constraints.

Let's denote:
- $x$ as the number of bikes produced,
- $y$ as the number of cars produced.

The objective is to maximize profit. Given that each bike brings a profit of $1000 and each car brings a profit of $3000, the total profit can be represented by the equation: $1000x + 3000y$.

There are two main constraints:
1. The assembly machine constraint: It takes 1 hour to assemble a bike and 3 hours to assemble a car. The machine is available for at most 10 hours per day, which gives us the inequality: $x + 3y \leq 10$.
2. The painting machine constraint: It takes 0.5 hours to paint a bike and 1 hour to paint a car. This machine is available for at most 8 hours per day, leading to the inequality: $0.5x + y \leq 8$.

Additionally, $x$ and $y$ must be non-negative since they represent quantities of vehicles.

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

```python
from gurobipy import *

# Create a model
m = Model("Vehicle_Production")

# Define decision variables
x = m.addVar(name='bikes', vtype=GRB.CONTINUOUS, lb=0)
y = m.addVar(name='cars', vtype=GRB.CONTINUOUS, lb=0)

# Set the objective function to maximize profit
m.setObjective(1000*x + 3000*y, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x + 3*y <= 10, name='assembly_machine')
m.addConstr(0.5*x + y <= 8, name='painting_machine')

# Optimize the model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution: {x.varName} = {x.x}, {y.varName} = {y.x}")
    print(f"Maximum profit: ${m.objVal:.2f}")
else:
    print("No optimal solution found")
```