Otimização de Pareto - pontos não dominados

Eu escrevi um algoritmo que retorna uma lista semelhante àquela que o nsga2 retorna. (nsga2 do pacote "mco" (pdf)))

O algoritmo não pode, ele próprio, reconhecer se um ponto não é dominado. Alguns dos pontos que ele retorna são dominados e contêm apenas os pontos e seus valores, não o vetor lógico que o nsga2 retorna.

Eu estou tentando obter os pontos não dominados (não seus valores).

Com o resultado do nsga2, você pode usar paretoSet () para obter os valores, no entanto, isso depende do fato de o vetor lógico ter sido pré-computado durante o nsga2.

Também procurei paretoFront () / paretoFilter () de "mco" e nondominated_points () do pacote "emoa" (pdf), no entanto, eles funcionam apenas com os valores, não há como obter os pontos.

Uma maneira de resolver isso seria aceitar os valores e, para cada valor, passar pelos pontos, verificar se ele possui esse valor e, se for o caso, adicioná-lo a uma lista. Mas acho que deve existir uma função que retorne os pontos.

Para reproduzir isso, você pode 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

questionAnswers(2)

yourAnswerToTheQuestion