When number of controlled output exceeds the number of manipulated inputs, then it is possible to specify set points only for number of outputs equal to or less than number of the manipulated inputs.
It is possible to specify setpoints for all the controlled variables provided that you can establish a relation among those controlled variables. For example 3 controlled variables and 2 manipulated variables. If you use a multivariable cost function inside MPC, the controller will acting over two manipulated in order to achieve the set point of the three controlled variables. The key is on the cost function design, because it must generate non-conflictive control actions over the process as a whole.
your question is not that easy to answer. I'll try to answer your question in two steps: First I'll refer to the non-square system structure (more controls than outputs), later I'll make a comment on offset-free MPC.
Usually you can get into trouble when the number of outputs is larger than the number of inputs. And this holds true for any control strategy, not only MPC. For example, consider a simple model of an airplane where the height above ground and the speed are the states, so we have x =(x1, x2) = (speed, position), the forward acceleration of the airplane is the input. Now assume that the output map is simply y =x. The dynamics are double integrator.
dx_dt = [0, 1;0, 0]x + [0;1]u
y = (x1; x2)
If you require to stabilize the set-point y_set = (0,0) you will be able to do this, since (0,0) is a steady state of the model. However, if you require y_set = (0,c), i.e. you want to stay at a certain position with a speed c= x_2 \neq 0 you get into trouble. If you insert this setpoint to your mode, you will see that for no value of u y_set = (x_1set, x_2set) = (0,c) is a steady state of your system. In other words you can't stay at that point. This makes also sense from the Physic point of view: you can't saty at a point and have a velocity larger than 0.
So if you pick a set-point which is consistent, you can achieve good control performance via MPC or some other method. But as we have seen with the double integrator you might not pick any arbitrary set-point. So there is no general positive answer to your question. It depends a lot on the specific system you are looking at.
Now, the second part of your question: Even if the number of controls and outputs is equal, MPC does not directly guarantee offset-free control. In case of constant state or output disturbances you might need to design an offset-free MPC controller. A good starting point to learn about offset free MPC is the book of
Rawlings & Mayne: Model Predictive Control: Theory & Design, 2009.
They have a section directly entitled "offset-free MPC".
Furthermore, if you want to understand how one usually handles the situation of non-square systems in MPC, I suggest to look at Chapter 1.5 of the same book. There they discuss how you can compute suitable target set-points.
Thanks..interesting example..can you please elaborate it mathematically. (in terms of linear algebra). For simplification lets assume system is linear.
Lets assume A = [0,1;0,0], B = [0;1], C = [1,0;0,1] (assuming Matlab-like notation with [x1;x2] being a column vector).
Now try to verify whether any point [0;c], c\neq 0 can be a set-point or steady state of the system.
it is easy to see that the steady state condition
A*[0;c] + B*u = 0 --> [0,1;0,0]*[0;c] = [0;u]
reads
c = 0
0 = u
While the second equation can be satisfied by setting u = 0, we have that c \neq 0. And thus the steady state condition cannot be satisfied. Thus the system cannot stay at [0;c] and consequently also MPC will fail to stabilize this point.
As mentioned above this also makes sense from the physics point of view. If we interprete x1 as position and x2 as velocity, then it is clear that we cannot stay at one point while having a velocity larger than 0.