Model predictive control for linear systems: adaptive, distributed and switching implementations