Below is a reproducible example. First my data:
myvec <- c(-0.531346314931298, 0.298659434001583, -0.691720475359108)
mymat <- new("dgeMatrix", x = c(16.3574344575224, -15.8734447380907, -2.5840252937711,
3.06801501320276, 1.02979983522784, -0.54581011579616, -18.9562379944301,
-13.26737180927, -15.3314450728231, -16.892164730877, -16.232802331708,
-15.9908074719921, 8.05590245092502, -8.05590245092502, -1.51374510440886,
1.51374510440887, 0.12099742985792, -0.120997429857927, -9.56964755533389,
-6.54215734651616, -8.05590245092502, -8.05590245092502, -7.9349050210671,
-8.17689988078295, 3.78595636574668, -4.26994608517835, -1.09039597003911,
0.606406250607442, -0.632174774229305, 0.14818505479763, 1.33542428436906,
-0.303932077216888, 4.33320538312598, -3.30171317597381, 25.7164288780753,
-24.6849366709232, 2.96628530035713, -4.59014893387888, 24.3728836566943,
-25.9967472902161, -1.06980486854892, -0.554058764972834, 25.5514562424382,
24.7395244256774, 28.9907656065072, 21.3002150616084, 24.8998122739105,
25.3911683942051, 2.74913208137828, -1.12526844785653, 13.3846769837898,
-11.760813350268, 1.33987291197775, 0.283990721544011, -0.921712011956532,
-0.109780195195655, 1.3543960057099, -2.38588821286208, 12.0963242028502,
-13.1278164100024, -12.8382805804706, -12.4583324395663, -14.9147553487727,
-10.3818576712642, -13.0374407869434, -12.2591722330935, -1.30406270512594,
1.30406270512594, 1.49880108324396e-15, -1.77635683940025e-15,
6.32415325500923, -6.32415325500923, -1.11022302462516e-15, 2.33146835171283e-15,
-1.30406270512594, 1.30406270512594, 6.32415325500923, -6.32415325500922,
-1.30406270512594, 1.30406270512594, -5.55111512312578e-16, 0,
6.32415325500923, -6.32415325500923, -6.32415325500922, -6.32415325500923,
-7.62821596013516, -5.02009054988329, -6.32415325500923, -6.32415325500923
), Dim = c(30L, 3L), Dimnames = list(NULL, NULL), factors = list())
myvec2 <- new("dgeMatrix", x = c(2.43138842392909e-14, 1.77635683940025e-14,
-0.0990891178849278, 0.0990891178849509, 1.4210854715202e-14,
-1.99840144432528e-15, -0.0990891178849438, 0.0990891178849393,
7.105427357601e-15, -1.75415237890775e-14, -7.54951656745106e-15,
-1.77635683940025e-15, 4.88498130835069e-15, 3.5527136788005e-15,
-0.099089117884942, 0.0990891178849376, -4.44089209850063e-15,
2.48689957516035e-14, -0.0990891178849393, 0.0990891178849416,
-1.77635683940025e-15, -7.21644966006352e-15, -1.02140518265514e-14,
-1.77635683940025e-15, 3.99680288865056e-15, 0, -0.0990891178849447,
0.0990891178849447, 0, 1.4432899320127e-15), Dim = c(30L, 1L),
Dimnames = list(NULL, NULL), factors = list())
I specify my objective function:
myobj <- function(x){
return(-x)
}
I specify my constraint function. I have a total of 33 constraints. The last 3 constraints specified in constr2 require the solution parameters to be greater than or equal to the values in myvec.
myconstr <- function(x){
constr1 <- as.numeric(as.matrix(cbind(mymat, -myvec2)) %*% c(x, 1))
# Must be bigger than myvec
constr2 <- x - myvec
return(c(constr1, constr2))
}
Now I run the nsga2 function:
library(mco)
out <- nsga2(myobj, idim = 3, odim = 3,
lower.bounds = c(12.36988, -25.19478, -42.12804),
upper.bounds = c(11.30719, 25.79210, 40.74460),
constraints = myconstr, cdim = 33)
> out$par[1, ] >= myvec
[1] TRUE TRUE FALSE
However, when I double check whether the solutions in out are larger than myvec, it turns out that the solutions are not satisfying the constraint that they have to be larger than myvec. Why is this the case?