To solve the optimization problem described, we first need to convert the natural language description into a symbolic representation. This involves defining variables for the quantities of bikes and cars to be produced, formulating the objective function that represents the total profit, and translating the constraints related to machine availability into algebraic expressions.

Let's denote:
- $x_1$ as the number of bikes to be made
- $x_2$ as the number of cars to be made

The objective function aims to maximize the total profit. Given that each bike yields a profit of $1000 and each car yields a profit of $3000, we can express the objective function as:
\[ \text{Maximize: } 1000x_1 + 3000x_2 \]

The constraints are based on the availability of assembly and painting machines. For the assembly machine, which is available for at most 10 hours per day, considering that each bike requires 1 hour and each car requires 3 hours, we have:
\[ x_1 + 3x_2 \leq 10 \]

For the painting machine, which is available for at most 8 hours per day, with bikes requiring 0.5 hours and cars requiring 1 hour, the constraint is:
\[ 0.5x_1 + x_2 \leq 8 \]

Additionally, since we cannot produce a negative number of vehicles, we have non-negativity constraints:
\[ x_1 \geq 0 \]
\[ x_2 \geq 0 \]

Symbolic representation in JSON format:
```json
{
    'sym_variables': [('x1', 'number of bikes'), ('x2', 'number of cars')],
    'objective_function': '1000*x1 + 3000*x2',
    'constraints': ['x1 + 3*x2 <= 10', '0.5*x1 + x2 <= 8', 'x1 >= 0', 'x2 >= 0']
}
```

Now, let's implement this optimization problem using Gurobi in Python:

```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(name="bikes", vtype=GRB.CONTINUOUS, lb=0)
x2 = m.addVar(name="cars", vtype=GRB.CONTINUOUS, lb=0)

# Set the objective function
m.setObjective(1000*x1 + 3000*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x1 + 3*x2 <= 10, name="assembly_machine")
m.addConstr(0.5*x1 + x2 <= 8, name="painting_machine")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution: Produce {x1.x:.2f} bikes and {x2.x:.2f} cars.")
    print(f"Maximum profit: ${m.objVal:.2f}")
else:
    print("No optimal solution found")
```