RBDO-Vector Constraints

Hello UQLab Community,

I’m new in UQLab software. I start to use the RBDO examples in my project. After investigation the different examples in RBDO and user manual, I couldn’t find an answer for my question. My project has 11 constraints. 10 constraints are vector with different size. I try to show this problem with the “uq_columncompression” example. I add one environmental parameter (u: marginal No.6 ) and define new constraints. The first constraint (Y (: , 1)) is as same as the constraints implemented in the manual example. The other constraints are { Y (: , 2) , Y (: , 3) , …., Y (: , 11)} and the size of each new constraint is different. For example Y (: , 2) has one element, the Y (: , 3) has two elements, and so on.

In summary, How to optimize a VECTOR constraint with different size in RBDO using UQLab?

Can I attach the modified uq_columncompression example for further investigation?
Any help is gratefully appreciated.


Dear UQLab
Finally, I get permission to upload files.

MariaRBDO_VectorizedConstraints.zip (3.5 KB)

Hi @Maria,

I think the problem is that you didn’t define the constraint properly. In the loop, the size of the vectors in the two sides of the assignment are not the same for i>1.
The fix should be something like this:

for i=1:10 
    tmp =(randn(i,1).*u(1:i,1)./(b(i,1).*h(i,1)))+1.34; %NEW CONSTRAINTS
    Y = [Y, tmp] ;

The resulting constraint would be in the format consistent with the RBDO module.

I also think you may want to check that the equation you wrote in the loop is really what you have in mind. I find it a bit odd to extract only the first 10 realizations of the last environmental variable to compute the constraint.
Another potential problem I see here is that you are calling a randn in the constraint function directly. This makes your constraint stochastic, therefore you can’t use gradient-based solvers to solve this problem. And even if you were to use an evolutionary algorithm like CMA-ES or GA, the convergence will not be smooth. Within the RBDO module, we use the concept of common random numbers or exterior sampling approach to transform the stochastic constraints into deterministic ones. You should may be consider it. Basically in your case, it would simply mean resetting the random generator seed within the constraint somewhere before calling randn for the first time, say before the loop.