Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # multiple objective pareto front
- MPF <- function(P){
- i = 1; n = dim(P)[1]; N = dim(P)[2]
- if(length(rownames(P))==0) rownames(P) = 1:dim(P)[1]
- P = as.matrix(na.omit(unique(P)))
- P = P[eval(parse(text = paste0("order(", paste0("P[,", 1:ncol(P), "]", collapse=","), ",decreasing=T)"))),]
- while(n > i){
- x = matrix(NA, nrow=n, ncol=N); y = logical(n); m = rownames(P)
- for(j in 1:N){x[,j] = P[i,j] > P[,j]} # do not delete itself
- for(s in 1:n) y[s] = all(x[s,])
- P[y,] <- NA; P = na.omit(P); na = na.action(P); r = rownames(P) #; cat(dim(P)[1], i,"\n");
- 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)}}
- n = dim(P)[1]
- }
- return(as.integer(rownames(as.matrix(P))))
- }
- MPF <- cmpfun(MPF)
Advertisement
Add Comment
Please, Sign In to add comment