From 3da2232c7c1e1ee575dfe689222e328135e946e9 Mon Sep 17 00:00:00 2001 From: Mauricio Zambrano-Bigiarini <hzambran@users.noreply.github.com> Date: Tue, 6 Nov 2012 16:42:57 +0000 Subject: [PATCH] hydroPSO.R: revised regrouping (still ongoing) --- R/PSO_v2012.R | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/R/PSO_v2012.R b/R/PSO_v2012.R index 7521a52..7514704 100755 --- a/R/PSO_v2012.R +++ b/R/PSO_v2012.R @@ -1063,6 +1063,7 @@ UpdateNgbest <- function(pbest.fit, ngbest, MinMax) { # Author : Mauricio Zambrano-Bigiarini # Started: 12-Jan-2011 # Updates: 12-Jan-2011 ; 28-Oct-2011 +# 06-Nov-2012 ################################################################################ # Purpose: Function for computing the sarm radius, for detecting premature # convergence, in order to avoid stagnation @@ -1088,10 +1089,10 @@ ComputeSwarmRadiusAndDiameter <- function(x, gbest, Lmax, MinMax, pbest.fit) { gbest <- matrix(rep(gbest, npart), nrow=npart, byrow=TRUE) radius <- sqrt( rowSums( (x-gbest)^2 ) ) - swarm.radius <- max(radius, na.rm=TRUE) + #swarm.radius <- max(radius, na.rm=TRUE) + swarm.radius <- median(radius, na.rm=TRUE) swarm.diameter <- sqrt(sum(Lmax^2)) - - # creating the output + out <- list(2) out[[1]] <- swarm.radius out[[2]] <- swarm.diameter @@ -1174,7 +1175,9 @@ RegroupingSwarm <- function(x, xmax <- gbest + 0.5*Lnew xMinMax <- cbind(xmin, xmax) - v <- InitializateV(npart=npart, x.MinMax=xMinMax, v.ini.type=vini.type, Xini=x) + v <- InitializateV(npart=npart, x.MinMax=x.Range, v.ini.type=vini.type, Xini=x) + + #v <- InitializateV(npart=npart, x.MinMax=xMinMax, v.ini.type=vini.type, Xini=x) # Relative change achieved in each dimension rel.change <- (Lnew-Lmax)/Lmax @@ -2033,7 +2036,6 @@ hydroPSO <- function( writeLines("", PSOparam.TextFile) } # IF end writeLines(c("Topology :", topology), PSOparam.TextFile, sep=" ") - writeLines("", PSOparam.TextFile) if ( (topology == "lbest") | (topology == "random") ) { writeLines(c("K :", K), PSOparam.TextFile, sep=" ") writeLines("", PSOparam.TextFile) @@ -2049,7 +2051,8 @@ hydroPSO <- function( writeLines("", PSOparam.TextFile) writeLines(c("Xini.type :", Xini.type), PSOparam.TextFile, sep=" ") writeLines("", PSOparam.TextFile) - writeLines(c("Vini.type :", Vini.type), PSOparam.TextFile, sep=" ") + writeLines(c("Vini.type :", Vini.type), PSOparam.TextFile, sep=" ") + writeLines("", PSOparam.TextFile) if (use.TVc1) { writeLines(c("use.TVc1 :", use.TVc1), PSOparam.TextFile, sep=" ") writeLines("", PSOparam.TextFile) @@ -2404,7 +2407,7 @@ hydroPSO <- function( } # IF end - # 'X.bak' is only needed to correctly compute the Normalised Swarm Radious + # 'X.bak' is only needed to correctly compute the Normalised Swarm Radius # for the current iteration X.bak <- X @@ -2597,14 +2600,15 @@ hydroPSO <- function( swarm.radius <- out[["swarm.radius"]] swarm.diameter <- out[["swarm.diameter"]] NormSwarmRadius <- swarm.radius/swarm.diameter + #v.radius <- out[["v.radius"]] if ( (verbose) & ( iter/REPORT == floor(iter/REPORT) ) ) message( "iter:", format(iter, width=6, justify="right"), - " Gbest:", formatC( gbest.fit, format="E", digits=digits, flag=" "), - " Gbest_rate:", format( round(gbest.fit.rate*100, 2), width=6, nsmall=2, justify="left"), "%", - " Iter_best_fit:", formatC(pbest.fit.iter, format="E", digits=digits, flag=" "), - " nSwarm_Radius:", formatC(NormSwarmRadius, format="E", digits=2, flag=" "), - " |g-mean(p)|/mean(p):", format( round(GPbest.fit.rate*100, 2), width=6, nsmall=2, justify="left"), "%" ) + " Gbest:", formatC( gbest.fit, format="E", digits=digits, flag=" "), + " Gbest_rate:", format( round(gbest.fit.rate*100, 2), width=6, nsmall=2, justify="left"), "%", + " Iter_best_fit:", formatC(pbest.fit.iter, format="E", digits=digits, flag=" "), + " nSwarm_Radius:", formatC(NormSwarmRadius, format="E", digits=2, flag=" "), + " |g-mean(p)|/mean(p):", format( round(GPbest.fit.rate*100, 2), width=6, nsmall=2, justify="left"), "%" ) ########################################################################## # Random Generation around gbest, if requested # -- GitLab