# CPLEX gives different solutions of MILP every run

I am solving a mixed-integer (binary) linear problem using CPLEX as a solver (branch-and-bound method). But I encountered the following issue. Each run I get a different solution at a different node of MILP. However, these solutions are very close to each other.

According to my logic (please correct me if I'm wrong), the solver stops when the solution satisfies absolute\relative (or both?) gap tolerance, so basically, this gap could be satisfied at different nodes of the branch-and-bound algorithm.

My question is: Which parameters impact the final node where the algorithm ends? Are there any parameters that CPLEX chooses randomly at the beginning of the algorithm (like branching variables for example or others) that I can fix and end up on the same solution every run?