dyn.load("nextperm.so") next.perm<-function(x) .C("permNext",as.double(x),as.integer(length(x)))[[1]] are.monotone<-function(x,y) as.logical(.C("isMon",as.double(x),as.double(y),as.integer(length(x)),as.integer(1))[[4]]) uniscale<-function(delta,w=1-diag(dim(delta)[1])) { n<-dim(delta)[1]; m<-0; k<-0; fmin<-Inf; x<-1:n v<-as.matrix(solve((diag(rowSums(w))-w)+(1/n))-(1/n)) repeat{ k<-k+1 s<-sign(outer(x,x,"-")) t<-as.vector(v%*%rowSums(delta*w*s)) if (are.monotone(x,t)) { m<-m+1 d<-abs(outer(t,t,"-")) f<-sum(w*(delta-d)^2) print(c(m,f,fmin,max(t))) if (f < fmin) { fmin<-f xmin<-t } } if (prod(x==(n:1))==1) return(list(xmin=xmin,fmin=fmin,m=m,k=k)) x<-next.perm(x) } }