Optimización de Pareto: puntos no dominados

Escribí un algoritmo que devuelve una lista similar a la que devuelve nsga2. (nsga2 del paquete "mco" (pdf))

El algoritmo no puede reconocer si un punto no está dominado. Algunos de los puntos que devuelve están dominados y solo contiene los puntos y sus valores, no el vector lógico que devuelve nsga2.

Estoy tratando de obtener los puntos no dominados (no sus valores).

Con el resultado de nsga2 puede usar paretoSet () para obtener los valores, sin embargo, eso depende de que el vector lógico haya sido calculado previamente durante nsga2.

También miré paretoFront () / paretoFilter () de "mco" y nondominated_points () del paquete "emoa" (pdf), aunque solo funcionan con los valores, no hay forma de obtener los puntos.

Una forma de resolver esto sería aceptar los valores, y luego, por cada valor que pase por los puntos, verifique si tiene ese valor y, de ser así, agréguelo a una lista. Pero creo que tiene que existir una función que devuelva los puntos.

Para reproducir esto puedes usar:

res = nsga2(func, 3, 2, lower.bounds=rep(0, 5), upper.bounds=rep(1, 5))
res$pareto.optimal = NULL
points = paretoSet(res) # points will be empty because res does 
                        # not have the logic vector

Respuestas a la pregunta(2)

Su respuesta a la pregunta