The optimize_mps returns the macro_iteration_result and res_mps. If we evaluate the energy by res_mps.expectation(mpo), the energy is not necessarily equal to min(macro_iteration_result). It is not even necessarily contained in macro_iteration_result. For instance, if the minimal energy is not obtained in the last sweep, but in the middle sweeps (energy does not decrease monotonically with the number of sweeps), then we obtainmin(macro_iteration_result)$\neq$res_mps.expectation(mpo)