Hi ,
I want to seek some clarification on the constraints. I am using the Python interface on Ubuntu.
Initially, I encountered difficulties expressing linear constraints on two states of my state vector, x
, such that a certain condition is satisfied (min < x[2]-x[3] < max
). I tried various approaches, including an identity matrix, but faced issues with dimensions. Here is how I would do it. Say the dimension of constraints is k
. Then the matrix k
xn
specifies how the constraints are defined. If you take the matrix that translates a matrix and a vector to a constraint expression such as: k
x n
* n
x1
, you get k
xn
, which describes the constraints. In other words, kx < kxn * nx1 < kx
. So in my case, k
is one, so my approach would have been.
self.__ocp.constraints.C = np.array([[0, 0, 1, -1, 0]])
self.__ocp.constraints.D = np.array([[0, 0]])
self.__ocp.constraints.lg = np.array([self.__min])
self.__ocp.constraints.ug = np.array([self.__max])
This gives the error:
Exception: Invalid constraint C value. Should be a 2-dimensional numpy array.
However, the following works.
python
self.__ocp.constraints.C = np.array([[0, 0, 1, -1, 0], [0, 0, 1, -1, 0]])
self.__ocp.constraints.D = np.array([[0, 0], [0, 0]])
self.__ocp.constraints.lg = np.array([self.__min, self.__min])
self.__ocp.constraints.ug = np.array([self.__max, self.__max])
Questions and Confusion: The solution above works, but Iām puzzled as to why I have to restate the constraints. Additionally, I find it somewhat counterintuitive that to express the condition min < x-y < max
, I need a 2D vector of the min and max values. Could you kindly shed some light on these aspects? Did I misunderstand something?
self.__ocp.constraints.C = np.array([[0, 0, 1, -1, 0], [0, 0, 0, 0, 0]])
self.__ocp.constraints.D = np.array([[0, 0], [0, 0]])
self.__ocp.constraints.lg = np.array([self.__min, self.__min*0])
self.__ocp.constraints.ug = np.array([self.__max, self.__max*0])
I did the above and it worked. So the dimension of C cant be R1xM but there has to be zeros?
I did try to remove the check but some code in the c-libray did not compile.