Daniel Lobo
2025-Mar-27 19:36 UTC
[R] Problem with minimization that I failed to understand
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 at 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 at 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 >[[alternative HTML version deleted]]
Rui Barradas
2025-Mar-27 22:23 UTC
[R] Problem with minimization that I failed to understand
?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 at 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 at 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
Apparently Analagous Threads
- Problem with minimization that I failed to understand
- Problem with minimization that I failed to understand
- Problem with minimization that I failed to understand
- Problem with minimization that I failed to understand
- Problem with minimization that I failed to understand