Guest User

multiple objective pareto front

a guest
Nov 5th, 2016
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 0.80 KB | None | 0 0
  1. # multiple objective pareto front
  2. MPF <- function(P){
  3.   i = 1; n = dim(P)[1]; N = dim(P)[2]
  4.   if(length(rownames(P))==0) rownames(P) = 1:dim(P)[1]
  5.   P = as.matrix(na.omit(unique(P)))
  6.   P = P[eval(parse(text = paste0("order(", paste0("P[,", 1:ncol(P), "]", collapse=","), ",decreasing=T)"))),]
  7.   while(n > i){
  8.     x = matrix(NA, nrow=n, ncol=N); y = logical(n); m = rownames(P)
  9.     for(j in 1:N){x[,j] = P[i,j] > P[,j]} # do not delete itself
  10.     for(s in 1:n) y[s] = all(x[s,])
  11.     P[y,] <- NA; P = na.omit(P); na = na.action(P); r = rownames(P) #; cat(dim(P)[1], i,"\n");
  12.     if(m[i] %in% r) {i = match(m[i], r)+1}else{if(dim(P)[1] == n) i = n else{i = match(m[min((c(1:n)[-na])[i < c(1:n)[-na]], na.rm=T)], r)}}
  13.     n = dim(P)[1]
  14.   }
  15.   return(as.integer(rownames(as.matrix(P))))
  16. }
  17. MPF <- cmpfun(MPF)
Advertisement
Add Comment
Please, Sign In to add comment