2013-06-17 2 views
1

R은 Pareto-optimal 인 입력 데이터 세트의 점만 인쇄 (또는 강조 표시) 할 수 있는지 궁금합니다.R을 사용하여 데이터 세트의 파레토 솔루션을 인쇄하십시오.

예를 들어, 아래의 2D 플롯에서 50 점 세트를 관찰 할 수 있습니다. 파레토 최적 점을 다른 색상으로 인쇄하고 싶습니다. 이 예에서는 두 개의 두 차원을 최소화한다고 가정합니다.

http://i42.tinypic.com/jso7ma.png

모든 팁은?

편집 :

주석에 의하면, I는 다음과 같은 코드로 원하는 결과를 달성 :

n <- 40 
d <- data.frame(
    x = rnorm(n), 
    y = rnorm(n) 
) 
# We want the "extreme" points in the following plot 
par(mar=c(1,1,1,1)) 
plot(d, axes=FALSE, xlab="", ylab="") 
for(i in 1:n) { 
    polygon(c(-10,d$x[i],d$x[i],-10), c(-10,-10,d$y[i],d$y[i]), 
    col=rgb(.9,.9,.9,.2)) 
} 


d <- d[ order(d$x, decreasing=FALSE), ] 
result <- d[1,] 
for(i in seq_len(nrow(d))[-1]) { 
    if(d$y[i] < result$y[nrow(result)]) { 
    result <- rbind(result, d[i,]) # inefficient 
    } 
} 
points(result, cex=2, pch=15) 
+0

관련 질문 : 많은 답변을 ^^ ;;;;;;;;;;;;;;;;;;;nstackoverflow.com/questions/9106401/implementation-of-skyline-query-or-efficient-frontier –

+0

감사합니다. 3D로 할 수있는 아이디어가 있습니까? 위의 방법은 한 차원 고정으로 2D에 편리합니다. – Dio

+0

그 점에서'sqldf' 기반 솔루션은 적응하기 쉬워야합니다. 데이터 집합이 작 으면 성능 (큐빅 ...)이 문제가되지 않아야합니다. –

답변

1

여기 chull (점들의 집합의 컨벡스 헐 (convex hull))를 사용하는 솔루션이다. 경고 : 테스트되지 않았습니다.

# assume d is your matrix or data frame of points 
ch <- d[chull(d), ] 
ch[apply(ch, 1, function(p) !any(ch[, 1] < p[1] & ch[, 2] < p[2])), ] 

당신은 당신의 자신의 볼록 선체 알고리즘 chull를 대체하여> 2 차원이를 확장 할 수, here에서 그 중 하나라고하고 조건 테스트를 연장 맞게.

+1

불행히도 효율적인 프론티어는 항상 볼록한 선체가 아닙니다 ... –

관련 문제