I would say that you first of all need to figure out what you mean by an optimal solution to a multi objective optimisation problem. Are you searching for all Pareto optimal solutions (a set of solutions), just one (more or less arbitrary) Pareto optimal solution, a lexicographic optimal solution, a max-ordering solution, or something else?
When you have decided on your notation of optimality, you should find a method that uses your single objective SAT solver to find a solution meeting your criteria.
One popular approach is to simply weigh each of your $p$ objective functions, $f_i$, using positive weights, $w_i>0$ and then solve the single objective optimisation problem:
\begin{equation}
\min_{x\in {X}} \sum_{i=1}^p w_if_i(x)
\end{equation}
where $X$ is your set of feasible solutions. This approach will guarantee a Pareto optimal solution, but it can be quite difficult to predict which values of the weights will lead to solutions of your liking. This require some experimentation.
If you are after a lexigraphically optimal solution, the approach described by @A.Omidi in the code sample is the way to go:
- Optimise the most important objective $f_1(x)$ and find an optimal solution with value $f_1^*$.
- Add a constraint to your model: $f_1(x)=f_1^*$
- Change the objective from $f_1(x)$ to $f_2(x)$ and optimize.
- Continue this approach until you have no more objetive functions, or the feasible set is a singleton.
This last approach requires a strict ordering of your objectives from most important to least important. This will give you more control over what solution you end up with, but you also restrict the search for interesting solutions quite considerably. The resulting solution is also guaranteed to be Pareto optimal.