Escolar Documentos
Profissional Documentos
Cultura Documentos
5 Roberto C. Ferreira
6 E-mail: roberto.ferreira@usp.br
7 RESUMO. Neste artigo avaliamos o algoritmo proposto por Lu et al. (2019) em sua pub-
8 licação (o qual chamaremos de artigo base) através de sua aplicação em dois casos com
9 dados reais dos artigos de Fernandes et al. (2019) e Bothma et al. (2022). Inicialmente de-
15 Realizamos a calibração do modelo por nós desenvolvido através dos próprios exemplos
17 sua aplicação em dois casos com dados reais de dados que, supostamente, seguem uma
23 in two real-data cases from the articles of Fernandes et al. (2019) and Bothma et al.
24 (2022). Initially, we develop the algorithm as proposed in the base article, which is based
25 on the Particle Swarm Optimization (PSO) method. The base article demonstrates the
28 characteristics of both the MWD and PSO. We calibrate the model we have developed
29 using the examples provided in the base article. With the algorithm properly calibrated
30 and validated, we test its application in two real-data cases that are supposed to follow
1
1 Keywords: Particle Swarm Optmization, mixed Weibull distribution, parameter esti-
2 mation, nonlinear least squares estimation
3 1 Introdução
2
1 Estes trabalhos apontam diversos artigos relacionados aos temas de otimização
2 através da técnica de PSO, bem como à distribuição de Weibull. Os principais
3 que me ajudaram na análise ou que poderão ser parte de futuros estudos estão
4 citados no item de bibliograa deste artigo.
5 2 Métodos
3
Figure 1: Diagrama de uxo do processo de estimativa de parâmetros usando o
PSO-LSE
4
1 entre as distribuições de Weibull que constituem o conjunto de dados base) e
2 estimar os parâmetros das (n) retas resultantes. Com algumas transformações,
3 estimam-se os parâmetros das distribuições-base;
4 2. Inicialização da posição das partículas e velocidades. A base inicial do algo-
5 ritmo PSO são formadas pelas matrizes de partículas Theta (que é uma população
6 de dados para os parâmetros desconhecidos das distribuições-base), criada com
7 os dados iniciais (ponto inicial dos algoritmos de otimização), e de velocidades
8 V-Theta (que constituem a taxa de alteração dos dados dos parâmetros, ou seja,
9 da matriz de partículas, nas iterações). Estas matrizes são geradas a partir dos
10 intervalos rugosos previamente estabelecidos;
11 3. Inicialização das melhores posições locais e global. A matriz de partículas, asso-
12 ciada aos t-values, permite calcular os valores da função de densidade acumulada
13 da distribuição de Weibull mista; comparando-os com a função empírica baseada
14 nos dados da amostra, pode-se calcular o erro relativo, resultando na função de
15 ajuste. Estas posições iniciais passam a ser as melhores posições locais (P-Best).
16 A melhor posição local (ou seja, o melhor resultado inicial) é, automaticamente,
17 a melhor posição global (G-Best).
18 4. Atualização da matriz de partículas Theta e da matriz de velocidades V-
19 Theta. Os melhores valores já encontrados formam uma base, junto com outros
20 componentes aleatórios, para a atualização das matrizes. Estas matrizes, por sua
21 vez, atualizam as melhores posições locais. Finalmente, a melhor posição local
22 passa a ser a melhor posição global caso ela seja melhor que a melhor posição
23 global anterior;
24 5. O passo 4 é repetido iterativamente por k vezes, ou até que o ajuste entre as
25 iterações seja menor que uma tolerância pré-estabelecida. A melhor posição nal
26 (G-Best) é a melhor estimativa alcançada para os parâmetros da distribuição de
27 Weibull mista.
5
1 da subseção anterior) geramos 200 amostras aleatórias de tempos para as três
2 distribuições-base, utilizando os parâmetros indicados no artigo base para cada
3 distribuição-base, a saber:
4 a. Subpopulação 1 (40 amostras) α1 = 800 β1 = 0.5
5 b. Subpopulação 2 (120 amostras) α2 = 1200 β2 = 3
6 c. Subpopulação 3 (40 amostras) α3 = 2000 β3 = 1
7 Para a estimação dos parâmetros de cada subpopulação existente no conjunto
8 de dados, inicialmente transformamos os dados buscando identicar gracamente
9 três segmentos de reta distintos, como segue:
10 a. A distribuição simples de Weibull é expressa como:
t β
11 F (t) = 1 − e−( α ) (1)
16 xj = ln(tj ) (3)
17
18 yj = ln [− ln (1 − F (tj ))] (4)
19 onde j = 1, 2, . . . , 200.
20 d. Pela equação (2), a inclinação da i-ésima reta é o valor aproximado do
21 parâmetro de forma βi .
22 e. De acordo com os dois pontos de inexão denidos, a quantidade de pontos
23 que formam cada uma das três retas denem a estimativa do parâmetro de peso
24 de cada fator:
mi
25 pi = (5)
200
26 onde mi é a quantidade de cada população estimada
27 f. Finalmente, como para cada distribuição temos que a função distribuição é
28 estimada por:
j(α)
29 F (α) = (6)
m
30 Onde j(α) é o número ordinal da amostra de tempos cujo valor se aproxima de
31 α. Como a equação da função de distribuição Weibull (1), para t = α, é:
32 F (α) = 1 − e−1 (7)
6
1 Consequentemente,
2 j(α) = m · (1 − e−1 ) (8)
3 Então, para cada subpopulação, temos:
Valor ou
Limite p1 p2 p3 α1 α2 α3 β1 β2 β3
Valor 0.16 0.74 0.11 128 1079 3547 0.36 1.71 0.84
Lim. Sup. 0.36 0.94 0.305 603 2313 3901 0.54 2.56 1.26
Lim. Inf. 0.00 0.54 0.00 115 1079 2313 0.18 0.85 0.42
7
Figure 3: Processo evolutivo do algoritmo baseado no PSO
Algoritmo p1 p2 p3 α1 α2 α3 β1 β2 β3
Nosso 0.18 0.67 0.15 252 1083 2758 0.58 2.73 1.34
Artigo-base 0.23 0.59 0.18 695 1051 1765 0.41 2.82 1.72
8
Figure 4: CDFs do modelo do artigo e de nosso modelo
1 A partir desta identicação, estabelecemos os cortes nos pontos 0,8 e 1,4 para que
2 o algoritmo gerasse as três distribuições constituintes da distribuição mista resul-
3 tante. Finalmente, utilizamos o algoritmo desenvolvido para estimar os parâmet-
4 ros desta distribuição. A gura 6 apresenta o processo evolutivo do PSO e a
5 tabela 3 apresenta os parâmetros estimados para a distribuição de Weibull mista.
9
Figure 6: Processo evolutivo do PSO
p1 p2 p3 α1 α2 α3 β1 β2 β3
Estimativas 0,327 0,673 0,000 2,010 3,253 4,725 3,112 4,187 8,882
p1 p2 p3 α1 α2 α3 β1 β2 β3
Estimativas 0,01 0,01 0,98 110 467 997 0,462 0,929 1,231
10
Figure 7: Dados da tabela 3 transformados
1 3 Resultados
12
1 o método sempre converge para uma solução otimizada, mesmo que a um ritmo
2 mais lento. A maior diculdade reside em identicar a existência de distribuições
3 simples que sejam as constituintes da distribuição resultante. Outras técnicas
4 para esta identicação poderiam ser melhor exploradas.
5 Futuramente poderiam ser utilizadas outras técnicas e análises para se concluir
6 sobre a adequação da distribuição estimada pelo algoritmo aos dados reais, e
7 compará-lo a outras técnicas de estimação de parâmetros de distribuições de
8 Weibull mistas.
13
1 References
2 Bothma, E., Allison, J., and Visagie, I. (2022). New classes of tests for the weibull
3 distribution using stein's method in the presence of random right censoring.
4 "Computational Statistics", 37(4):17511770. https://doi.org/10.1007/s00180-
5 021-01178-0.
6 Fernandes, F. H., Lee Ho, L., and Bourguignon, M. (2019). About shewhart
7 control charts to monitor the weibull mean. Quality and Reliability Engineering
8 International, 35(7):23432357.
9 Jiang, H., Wang, J., Wu, J., and Geng, W. (2017). Comparison of numerical
10 methods and metaheuristic optimization algorithms for estimating parameters
11 for wind energy potential assessment in low wind regions. Renew. Sustain.,
12 pages 11991217.
13 Lu, Z., Dong, L., and Zhou, J. (2019). Nonlinear least squares estimation for
14 parameters of mixed weibull distributions by using particle swarm optimization.
15 IEEE Access, PP:11.
16 Lu, Z., Sun, Y., and Zhou, J. (2010). Particle swarm optimization based nonlinear
17 least-squares parameter estimation of maintenance time distribution. Proc. Int.
18 Colloq, pages 590593.
19 Ma, D., Deng, J., and Zhang, Z. (2013). Comparison and improvements of opti-
20 mization methods for gas emission source identication. Atmos., pages 188198.
21 Ma, D., Tan, W.and Zhang, Z., and Hu, J. (2018). Gas emission source term
22 estimation with 1-step nonlinear partial swarm optimization-tikhonov regular-
23 ization hybrid method. Chin. J. Chem. Eng., pages 356363.
24 Ma, D. e. a. (2013). Application and improvement of swarm intelligence opti-
25 mization algorithm in gas emission source identication in atmosphere. J. Loss
26 Prevention Process Ind., pages 188198.
27 Okafor, E., Ezugwu, E., Jemitola, P., Sun, Y., and Lu, Z. (2019). Weibull param-
28 eter estimation using particle swarm optimization algorithm.
29 Okafor, E. G., Ezugwu, O. E., Jemitola, P. O., and Sun, Y. andLu, Z. (2018).
30 Weibull parameter estimation using particle swarm optimization algorithm. In-
31 ternational Journal of Engineering -Technology, pages 710.
32 Örkcü, H. H., Özsoy, V. S., Aksoy, E., and Dogan, M. I. (2015). Estimating the
33 parameters of 3-p weibull distribution using particle swarm optimization: A
34 comprehensive experimental comparison. Appl. Math, pages 201226.
14
1 A Anexo I - Dados utilizados na aplicação do algoritmo
2 desenvolvido
Sample X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 3,7 2,74 2,73 2,5 3,6 1,41 3,68 2,97 1,36 0,98
2 3,11 3,27 2,87 1,47 3,11 2,76 4,91 3,68 1,84 1,59
3 4,42 2,41 3,19 3,22 1,69 3,19 1,57 0,81 5,56 1,73
4 3,28 3,09 1,87 3,15 4,9 1,59 2 1,22 1,12 1,71
5 3,75 2,43 2,95 2,97 3,39 2,17 1,17 5,08 2,48 1,18
6 2,96 2,53 2,67 2,93 3,22 3,51 2,17 1,69 1,25 4,38
7 3,39 2,81 4,2 3,33 2,55 1,84 0,39 3,68 2,48 0,85
8 3,31 3,31 2,85 2,56 3,56 1,61 2,79 4,7 2,03 1,8
9 3,15 2,35 2,55 2,59 2,38 1,57 1,08 2,03 1,61 2,12
10 2,81 2,77 2,17 2,83 1,92 1,89 2,88 2,82 2,05 3,65
Table 6: Conjunto de dados relacionado a tempo de vida (em dias) após leucemia
detectada.
Listing 1: Algoritmo em R
4 # Para facilitar , segue nomenclatura do artigo base
5 # ### II Problem Statement ####
6 # A . MWD - F(t , param ) (3) ####
7
8 F <- function (t , param ) {
9 n <- length ( param ) /3 # N ú mero de subpopula ç õ es ( nú mero de colunas da matriz theta / 3)
10 result <- 1
11
12 for ( i in 1: n) {
13 pi <- param [i] # Peso da subpopula ção i
14 beta <- param [i+n ] # Par â metro de forma da subpopula ção i
15
1 alpha <- param [ i +2 *n ] # Par â metro de escala da subpopula ção i
2
3 result <- result - ( pi * exp ( -(( t / alpha ) ^ beta )))
4
5 }
6 return ( result )
7 }
8
9 # B . Empirical Distribution Functions ####
10 # ####### Fun ção Festim (7) e (8)
11
12 Festim <- function (t , j , m , t1 , tm ) {
13 if (t < t1 ) {
14 result <- 0
15 } else {
16 if (m >= 20) {
17 result <- j / m
18 } else {
19 result <- (j - 0.3) / (m + 0.4)
20 }
21 }
22
23 # Condi ç ão para t >= tm
24 if (t >= tm ) {
25 result <- 1 -0.00000000000001 # se deixar 1 dá problema no cá lculo do ú ltimo yj ( ln (0))
26 }
27
28 return ( result )
29 }
30 # C . NonLinear LSE - Model ( Fun ção objetivo ) ####
31 # Fun ção objetivo para otimiza ção (9)
32
33 f_ fit <- function ( param , t_ values , Festim ) {
34 m <- length ( t_ values )
35 n = length ( param )/ 3 # nú mero de subpopula ç õ es
36 lse = 0
37 t1 = t_ values [1]
38 tm = t_ values [m]
39 Festim _ inf =0
40 for ( j in 1: m) {
41
42 tj <- t_ values [j ]
43 F_ tj <- F(tj , param )
44 lse <- lse + (( Festim _ inf + Festim [j ]) /2 - F_ tj )^2 # alterei na V2
45 Festim _ inf = Festim [j]
46 }
47 return ( lse )
# retorno a soma dos res í duo entre os m tempos de amostra
48 }
49 # ### III . PSO Solution .... ####
50 # A . Estimando os par â metros da MWD ####
51 ## Fun çã o para transformar os dados das amostras em coordenadas ( xj , yj )
52
53 transform _ data <- function (t_ values ,m , Festim ) {
54
55 data _ transformed <- data . frame ( xj = numeric (m), yj = numeric ( m ))
56 for ( j in 1: m) {
57 tj <- t_ values [j ]
58 data _ transformed $ xj [j] <- log ( tj )
16
1 data _ transformed $ yj [j] <- log (- log (1 - Festim [j ])) # (12)
2 }
3
4 return ( data _ transformed )
5 }
6
7 ## Fun çã o para plotar o gr á fico com os dados transformados
8 plot _ data <- function ( data ) {
9 plot ( data $xj , data $yj , pch =16 , col =" blue " , xlab = " ln ( tj )" , ylab = " ln { - ln [1 - Festim ( tj )]} " )
10
11 # Adicionar eixos verticais para cada unidade no eixo x
12 xmin <- floor ( min ( data $ xj ))
13 xmax <- ceiling ( max ( data $ xj ))
14 for ( x_ unit in seq ( xmin , xmax )) {
15 for ( i in 0:4) {
16 abline (v = x _ unit +0.2 *i , col = " gray " , lty = " dotted ")
17 }
18 }
19
20 # Definir intervalos para o eixo x
21 axis (1 , at = xmin : xmax , labels = xmin : xmax )
22 }
23
24 ## Fun çã o para cá lculo dos par â metros rugosos da MWD ####
25 calculate _ bounds <- function (p_ estimado , alpha _ estimado , beta _ estimado ) {
26 n <- length ( p_ estimado )
27
28 # Inicializar vetores para armazenar as bounds aproximadas
29 p_ lower <- numeric (n)
30 p_ upper <- numeric (n)
31 alpha _ lower <- numeric (n)
32 alpha _ upper <- numeric (n)
33 beta _ lower <- numeric ( n)
34 beta _ upper <- numeric ( n)
35
36 # Calcular bounds aproximadas para p
37 for ( i in 1: n) {
38 p_ lower [i ] <- max ( p_ estimado [ i] - 0.2 , 0) # (17)
39 p_ upper [i ] <- min ( p_ estimado [ i] + 0.2 , 1)
40 }
41
42 # Calcular bounds aproximadas para alpha
43 for ( i in 1: n) {
44 if (i > 1) {
45 alpha _ lower [i] <- ( alpha _ estimado [i -1] + alpha _ estimado [ i ]) / 2
46 } else {
47 alpha _ lower [i] <- 0.9 * alpha _ estimado [i ] # (18)
48 }
49
50 if (i < n) {
51 alpha _ upper [i] <- ( alpha _ estimado [i +1] + alpha _ estimado [ i ]) / 2
52 } else {
53 alpha _ upper [i] <- 1.1 * alpha _ estimado [i ] # (19)
54 }
55 }
56
57 # Calcular bounds aproximadas para beta
58 for ( i in 1: n) {
17
1 beta _ lower [i] <- max (0.5 * beta _ estimado [i] , 0)
2 beta _ upper [i] <- 1.5 * beta _ estimado [ i] # (20)
3 }
4
5 # Criar uma lista com os vetores de bounds
6 bounds <- list (p_ lower = p _ lower , p_ upper = p _ upper ,
7 alpha _ lower = alpha _ lower , alpha _ upper = alpha _ upper ,
8 beta _ lower = beta _ lower , beta _ upper = beta _ upper )
9
10 return ( bounds )
11 }
12 # Fun ção para calcular w (k) conforme a equa ção (29) ####
13
14 calculate _w <- function (k , a) {
15 return (0.4 + 0.5 * (1 - 10^ - a )^ k)
16 }
17
18 # ## PSO _ MWD Algoritmo e Par â metros de entrada e Algoritmo PSO _ MWD ####
19
20 PSO _ MWD = function ( cortes ,q ,a ,c1 ,c2 ,K , Eps _ 1, Eps _ 2, t _ values , data _ transformed , Festim ) {
21 start _ time = Sys . time ()
22 # ## III . A. Cá lculos par â metros alpha , beta e p - generalizando para qualquer n (14) a (16)
23 n = length ( cortes )+1
24 m = length (t _ values )
25
26 # Inicializar vetores para armazenar os resultados
27 beta <- numeric (n ) # Coeficientes beta
28 alpha <- numeric (n) # Valores de alpha
29 p <- numeric (n) # Valores de p
30
31 # Dividir os dados em n segmentos usando os cortes
32 segmentos <- list ()
33 mpop <- numeric (n ) # tamanho de cada segmento
34 for (i in 1: n) {
35 if (i == 1) {
36 segmentos [[ i ]] <- data _ transformed [ data _ transformed $ xj <= cortes [i], ]
37 } else if (i == n) {
38 segmentos [[ i ]] <- data _ transformed [ data _ transformed $ xj > cortes [i -1] , ]
39 } else {
40 segmentos [[ i ]] <- data _ transformed [ data _ transformed $xj > cortes [i -1]
41 & data _ transformed $xj <= cortes [i ], ]
42 }
43 mpop [i] <- nrow ( segmentos [[ i ]])
44 }
45
46 # Ajustar uma reta para cada segmento usando a fun ção lm
47 for ( i in 1: n) {
48 modelo <- lm ( yj ~ xj , data = segmentos [[ i ]])
49 beta [i] <- coef ( modelo )[[2]]
50 }
51
52 # Calcular os valores de p e alpha ( ji é simo valor da amostra da subpop .) para cada subpop .
53 macum =0
54 for ( i in 1: n) {
55 p[i ] <- mpop [ i] / m
56 alpha [ i] = t_ values [ macum + mpop [ i]* (1 - exp ( -1))]
57 macum = macum + mpop [i ]
58 }
18
1
2 # Imprimir os resultados
3 for (i in 1: n) {
4 print ( paste (" Subpopula ção" ,i ,": beta =" , beta [i ]," ,p =" ,p[ i], " , alpha =" , mean ( alpha [i ])))
5 }
6 # ########## III . A . Cá lculo dos intervalos rugosos de cada par â metro
7
8 bounds = calculate _ bounds (p , alpha , beta )
9
10 ## B. STEP BY STEP PROCEDURE ####
11 theta <- array ( dim = c(q , 3* n )) # (21)
12 V_ theta <- array ( dim = c(q , 3*n )) # (22)
13 pbest <- array ( dim = c(q , 3* n ))
14
15 # STEP 1: Inicializar as posi çõ es das part í culas ( theta ) e as velocidades (V - theta ) ####
16 # e
17 # STEP 2 - Initialize Local and Global Best Known Positions ####
18
19 pi _ lower <- bounds $p_ lower
20 pi _ upper <- bounds $p_ upper
21 alpha _ lower <- bounds $ alpha _ lower
22 alpha _ upper <- bounds $ alpha _ upper
23 beta _ lower <- bounds $ beta _ lower
24 beta _ upper <- bounds $ beta _ upper
25
26 f_ fit _ min <- 100 # apenas para iniciar a vari á vel que retornar á o fit mí nimo
27 for ( l in 1: q) {
28 rand _p <- runif (1) # ## crio um nú mero randomico para cada part í cula ,
29 rand _ beta <- runif (1) # ## mas igual para cada subpopula ção
30 rand _ alpha <- runif (1)
31 rand _ vp <- runif (1)
32 rand _ vbeta <- runif (1)
33 rand _ valpha <- runif (1)
34
35 # ### Part í culas
36 for ( i in 1: n) {
37 # Posi çã o de pi (l , 0) (23)
38 theta [l , i ] <-( pi _ lower [i ]+( pi _ upper [i ]- pi _ lower [ i ]) * rand _p) /
39 + sum (( pi _ lower +( pi _ upper - pi _ lower ) * rand _p ))
40 pbest [l , i ] = theta [l , i] # (27)
41 # Posi çã o de beta _i(l , 0) (24)
42 theta [l , i + n] <- beta _ lower [i] + ( beta _ upper [i ] - beta _ lower [i ]) * rand _ beta
43 pbest [l , i + n] = theta [l , i + n] # (27)
44 # Posi çã o de alpha _i(l , 0) (25)
45 theta [l , i + 2*n] <- alpha _ lower [ i] + ( alpha _ upper [i] - alpha _ lower [ i ]) * rand _ alpha
46 pbest [l , i + 2*n] = theta [l , i + 2*n ] # (27)
47 # #### Velocidades (26)
48 # Velocidade de vpi (l , 0)
49 V_ theta [l , i] <- ( pi _ lower [i ] - pi _ upper [i ]) + 2 * ( pi _ upper [i] - pi _ lower [ i ]) * rand _ vp
50
51 # Velocidade de vbeta _i(l , 0)
52 V_ theta [l , i + n] <-( beta _ lower [i] - beta _ upper [i ])+
53 + 2*( beta _ upper [i]- beta _ lower [i ]) * rand _ vbeta
54
55 # Velocidade de valpha _i(l , 0)
56 V_ theta [l ,i +2 * n] <-( alpha _ lower [i]- alpha _ upper [i ])+
57 +2 *( alpha _ upper [i] - alpha _ lower [i ]) * rand _ valpha
58 }
19
1 f_ fit = f_ fit ( pbest [l ,] , t_ values , Festim )
2
3 if (f_ fit < f_ fit _ min ) {
4 f_ fit _ min = f_ fit
5 qmin = l # resultar á na part í cula com o menor res í duo entre as q op çõ es testadas
6 }
7
8 }
9 gbest = pbest [ qmin ,, drop = FALSE ]
10 f_ fit _ gbest = numeric (1)
11 f_ fit _ gbest [1] = f _ fit _ min # guardo evolu ção do processo de fitness
12
13 # STEP 3 , 4 e 5 - UPDATE PARTICLES ' POSITIONS AND VELOCITIES , PBEST e GBEST ####
14 # #### UNTIL TERMINATION CRITERION
15
16 # Tamanho do espa ço de busca ( q) e nú mero de subpopula çõ es (n)
17 q <- nrow ( theta )
18 n <- ncol ( theta ) / 3
19 # browser ()
20 # Loop principal (k) para atualizar as posi çõ es e velocidades das part í culas
21 for ( k in 2: K) { # K é o nú mero total de itera ç õ es do PSO
22 w_k <- calculate _w (k , a )
23
24 # ### STEP 3 e 4 ( dentro da itera ção k) ####
25 f_ fit _ gbest [k] = f _ fit _ gbest [k -1] # na pior hip ó tese fica igual ao anterior
26 for ( l in 1: q) {
27 # Atualiza ção da velocidade conforme a equa ção (28)
28 rand = runif (1)
29 V_ theta [l , ] <- w _k * V_ theta [l , ] + c1 * rand * ( pbest [l , ] - theta [l , ]) +
30 + c2 * rand * ( gbest - theta [l , ])
31
32 # Atualiza ção da posi ç ão conforme a equa ç ão (30)
33 theta [l , ] <- theta [l , ] + V_ theta [l , ]
34
35 # como nunca atender á a restri ç ão " sum ( pi = 1) , NORMALIZO o theta [ pi ]
36 sum _ pi = sum ( theta [l ,1: n ])
37 for ( i in 1: n) {
38 theta [l ,i] = theta [l ,i] / sum _ pi
39 }
40 # ap ós normalizar pis , pode não atender ( fora da faixa 0 a 1) , ai gero outro abaixo
41
42 # Verificar as restri ç õ es para todas subpopula ç õ es ( dividi entre p e ( beta e alfa ))
43 if ( any ( theta [l ,1: n] < 0) | any ( theta [l ,1: n] > 1)) {
44 rand _p <- runif (1)
45 for ( i in 1: n) {
46 # Posi çã o de pi (l , k) conforme (23)
47 theta [l ,i] <-( pi _ lower [ i ]+( pi _ upper [i]- pi _ lower [i ]) * rand _p)/
48 sum (( pi _ lower +( pi _ upper - pi _ lower )* rand _p ))
49 }
50 }
51 if ( any ( theta [l ,( n +1):(3 *n )] < 0)) {
52 rand _ beta <- runif (1) # ## crio um nú mero randomico para cada part í cula ,
53 rand _ alpha <- runif (1) # ## mas igual para cada subpopula ção
54 for ( i in 1: n) {
55 # Posi çã o de beta _i(l , 0) conforme (24)
56 theta [l , i + n] <- beta _ lower [i] + ( beta _ upper [i ] - beta _ lower [i ]) * rand _ beta
57
58 # Posi çã o de alpha _i(l , 0) conforme (25)
20
1 theta [l , i + 2*n] <- alpha _ lower [ i] + ( alpha _ upper [i] - alpha _ lower [ i ]) * rand _ alpha
2 }
3 }
4 f_ fit _ theta = f_ fit ( theta [l ,] , t_ values , Festim )
5 f_ fit _ pbest = f_ fit ( pbest [l ,] , t_ values , Festim )
6 if (f_ fit _ theta < f_ fit _ pbest ) { # (31)
7 pbest [l ,] = theta [l ,] # atualiza a linha do pbest
8 if (f_ fit _ theta < f_ fit _ gbest [k ]) {
9 f_ fit _ gbest [k] = f _ fit _ theta # atualizo f _ fit do gbest
10 (32)
11 gbest = pbest [l ,, drop = FALSE ] # atualizo gbest
12 qmin = l #nã o uso para nada . S ó para saber o l que gerou o mí nimo na itera çã o
13 }
14 }
15 }
16 # #### STEP 5 - TERMINATION CRITERIO ####
17 if (f_ fit _ gbest [k ] != f_ fit _ gbest [k -1]) { # se não atualizou gbest , continuo
18 if (f_ fit _ gbest [k ] < Eps _1 | +
19 + abs (f_ fit _ gbest [k ] - f_ fit _ gbest [k -1]) < Eps _ 2) {
20 break
21 }
22 }
23 aux1 =c(k ,f_ fit _ gbest [k ])
24 print ( aux1 )
25 # browser ()
26 } # té rmino da itera ção k
27 print ( abs (f _ fit _ gbest [ k] - f_ fit _ gbest [k -1]) / Eps _ 2)
28 print (k)
29
30 t_ process <- Sys . time () - start _ time
31 # #### Apresenta os resultados finais
32 Results <- list (
33 f_ fit _ gbest = f_ fit _ gbest ,
34 gbest = gbest [1 , ],
35 t_ process = t _ process ,
36 Festim = Festim ,
37 k = k,
38 bounds = bounds ,
39 pbest = pbest ,
40 pi _ estim = p ,
41 alpha _ estim = alpha ,
42 beta _ estim = beta
43
44 )
45 return ( Results )
46
47 }
48 # IV . Estudo de Caso amostras t _ values ####
49
50 estudo1 = function ( tipo ) {
51 if ( tipo ==1){
52 # utilizar valores originais do artigo
53 library ( readxl )
54 t_ values _ orig <- read _ excel (" C:/ PPGEP / PRO 5970 / Projeto PLN /t_ values do artigo . xlsx " )
55 # Extrair os valores das colunas e coloc á - los em um ú nico vetor
56 t_ values <- c (t_ values _ orig $ ` Group 1`, t_ values _ orig $ ` Group 2`, t_ values _ orig $ ` Group 3`,
57 t_ values _ orig $ ` Group 4`, t_ values _ orig $ ` Group 5`, t_ values _ orig $ ` Group 6`,
58 t_ values _ orig $ ` Group 7`, t_ values _ orig $ ` Group 8`, t_ values _ orig $ ` Group 9`,
21
1 t_ values _ orig $ ` Group 10 `)
2 } else {
3 # Definir o nú mero de amostras em cada subpopula ção ####
4 n_ samples _ subpop1 <- 40
5 n_ samples _ subpop2 <- 120
6 n_ samples _ subpop3 <- 40
7
8 # Definir os par â metros para cada subpopula ção ####
9 alpha _ subpop1 <- 800
10 beta _ subpop1 <- 0.5
11
12 alpha _ subpop2 <- 1200
13 beta _ subpop2 <- 3
14
15 alpha _ subpop3 <- 2000
16 beta _ subpop3 <- 1
17
18 # Gerar as amostras para cada subpopula ção ####
19 samples _ subpop1 <- rweibull (n_ samples _ subpop1 , shape = beta _ subpop1 , scale = alpha _ subpop1 )
20 samples _ subpop2 <- rweibull (n_ samples _ subpop2 , shape = beta _ subpop2 , scale = alpha _ subpop2 )
21 samples _ subpop3 <- rweibull (n_ samples _ subpop3 , shape = beta _ subpop3 , scale = alpha _ subpop3 )
22
23 # Combinar todas as amostras em um ú nico vetor ####
24 t_ values <- c ( samples _ subpop1 , samples _ subpop2 , samples _ subpop3 )
25 }
26 # Ordenar as amostras ####
27 t_ values <- sort (t _ values )
28
29 # definido t _ values , calculo Festim que ser á usado diversas vezes
30 m = length (t _ values )
31 Festim = numeric ( m)
32 for ( j in 1: m) {
33 tj <- t_ values [j ]
34 Festim [j ] <- Festim (tj , j , m , t _ values [1] , t_ values [ m ])
35 }
36
37 # Transformar os dados em coordenadas (xj , yj ) ####
38 data _ transformed <- transform _ data (t_ values ,m , Festim )
39
40 # Plotar o gr á fico ####
41 plot _ data ( data _ transformed )
42 return ( list (t _ values = t_ values , data _ transformed = data _ transformed , Festim = Festim ))
43 }
44
45
46 estudo2 = function ( corte1 , corte2 ) {
47 # Definir os cortes para os segmentos (n -1 cortes para n segmentos )
48 cortes <- c( corte1 , corte2 )
49
50 # Definir o tamanho da popula çã o (q) , o nú mero de par â metros (n) , e a constante (a ) (29)
51 q <- 200
52 a = 3 # par â metro na equa ção (29) - artigo usou valor 3
53
54 # Constantes no c á lculo do V_ theta ( artigo diz que C1 e C2 em geral sã o iguais a 2)
55 c1 <- 2
56 c2 <- 2
57 # Crit é rio para finalizar itera ç õ es
58 K = 1000 # n ú mero má ximo de itera çõ es
22
1 Eps _1 = 0.01 # mí nimo valor para residual
2 Eps _2 = 10^( -10) # diferen ça mí nima entre duas gbest seguidas
3
4 t_ values = est1 $t_ values
5 data _ transformed = est1 $ data _ transformed
6 Festim = est1 $ Festim
7 PSO _ MWD ( cortes ,q ,a ,c1 ,c2 ,K , Eps _1, Eps _2, t_ values , data _ transformed , Festim )
8 }
9
10 ## para rodar : ####
11 est1 = estudo1 (1) # 1 para dados originais do artigo , 2 para criar dados
12 est2 = estudo2 (5.9 , 7.5)
23