[R] Problem with minimization that I failed to understand
Daniel Lobo
d@n|e|obo9976 @end|ng |rom gm@||@com
Fri Mar 28 05:49:07 CET 2025
The objective is to MAXIMIZE the Kendall Correlation.
Given that ?pracma::fmincon minimizes the function, I added a negative sign
in the objective function.
Description
Find minimum of multivariable functions with nonlinear constraints.
Therefore we should not remove the negative sign.
On Fri, 28 Mar 2025 at 03:53, Rui Barradas <ruipbarradas using sapo.pt> wrote:
> Às 19:36 de 27/03/2025, Daniel Lobo escreveu:
> > My code is to minimize the objective function
> >
> > therefore, shouldnt I expect that
> >
> > StartingValue = c(0.12, 0.04, 0.07, 0.03, 0.06, 0.07, 0.07, 0.04, 0.09,
> > 0.08, 0.02, 0.02, 0.03, 0.06, 0.02, 0, 0.07, 0.05, 0.02, 0.02, 0.02)
> > Fn(q1$par) < Fn(StartingValue)
> > ## FALSE
> >
> > Below is the corrected code that can be reproduced:
> >
> > MyDat = structure(list(c(50L, 0L, 0L, 50L, 75L, 100L, 50L, 0L, 50L, 0L,
> > 25L, 50L, 50L, 75L, 75L, 75L, 0L, 75L, 75L, 75L, 0L, 25L, 75L,
> > 75L, 0L, 75L, 100L, 0L, 25L, 100L), c(75L, 0L, 0L, 50L, 100L,
> > 50L, 75L, 75L, 100L, 25L, 0L, 25L, 100L, 0L, 50L, 0L, 25L, 25L,
> > 100L, 75L, 0L, 0L, 0L, 50L, 0L, 75L, 75L, 0L, 50L, 25L), c(50L,
> > 0L, 0L, 0L, 100L, 25L, 0L, 0L, 25L, 50L, 0L, 25L, 75L, 50L, 100L,
> > 50L, 0L, 75L, 25L, 50L, 0L, 0L, 25L, 0L, 50L, 100L, 100L, 0L,
> > 75L, 50L), c(25L, 0L, 0L, 75L, 75L, 25L, 50L, 50L, 100L, 25L,
> > 0L, 100L, 50L, 25L, 100L, 25L, 25L, 100L, 50L, 100L, 0L, 0L,
> > 100L, 50L, 0L, 50L, 75L, 0L, 50L, 25L), c(50L, 0L, 0L, 75L, 75L,
> > 75L, 25L, 25L, 0L, 100L, 0L, 25L, 25L, 75L, 100L, 0L, 25L, 0L,
> > 75L, 25L, 25L, 25L, 75L, 25L, 0L, 75L, 100L, 0L, 100L, 100L),
> > c(50L, 0L, 0L, 50L, 100L, 25L, 25L, 25L, 50L, 50L, 0L, 50L,
> > 75L, 0L, 100L, 50L, 25L, 100L, 50L, 75L, 0L, 0L, 50L, 25L,
> > 0L, 100L, 100L, 0L, 75L, 50L), c(50L, 0L, 0L, 50L, 75L, 25L,
> > 75L, 50L, 100L, 25L, 0L, 75L, 25L, 0L, 50L, 0L, 50L, 75L,
> > 100L, 75L, 0L, 0L, 100L, 0L, 0L, 50L, 75L, 0L, 100L, 100L
> > ), c(25L, 75L, 50L, 25L, 75L, 50L, 100L, 75L, 100L, 25L,
> > 0L, 75L, 25L, 50L, 25L, 25L, 75L, 75L, 100L, 75L, 75L, 100L,
> > 75L, 25L, 0L, 75L, 75L, 0L, 75L, 100L), c(55L, 30L, 20L,
> > 30L, 45L, 30L, 30L, 30L, 70L, 30L, 10L, 45L, 45L, 45L, 45L,
> > 30L, 30L, 55L, 45L, 45L, 30L, 30L, 30L, NA, 30L, 55L, 45L,
> > 20L, 45L, 70L), c(85L, 40L, 40L, 40L, 55L, 40L, 20L, 30L,
> > 30L, 30L, 20L, 30L, 70L, 40L, 85L, 55L, 30L, 40L, 30L, 55L,
> > 20L, 30L, 55L, 0L, 40L, 55L, 70L, 40L, 85L, 70L), c(45L,
> > 45L, 0L, 45L, 45L, 45L, 0L, 0L, 100L, 45L, 0L, 100L, 45L,
> > 45L, 100L, 45L, 45L, 100L, 45L, 45L, 45L, 45L, 25L, 45L,
> > 0L, 100L, 45L, 0L, 45L, 45L), c(55L, 45L, 45L, 45L, 55L,
> > 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 55L, 55L, 45L,
> > 55L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 55L, 45L, 45L, 45L,
> > 45L), c(100L, 100L, 50L, 100L, 100L, 100L, 100L, 100L, 100L,
> > 100L, 50L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L,
> > 100L, 100L, 100L, 100L, 50L, 100L, 100L, 100L, 100L, 100L,
> > 100L), c(100L, 25L, 25L, 0L, 100L, 60L, 0L, 0L, 25L, 60L,
> > 0L, 60L, 100L, 60L, 100L, 100L, 25L, 100L, 60L, 100L, 100L,
> > 60L, 100L, 60L, 100L, 100L, 100L, 100L, 60L, 60L), c(0L,
> > 0L, 50L, 50L, 100L, 100L, 0L, 0L, 100L, 100L, 0L, 100L, 100L,
> > 0L, 100L, 100L, 0L, 100L, 100L, 100L, 100L, 100L, 100L, 0L,
> > 100L, 100L, 100L, 100L, 100L, 100L), c(40L, 100L, 40L, 100L,
> > 100L, 40L, 100L, 100L, 100L, 40L, 100L, 100L, 100L, 100L,
> > 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L,
> > 100L, 100L, 100L, 0L, 100L, 100L), c(100L, 100L, 100L, 100L,
> > 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L,
> > 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, -10L,
> > 100L, 100L, 100L, -10L, 100L, 100L), c(70L, 0L, 25L, 0L,
> > 100L, 25L, 0L, 0L, 0L, 45L, 0L, 25L, 100L, 100L, 100L, 100L,
> > 0L, 70L, 0L, 100L, 45L, 45L, 0L, 0L, 100L, 100L, 100L, 0L,
> > 100L, 100L), c(55L, 55L, 55L, 55L, 55L, 55L, 55L, 55L, 55L,
> > 55L, 55L, 55L, 55L, 55L, 55L, 55L, 20L, 55L, 20L, 55L, 20L,
> > 20L, 100L, 55L, 55L, 55L, 55L, 0L, 55L, 55L), c(65L, 65L,
> > 100L, 65L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L,
> > 100L, 100L, 100L, 100L, 65L, 100L, 100L, 100L, 65L, 100L,
> > 0L, 65L, 100L, 100L, 100L, 100L, 100L, 100L), c(85L, 85L,
> > 85L, 85L, 85L, 85L, 85L, 85L, 85L, 85L, 85L, 85L, 56L, 85L,
> > 100L, 85L, 85L, 85L, 0L, 85L, 85L, 85L, 85L, 85L, 85L, 85L,
> > 85L, 28L, 56L, 56L)), row.names = c(NA, -30L), class = "data.frame")
> >
> > Fn = function(Wts) return(-Kendall::Kendall(1:dim(MyDat)[1],
> > rank(-as.vector(as.matrix(MyDat) %*% matrix(Wts, nc = 1)[, 1, drop =
> > T])))$tau[1])
> > q1 = pracma::fmincon(c(0.12, 0.04, 0.07, 0.03, 0.06, 0.07, 0.07, 0.04,
> > 0.09, 0.08, 0.02, 0.02, 0.03, 0.06, 0.02, 0, 0.07, 0.05, 0.02, 0.02,
> 0.02),
> > fn = Fn,
> > A = matrix(c(rep(0, 20), -1), nrow = 1), b = -2.05/100, Aeq =
> > matrix(c(rep(1, 20), 1), nrow = 1), beq = 1,
> > lb = rep(0.01, 21),
> > tol = 1e-16, maxfeval = 10000000, maxiter = 5000000)
> >
> > Fn(q1$par) < Fn(c(0.12, 0.04, 0.07, 0.03, 0.06, 0.07, 0.07, 0.04, 0.09,
> > 0.08, 0.02, 0.02, 0.03, 0.06, 0.02, 0, 0.07, 0.05, 0.02, 0.02, 0.02))
> > #FALSE
> >
> >
> > On Fri, 28 Mar 2025 at 00:58, Rui Barradas <ruipbarradas using sapo.pt> wrote:
> >
> >> Às 18:35 de 27/03/2025, Daniel Lobo escreveu:
> >>> Hi,
> >>>
> >>> I have below minimization problem
> >>>
> >>>
> >>> MyDat = structure(list(c(50L, 0L, 0L, 50L, 75L, 100L, 50L, 0L, 50L, 0L,
> >>> 25L, 50L, 50L, 75L, 75L, 75L, 0L, 75L, 75L, 75L, 0L, 25L, 75L,
> >>> 75L, 0L, 75L, 100L, 0L, 25L, 100L), c(75L, 0L, 0L, 50L, 100L,
> >>> 50L, 75L, 75L, 100L, 25L, 0L, 25L, 100L, 0L, 50L, 0L, 25L, 25L,
> >>> 100L, 75L, 0L, 0L, 0L, 50L, 0L, 75L, 75L, 0L, 50L, 25L), c(50L,
> >>> 0L, 0L, 0L, 100L, 25L, 0L, 0L, 25L, 50L, 0L, 25L, 75L, 50L, 100L,
> >>> 50L, 0L, 75L, 25L, 50L, 0L, 0L, 25L, 0L, 50L, 100L, 100L, 0L,
> >>> 75L, 50L), c(25L, 0L, 0L, 75L, 75L, 25L, 50L, 50L, 100L, 25L,
> >>> 0L, 100L, 50L, 25L, 100L, 25L, 25L, 100L, 50L, 100L, 0L, 0L,
> >>> 100L, 50L, 0L, 50L, 75L, 0L, 50L, 25L), c(50L, 0L, 0L, 75L, 75L,
> >>> 75L, 25L, 25L, 0L, 100L, 0L, 25L, 25L, 75L, 100L, 0L, 25L, 0L,
> >>> 75L, 25L, 25L, 25L, 75L, 25L, 0L, 75L, 100L, 0L, 100L, 100L),
> >>> c(50L, 0L, 0L, 50L, 100L, 25L, 25L, 25L, 50L, 50L, 0L, 50L,
> >>> 75L, 0L, 100L, 50L, 25L, 100L, 50L, 75L, 0L, 0L, 50L, 25L,
> >>> 0L, 100L, 100L, 0L, 75L, 50L), c(50L, 0L, 0L, 50L, 75L, 25L,
> >>> 75L, 50L, 100L, 25L, 0L, 75L, 25L, 0L, 50L, 0L, 50L, 75L,
> >>> 100L, 75L, 0L, 0L, 100L, 0L, 0L, 50L, 75L, 0L, 100L, 100L
> >>> ), c(25L, 75L, 50L, 25L, 75L, 50L, 100L, 75L, 100L, 25L,
> >>> 0L, 75L, 25L, 50L, 25L, 25L, 75L, 75L, 100L, 75L, 75L, 100L,
> >>> 75L, 25L, 0L, 75L, 75L, 0L, 75L, 100L), c(55L, 30L, 20L,
> >>> 30L, 45L, 30L, 30L, 30L, 70L, 30L, 10L, 45L, 45L, 45L, 45L,
> >>> 30L, 30L, 55L, 45L, 45L, 30L, 30L, 30L, NA, 30L, 55L, 45L,
> >>> 20L, 45L, 70L), c(85L, 40L, 40L, 40L, 55L, 40L, 20L, 30L,
> >>> 30L, 30L, 20L, 30L, 70L, 40L, 85L, 55L, 30L, 40L, 30L, 55L,
> >>> 20L, 30L, 55L, 0L, 40L, 55L, 70L, 40L, 85L, 70L), c(45L,
> >>> 45L, 0L, 45L, 45L, 45L, 0L, 0L, 100L, 45L, 0L, 100L, 45L,
> >>> 45L, 100L, 45L, 45L, 100L, 45L, 45L, 45L, 45L, 25L, 45L,
> >>> 0L, 100L, 45L, 0L, 45L, 45L), c(55L, 45L, 45L, 45L, 55L,
> >>> 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 55L, 55L, 45L,
> >>> 55L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 55L, 45L, 45L, 45L,
> >>> 45L), c(100L, 100L, 50L, 100L, 100L, 100L, 100L, 100L, 100L,
> >>> 100L, 50L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L,
> >>> 100L, 100L, 100L, 100L, 50L, 100L, 100L, 100L, 100L, 100L,
> >>> 100L), c(100L, 25L, 25L, 0L, 100L, 60L, 0L, 0L, 25L, 60L,
> >>> 0L, 60L, 100L, 60L, 100L, 100L, 25L, 100L, 60L, 100L, 100L,
> >>> 60L, 100L, 60L, 100L, 100L, 100L, 100L, 60L, 60L), c(0L,
> >>> 0L, 50L, 50L, 100L, 100L, 0L, 0L, 100L, 100L, 0L, 100L, 100L,
> >>> 0L, 100L, 100L, 0L, 100L, 100L, 100L, 100L, 100L, 100L, 0L,
> >>> 100L, 100L, 100L, 100L, 100L, 100L), c(40L, 100L, 40L, 100L,
> >>> 100L, 40L, 100L, 100L, 100L, 40L, 100L, 100L, 100L, 100L,
> >>> 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L,
> >>> 100L, 100L, 100L, 0L, 100L, 100L), c(100L, 100L, 100L, 100L,
> >>> 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L,
> >>> 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, -10L,
> >>> 100L, 100L, 100L, -10L, 100L, 100L), c(70L, 0L, 25L, 0L,
> >>> 100L, 25L, 0L, 0L, 0L, 45L, 0L, 25L, 100L, 100L, 100L, 100L,
> >>> 0L, 70L, 0L, 100L, 45L, 45L, 0L, 0L, 100L, 100L, 100L, 0L,
> >>> 100L, 100L), c(55L, 55L, 55L, 55L, 55L, 55L, 55L, 55L, 55L,
> >>> 55L, 55L, 55L, 55L, 55L, 55L, 55L, 20L, 55L, 20L, 55L, 20L,
> >>> 20L, 100L, 55L, 55L, 55L, 55L, 0L, 55L, 55L), c(65L, 65L,
> >>> 100L, 65L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L,
> >>> 100L, 100L, 100L, 100L, 65L, 100L, 100L, 100L, 65L, 100L,
> >>> 0L, 65L, 100L, 100L, 100L, 100L, 100L, 100L), c(85L, 85L,
> >>> 85L, 85L, 85L, 85L, 85L, 85L, 85L, 85L, 85L, 85L, 56L, 85L,
> >>> 100L, 85L, 85L, 85L, 0L, 85L, 85L, 85L, 85L, 85L, 85L, 85L,
> >>> 85L, 28L, 56L, 56L)), row.names = c(NA, -30L), class =
> "data.frame")
> >>>
> >>> Fn = function(Wts) return(-Kendall::Kendall(1:Nobs,
> >>> rank(-as.vector(as.matrix(MyDat) %*% matrix(Wts, nc = 1)[, 1, drop =
> >>> T])))$tau[1])
> >>> q1 = pracma::fmincon(c(0.12, 0.04, 0.07, 0.03, 0.06, 0.07, 0.07, 0.04,
> >>> 0.09, 0.08, 0.02, 0.02, 0.03, 0.06, 0.02, 0, 0.07, 0.05, 0.02, 0.02,
> >> 0.02),
> >>> fn = Fn,
> >>> A = matrix(c(rep(0, 20), -1), nrow = 1), b = -2.05/100,
> Aeq =
> >>> matrix(c(rep(1, 20), 1), nrow = 1), beq = 1,
> >>> lb = rep(0.01, 21),
> >>> tol = 1e-16, maxfeval = 10000000, maxiter = 5000000)
> >>>
> >>>
> >>> However with above code, I got sub-optimal value in terms of
> minimization
> >>> of the objective function:
> >>>
> >>> q1$value
> >>> #0.1632184
> >>> Fn(c(0.12, 0.04, 0.07, 0.03, 0.06, 0.07, 0.07, 0.04, 0.09, 0.08, 0.02,
> >>> 0.02, 0.03, 0.06, 0.02, 0, 0.07, 0.05, 0.02, 0.02, 0.02))
> >>> #0.1586207
> >>>
> >>> Could you please help me to understand what went wrong with my code and
> >> how
> >>> to correct that?
> >>>
> >>> [[alternative HTML version deleted]]
> >>>
> >>> ______________________________________________
> >>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> >>> https://stat.ethz.ch/mailman/listinfo/r-help
> >>> PLEASE do read the posting guide
> >> https://www.R-project.org/posting-guide.html
> >>> and provide commented, minimal, self-contained, reproducible code.
> >> Hello,
> >>
> >> I cannot reproduce your result.
> >> Instead of checking the result with
> >>
> >>
> >> Fn(c(0.12, 0.04, 0.07, etc, ...)
> >>
> >>
> >> pass the actual return value, q1$par. That's what I did and the result
> >> matches the function minimum.
> >> Here is the code I ran.
> >>
> >>
> >>
> >>
> >> MyDat <- structure(list(
> >> c(50L, 0L, 0L, 50L, 75L, 100L, 50L, 0L, 50L, 0L,
> >> 25L, 50L, 50L, 75L, 75L, 75L, 0L, 75L, 75L, 75L, 0L, 25L, 75L,
> >> 75L, 0L, 75L, 100L, 0L, 25L, 100L),
> >> c(75L, 0L, 0L, 50L, 100L,
> >> 50L, 75L, 75L, 100L, 25L, 0L, 25L, 100L, 0L, 50L, 0L, 25L, 25L,
> >> 100L, 75L, 0L, 0L, 0L, 50L, 0L, 75L, 75L, 0L, 50L, 25L),
> >> c(50L, 0L, 0L, 0L, 100L, 25L, 0L, 0L, 25L, 50L, 0L, 25L, 75L, 50L,
> 100L,
> >> 50L, 0L, 75L, 25L, 50L, 0L, 0L, 25L, 0L, 50L, 100L, 100L, 0L,
> >> 75L, 50L),
> >> c(25L, 0L, 0L, 75L, 75L, 25L, 50L, 50L, 100L, 25L,
> >> 0L, 100L, 50L, 25L, 100L, 25L, 25L, 100L, 50L, 100L, 0L, 0L,
> >> 100L, 50L, 0L, 50L, 75L, 0L, 50L, 25L),
> >> c(50L, 0L, 0L, 75L, 75L,
> >> 75L, 25L, 25L, 0L, 100L, 0L, 25L, 25L, 75L, 100L, 0L, 25L, 0L,
> >> 75L, 25L, 25L, 25L, 75L, 25L, 0L, 75L, 100L, 0L, 100L, 100L),
> >> c(50L, 0L, 0L, 50L, 100L, 25L, 25L, 25L, 50L, 50L, 0L, 50L,
> >> 75L, 0L, 100L, 50L, 25L, 100L, 50L, 75L, 0L, 0L, 50L, 25L,
> >> 0L, 100L, 100L, 0L, 75L, 50L),
> >> c(50L, 0L, 0L, 50L, 75L, 25L,
> >> 75L, 50L, 100L, 25L, 0L, 75L, 25L, 0L, 50L, 0L, 50L, 75L,
> >> 100L, 75L, 0L, 0L, 100L, 0L, 0L, 50L, 75L, 0L, 100L, 100L),
> >> c(25L, 75L, 50L, 25L, 75L, 50L, 100L, 75L, 100L, 25L,
> >> 0L, 75L, 25L, 50L, 25L, 25L, 75L, 75L, 100L, 75L, 75L, 100L,
> >> 75L, 25L, 0L, 75L, 75L, 0L, 75L, 100L),
> >> c(55L, 30L, 20L,
> >> 30L, 45L, 30L, 30L, 30L, 70L, 30L, 10L, 45L, 45L, 45L, 45L,
> >> 30L, 30L, 55L, 45L, 45L, 30L, 30L, 30L, NA, 30L, 55L, 45L,
> >> 20L, 45L, 70L),
> >> c(85L, 40L, 40L, 40L, 55L, 40L, 20L, 30L,
> >> 30L, 30L, 20L, 30L, 70L, 40L, 85L, 55L, 30L, 40L, 30L, 55L,
> >> 20L, 30L, 55L, 0L, 40L, 55L, 70L, 40L, 85L, 70L),
> >> c(45L, 45L, 0L, 45L, 45L, 45L, 0L, 0L, 100L, 45L, 0L, 100L, 45L,
> >> 45L, 100L, 45L, 45L, 100L, 45L, 45L, 45L, 45L, 25L, 45L,
> >> 0L, 100L, 45L, 0L, 45L, 45L),
> >> c(55L, 45L, 45L, 45L, 55L,
> >> 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 55L, 55L, 45L,
> >> 55L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 55L, 45L, 45L, 45L, 45L),
> >> c(100L, 100L, 50L, 100L, 100L, 100L, 100L, 100L, 100L,
> >> 100L, 50L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L,
> >> 100L, 100L, 100L, 100L, 50L, 100L, 100L, 100L, 100L, 100L, 100L),
> >> c(100L, 25L, 25L, 0L, 100L, 60L, 0L, 0L, 25L, 60L,
> >> 0L, 60L, 100L, 60L, 100L, 100L, 25L, 100L, 60L, 100L, 100L,
> >> 60L, 100L, 60L, 100L, 100L, 100L, 100L, 60L, 60L),
> >> c(0L, 0L, 50L, 50L, 100L, 100L, 0L, 0L, 100L, 100L, 0L, 100L, 100L,
> >> 0L, 100L, 100L, 0L, 100L, 100L, 100L, 100L, 100L, 100L, 0L,
> >> 100L, 100L, 100L, 100L, 100L, 100L),
> >> c(40L, 100L, 40L, 100L,
> >> 100L, 40L, 100L, 100L, 100L, 40L, 100L, 100L, 100L, 100L,
> >> 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L,
> >> 100L, 100L, 100L, 0L, 100L, 100L),
> >> c(100L, 100L, 100L, 100L,
> >> 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L,
> >> 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, -10L,
> >> 100L, 100L, 100L, -10L, 100L, 100L),
> >> c(70L, 0L, 25L, 0L,
> >> 100L, 25L, 0L, 0L, 0L, 45L, 0L, 25L, 100L, 100L, 100L, 100L,
> >> 0L, 70L, 0L, 100L, 45L, 45L, 0L, 0L, 100L, 100L, 100L, 0L,
> >> 100L, 100L),
> >> c(55L, 55L, 55L, 55L, 55L, 55L, 55L, 55L, 55L,
> >> 55L, 55L, 55L, 55L, 55L, 55L, 55L, 20L, 55L, 20L, 55L, 20L,
> >> 20L, 100L, 55L, 55L, 55L, 55L, 0L, 55L, 55L),
> >> c(65L, 65L,
> >> 100L, 65L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L,
> >> 100L, 100L, 100L, 100L, 65L, 100L, 100L, 100L, 65L, 100L,
> >> 0L, 65L, 100L, 100L, 100L, 100L, 100L, 100L),
> >> c(85L, 85L,
> >> 85L, 85L, 85L, 85L, 85L, 85L, 85L, 85L, 85L, 85L, 56L, 85L,
> >> 100L, 85L, 85L, 85L, 0L, 85L, 85L, 85L, 85L, 85L, 85L, 85L,
> >> 85L, 28L, 56L, 56L)),
> >> row.names = c(NA, -30L), class = "data.frame")
> >>
> >>
> >>
> >> Fn <- function(Wts) return(
> >> Kendall::Kendall(
> >> 1:Nobs,
> >> rank(-as.vector(as.matrix(MyDat) %*% matrix(Wts, nc = 1)[, 1, drop
> >> = T]))
> >> )$tau[1]
> >> )
> >>
> >> Nobs <- nrow(MyDat)
> >>
> >> q1 <- pracma::fmincon(
> >> c(0.12, 0.04, 0.07, 0.03, 0.06, 0.07, 0.07, 0.04, 0.09, 0.08,
> >> 0.02, 0.02, 0.03, 0.06, 0.02, 0, 0.07, 0.05, 0.02, 0.02, 0.02),
> >> fn = Fn,
> >> A = matrix(c(rep(0, 20), -1), nrow = 1), b = -2.05/100,
> >> Aeq = matrix(c(rep(1, 20), 1), nrow = 1), beq = 1,
> >> lb = rep(0.01, 21),
> >> tol = 1e-16,
> >> maxfeval = 10000000,
> >> maxiter = 5000000
> >> )
> >>
> >> q1$value
> >> #> [1] -0.1632184
> >> Fn(q1$par)
> >> #> [1] -0.1632184
> >>
> >>
> >>
> >> Hope this helps,
> >>
> >> Rui Barradas
> >>
> >>
> >> --
> >> Este e-mail foi analisado pelo software antivírus AVG para verificar a
> >> presença de vírus.
> >> www.avg.com
> >>
> >
> Hello
>
> The code in answer has Kendall::Kendall when it should be
> -Kendall::Kendall.
>
> Apparently I removed the minus sign when I reformated the function code.
> But without the minus sign I get
>
>
> q1$value
> #> [1] -0.1632184
> Fn(q1$par)
> #> [1] -0.1632184
> Fn(q1$par) < Fn(StartingValue)
> #> [1] TRUE
>
>
> Is there a sign error somewhere?
>
> Hope this helps,
>
> Rui Barradas
>
>
> --
> Este e-mail foi analisado pelo software antivírus AVG para verificar a
> presença de vírus.
> www.avg.com
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list