Chapter 8 MI500: Contradictory objectives results
Here we present the results for the satisfactory trait corverage and activation gene coverage generated by each selection scheme replicate on the contradictory objectives diagnostic with our base configurations. Note both of these values are gathered at the population-level. Activation gene coverage refers to the count of unique activation genes in a given population; this gives us a range of integers between 0 and 100. Satisfactory trait coverage refers to the count of unique satisfied traits in a given population; this gives us a range of integers between 0 and 100. For our base configuration, we execute migrations every 500 generations and there are 4 islands in a ring topology. When migrations occur, two individuals are swapped (same position on each island) and guarantee that no solution can return to its original island.
8.2 Truncation selection
Here we analyze how the different population structures affect truncation selection (size 8) on the contradictory objectives diagnostic.
8.2.1 Satisfactory trait coverage
Satisfactory trait coverage analysis.
8.2.1.1 Coverage over time
Satisfactory trait coverage over time.
lines = filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TRUNCATION') %>%
group_by(Structure, Generations) %>%
dplyr::summarise(
min = min(pop_sat_cov),
mean = mean(pop_sat_cov),
max = max(pop_sat_cov)
)## `summarise()` has grouped output by 'Structure'. You can override using the
## `.groups` argument.
ggplot(lines, aes(x=Generations, y=mean, group = Structure, fill = Structure, color = Structure, shape = Structure)) +
geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.1) +
geom_line(size = 0.5) +
geom_point(data = filter(lines, Generations %% 2000 == 0), size = 1.5, stroke = 2.0, alpha = 1.0) +
scale_y_continuous(
name="Coverage"
) +
scale_x_continuous(
name="Generations",
limits=c(0, 50000),
breaks=c(0, 10000, 20000, 30000, 40000, 50000),
labels=c("0e+4", "1e+4", "2e+4", "3e+4", "4e+4", "5e+4")
) +
scale_shape_manual(values=SHAPE)+
scale_colour_manual(values = cb_palette) +
scale_fill_manual(values = cb_palette) +
ggtitle('Satisfactory trait coverage over time')+
p_theme
8.2.1.2 Best coverage throughout
Best satisfactory trait coverage throughout 50,000 generations.
### best satisfactory trait coverage throughout
filter(base_best, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TRUNCATION' & VAR == 'pop_sat_cov') %>%
ggplot(., aes(x = Structure, y = VAL, color = Structure, fill = Structure, shape = Structure)) +
geom_flat_violin(position = position_nudge(x = .2, y = 0), scale = 'width', alpha = 0.2) +
geom_point(position = position_jitter(height = .05, width = .05), size = 1.5, alpha = 1.0) +
geom_boxplot(color = 'black', width = .2, outlier.shape = NA, alpha = 0.0) +
scale_y_continuous(
name="coverage"
) +
scale_x_discrete(
name="Structure"
)+
scale_shape_manual(values=SHAPE)+
scale_colour_manual(values = cb_palette, ) +
scale_fill_manual(values = cb_palette) +
ggtitle('Best satisfactory trait coverage')+
p_theme + coord_flip()
8.2.1.2.1 Stats
Summary statistics for the best satisfactory trait coverage.
### best
coverage = filter(base_best, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TRUNCATION' & VAR == 'pop_sat_cov')
coverage %>%
group_by(Structure) %>%
dplyr::summarise(
count = n(),
na_cnt = sum(is.na(VAL)),
min = min(VAL, na.rm = TRUE),
median = median(VAL, na.rm = TRUE),
mean = mean(VAL, na.rm = TRUE),
max = max(VAL, na.rm = TRUE),
IQR = IQR(VAL, na.rm = TRUE)
)## # A tibble: 3 x 8
## Structure count na_cnt min median mean max IQR
## <fct> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 EA 100 0 1 1 1 1 0
## 2 IS 100 0 3 4 3.93 4 0
## 3 NMIS 100 0 3 4 3.96 4 0
Kruskal–Wallis test provides evidence of difference among satisfactory trait coverage.
##
## Kruskal-Wallis rank sum test
##
## data: VAL by Structure
## Kruskal-Wallis chi-squared = 279.71, df = 2, p-value < 2.2e-16
Results for post-hoc Wilcoxon rank-sum test with a Bonferroni correction on satisfactory trait coverage.
pairwise.wilcox.test(x = coverage$VAL, g = coverage$Structure, p.adjust.method = "bonferroni",
paired = FALSE, conf.int = FALSE, alternative = 'g')##
## Pairwise comparisons using Wilcoxon rank sum test with continuity correction
##
## data: coverage$VAL and coverage$Structure
##
## EA IS
## IS <2e-16 -
## NMIS <2e-16 0.53
##
## P value adjustment method: bonferroni
8.2.1.3 End of 50,000 generations
Satisfactory trait coverage in the population at the end of 50,000 generations.
### end of run
filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TRUNCATION' & Generations == 50000) %>%
ggplot(., aes(x = Structure, y = pop_sat_cov, color = Structure, fill = Structure, shape = Structure)) +
geom_flat_violin(position = position_nudge(x = .2, y = 0), scale = 'width', alpha = 0.3) +
geom_point(position = position_jitter(height = .05, width = .05), size = 1.5, alpha = 0.5) +
geom_boxplot(color = 'black', width = .2, outlier.shape = NA, alpha = 0.0) +
scale_shape_manual(values=SHAPE)+
scale_y_continuous(
name="Coverage"
) +
scale_x_discrete(
name="Structure"
) +
scale_colour_manual(values = cb_palette) +
scale_fill_manual(values = cb_palette) +
ggtitle('Final satisfactory trait coverage')+
p_theme + coord_flip()
8.2.1.3.1 Stats
Summary statistics for satisfactory trait coverage in the population at the end of 50,000 generations.
### end of run
coverage = filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TRUNCATION' & Generations == 50000)
coverage %>%
group_by(Structure) %>%
dplyr::summarise(
count = n(),
na_cnt = sum(is.na(pop_sat_cov)),
min = min(pop_sat_cov, na.rm = TRUE),
median = median(pop_sat_cov, na.rm = TRUE),
mean = mean(pop_sat_cov, na.rm = TRUE),
max = max(pop_sat_cov, na.rm = TRUE),
IQR = IQR(pop_sat_cov, na.rm = TRUE)
)## # A tibble: 3 x 8
## Structure count na_cnt min median mean max IQR
## <fct> <int> <int> <int> <dbl> <dbl> <int> <dbl>
## 1 EA 100 0 1 1 1 1 0
## 2 IS 100 0 1 1 1 1 0
## 3 NMIS 100 0 3 4 3.96 4 0
Kruskal–Wallis test provides evidence of difference among satisfactory trait coverage in the population at the end of 50,000 generations.
##
## Kruskal-Wallis rank sum test
##
## data: pop_sat_cov by Structure
## Kruskal-Wallis chi-squared = 297.1, df = 2, p-value < 2.2e-16
Results for post-hoc Wilcoxon rank-sum test with a Bonferroni correction on satisfactory trait coverage in the population at the end of 50,000 generations.
pairwise.wilcox.test(x = coverage$pop_sat_cov, g = coverage$Structure, p.adjust.method = "bonferroni",
paired = FALSE, conf.int = FALSE, alternative = 'g')##
## Pairwise comparisons using Wilcoxon rank sum test with continuity correction
##
## data: coverage$pop_sat_cov and coverage$Structure
##
## EA IS
## IS 1 -
## NMIS <2e-16 <2e-16
##
## P value adjustment method: bonferroni
8.2.2 Activation gene coverage
Activation gene coverage analysis.
8.2.2.1 Coverage over time
Activation gene coverage over time.
# data for lines and shading on plots
lines = filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TRUNCATION') %>%
group_by(Structure, Generations) %>%
dplyr::summarise(
min = min(pop_act_cov),
mean = mean(pop_act_cov),
max = max(pop_act_cov)
)## `summarise()` has grouped output by 'Structure'. You can override using the
## `.groups` argument.
ggplot(lines, aes(x=Generations, y=mean, group = Structure, fill = Structure, color = Structure, shape = Structure)) +
geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.1) +
geom_line(size = 0.5) +
geom_point(data = filter(lines, Generations %% 2000 == 0), size = 1.5, stroke = 2.0, alpha = 1.0) +
scale_y_continuous(
name="Coverage"
) +
scale_x_continuous(
name="Generations",
limits=c(0, 50000),
breaks=c(0, 10000, 20000, 30000, 40000, 50000),
labels=c("0e+4", "1e+4", "2e+4", "3e+4", "4e+4", "5e+4")
) +
scale_shape_manual(values=SHAPE)+
scale_colour_manual(values = cb_palette) +
scale_fill_manual(values = cb_palette) +
ggtitle('Activation gene coverage over time')+
p_theme
8.2.2.2 End of 50,000 generations
Activation gene coverage in the population at the end of 50,000 generations.
### end of run
filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TRUNCATION' & Generations == 50000) %>%
ggplot(., aes(x = Structure, y = pop_act_cov, color = Structure, fill = Structure, shape = Structure)) +
geom_flat_violin(position = position_nudge(x = .2, y = 0), scale = 'width', alpha = 0.3) +
geom_point(position = position_jitter(height = .05, width = .05), size = 1.5, alpha = 0.5) +
geom_boxplot(color = 'black', width = .2, outlier.shape = NA, alpha = 0.0) +
scale_shape_manual(values=SHAPE)+
scale_y_continuous(
name="Coverage"
) +
scale_x_discrete(
name="Structure"
) +
scale_colour_manual(values = cb_palette) +
scale_fill_manual(values = cb_palette) +
ggtitle('Final activation gene coverage')+
p_theme + coord_flip()
8.2.2.2.1 Stats
Summary statistics for activation gene coverage.
coverage = filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TRUNCATION' & Generations == 50000)
coverage %>%
group_by(Structure) %>%
dplyr::summarise(
count = n(),
na_cnt = sum(is.na(pop_act_cov)),
min = min(pop_act_cov, na.rm = TRUE),
median = median(pop_act_cov, na.rm = TRUE),
mean = mean(pop_act_cov, na.rm = TRUE),
max = max(pop_act_cov, na.rm = TRUE),
IQR = IQR(pop_act_cov, na.rm = TRUE)
)## # A tibble: 3 x 8
## Structure count na_cnt min median mean max IQR
## <fct> <int> <int> <int> <dbl> <dbl> <int> <dbl>
## 1 EA 100 0 1 1 1 1 0
## 2 IS 100 0 1 1 1 1 0
## 3 NMIS 100 0 3 4 3.96 4 0
Kruskal–Wallis test provides evidence of difference among activation gene coverage.
##
## Kruskal-Wallis rank sum test
##
## data: pop_act_cov by Structure
## Kruskal-Wallis chi-squared = 297.1, df = 2, p-value < 2.2e-16
Results for post-hoc Wilcoxon rank-sum test with a Bonferroni correction on activation gene coverage.
pairwise.wilcox.test(x = coverage$pop_act_cov, g = coverage$Structure, p.adjust.method = "bonferroni",
paired = FALSE, conf.int = FALSE, alternative = 'g')##
## Pairwise comparisons using Wilcoxon rank sum test with continuity correction
##
## data: coverage$pop_act_cov and coverage$Structure
##
## EA IS
## IS 1 -
## NMIS <2e-16 <2e-16
##
## P value adjustment method: bonferroni
8.3 Tournament selection
Here we analyze how the different population structures affect tournament selection (size 8) on the contradictory objectives diagnostic.
8.3.1 Satisfactory trait coverage
Satisfactory trait coverage analysis.
8.3.1.1 Coverage over time
Satisfactory trait coverage over time.
lines = filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TOURNAMENT') %>%
group_by(Structure, Generations) %>%
dplyr::summarise(
min = min(pop_sat_cov),
mean = mean(pop_sat_cov),
max = max(pop_sat_cov)
)## `summarise()` has grouped output by 'Structure'. You can override using the
## `.groups` argument.
ggplot(lines, aes(x=Generations, y=mean, group = Structure, fill = Structure, color = Structure, shape = Structure)) +
geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.1) +
geom_line(size = 0.5) +
geom_point(data = filter(lines, Generations %% 2000 == 0), size = 1.5, stroke = 2.0, alpha = 1.0) +
scale_y_continuous(
name="Coverage"
) +
scale_x_continuous(
name="Generations",
limits=c(0, 50000),
breaks=c(0, 10000, 20000, 30000, 40000, 50000),
labels=c("0e+4", "1e+4", "2e+4", "3e+4", "4e+4", "5e+4")
) +
scale_shape_manual(values=SHAPE)+
scale_colour_manual(values = cb_palette) +
scale_fill_manual(values = cb_palette) +
ggtitle('Satisfactory trait coverage over time')+
p_theme
8.3.1.2 Best coverage throughout
Best satisfactory trait coverage throughout 50,000 generations.
### best satisfactory trait coverage throughout
filter(base_best, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TOURNAMENT' & VAR == 'pop_sat_cov') %>%
ggplot(., aes(x = Structure, y = VAL, color = Structure, fill = Structure, shape = Structure)) +
geom_flat_violin(position = position_nudge(x = .2, y = 0), scale = 'width', alpha = 0.2) +
geom_point(position = position_jitter(height = .05, width = .05), size = 1.5, alpha = 1.0) +
geom_boxplot(color = 'black', width = .2, outlier.shape = NA, alpha = 0.0) +
scale_y_continuous(
name="coverage"
) +
scale_x_discrete(
name="Structure"
)+
scale_shape_manual(values=SHAPE)+
scale_colour_manual(values = cb_palette, ) +
scale_fill_manual(values = cb_palette) +
ggtitle('Best satisfactory trait coverage')+
p_theme + coord_flip()
8.3.1.2.1 Stats
Summary statistics for the best satisfactory trait coverage.
### best
coverage = filter(base_best, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TOURNAMENT' & VAR == 'pop_sat_cov')
coverage %>%
group_by(Structure) %>%
dplyr::summarise(
count = n(),
na_cnt = sum(is.na(VAL)),
min = min(VAL, na.rm = TRUE),
median = median(VAL, na.rm = TRUE),
mean = mean(VAL, na.rm = TRUE),
max = max(VAL, na.rm = TRUE),
IQR = IQR(VAL, na.rm = TRUE)
)## # A tibble: 3 x 8
## Structure count na_cnt min median mean max IQR
## <fct> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 EA 100 0 1 1 1 1 0
## 2 IS 100 0 3 4 3.96 4 0
## 3 NMIS 100 0 3 4 3.95 4 0
Kruskal–Wallis test provides evidence of difference among satisfactory trait coverage.
##
## Kruskal-Wallis rank sum test
##
## data: VAL by Structure
## Kruskal-Wallis chi-squared = 282.81, df = 2, p-value < 2.2e-16
Results for post-hoc Wilcoxon rank-sum test with a Bonferroni correction on satisfactory trait coverage.
pairwise.wilcox.test(x = coverage$VAL, g = coverage$Structure, p.adjust.method = "bonferroni",
paired = FALSE, conf.int = FALSE, alternative = 'g')##
## Pairwise comparisons using Wilcoxon rank sum test with continuity correction
##
## data: coverage$VAL and coverage$Structure
##
## EA IS
## IS <2e-16 -
## NMIS <2e-16 1
##
## P value adjustment method: bonferroni
8.3.1.3 End of 50,000 generations
Satisfactory trait coverage in the population at the end of 50,000 generations.
### end of run
filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TOURNAMENT' & Generations == 50000) %>%
ggplot(., aes(x = Structure, y = pop_sat_cov, color = Structure, fill = Structure, shape = Structure)) +
geom_flat_violin(position = position_nudge(x = .2, y = 0), scale = 'width', alpha = 0.3) +
geom_point(position = position_jitter(height = .05, width = .05), size = 1.5, alpha = 0.5) +
geom_boxplot(color = 'black', width = .2, outlier.shape = NA, alpha = 0.0) +
scale_shape_manual(values=SHAPE)+
scale_y_continuous(
name="Coverage"
) +
scale_x_discrete(
name="Structure"
) +
scale_colour_manual(values = cb_palette) +
scale_fill_manual(values = cb_palette) +
ggtitle('Final satisfactory trait coverage')+
p_theme + coord_flip()
8.3.1.3.1 Stats
Summary statistics for satisfactory trait coverage in the population at the end of 50,000 generations.
### end of run
coverage = filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TOURNAMENT' & Generations == 50000)
coverage %>%
group_by(Structure) %>%
dplyr::summarise(
count = n(),
na_cnt = sum(is.na(pop_sat_cov)),
min = min(pop_sat_cov, na.rm = TRUE),
median = median(pop_sat_cov, na.rm = TRUE),
mean = mean(pop_sat_cov, na.rm = TRUE),
max = max(pop_sat_cov, na.rm = TRUE),
IQR = IQR(pop_sat_cov, na.rm = TRUE)
)## # A tibble: 3 x 8
## Structure count na_cnt min median mean max IQR
## <fct> <int> <int> <int> <dbl> <dbl> <int> <dbl>
## 1 EA 100 0 1 1 1 1 0
## 2 IS 100 0 1 1 1 1 0
## 3 NMIS 100 0 3 4 3.95 4 0
Kruskal–Wallis test provides evidence of difference among satisfactory trait coverage in the population at the end of 50,000 generations.
##
## Kruskal-Wallis rank sum test
##
## data: pop_sat_cov by Structure
## Kruskal-Wallis chi-squared = 296.65, df = 2, p-value < 2.2e-16
Results for post-hoc Wilcoxon rank-sum test with a Bonferroni correction on satisfactory trait coverage in the population at the end of 50,000 generations.
pairwise.wilcox.test(x = coverage$pop_sat_cov, g = coverage$Structure, p.adjust.method = "bonferroni",
paired = FALSE, conf.int = FALSE, alternative = 'g')##
## Pairwise comparisons using Wilcoxon rank sum test with continuity correction
##
## data: coverage$pop_sat_cov and coverage$Structure
##
## EA IS
## IS 1 -
## NMIS <2e-16 <2e-16
##
## P value adjustment method: bonferroni
8.3.2 Activation gene coverage
Activation gene coverage analysis.
8.3.2.1 Coverage over time
Activation gene coverage over time.
# data for lines and shading on plots
lines = filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TOURNAMENT') %>%
group_by(Structure, Generations) %>%
dplyr::summarise(
min = min(pop_act_cov),
mean = mean(pop_act_cov),
max = max(pop_act_cov)
)## `summarise()` has grouped output by 'Structure'. You can override using the
## `.groups` argument.
ggplot(lines, aes(x=Generations, y=mean, group = Structure, fill = Structure, color = Structure, shape = Structure)) +
geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.1) +
geom_line(size = 0.5) +
geom_point(data = filter(lines, Generations %% 2000 == 0), size = 1.5, stroke = 2.0, alpha = 1.0) +
scale_y_continuous(
name="Coverage"
) +
scale_x_continuous(
name="Generations",
limits=c(0, 50000),
breaks=c(0, 10000, 20000, 30000, 40000, 50000),
labels=c("0e+4", "1e+4", "2e+4", "3e+4", "4e+4", "5e+4")
) +
scale_shape_manual(values=SHAPE)+
scale_colour_manual(values = cb_palette) +
scale_fill_manual(values = cb_palette) +
ggtitle('Activation gene coverage over time')+
p_theme
8.3.2.2 End of 50,000 generations
Activation gene coverage in the population at the end of 50,000 generations.
### end of run
filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TOURNAMENT' & Generations == 50000) %>%
ggplot(., aes(x = Structure, y = pop_act_cov, color = Structure, fill = Structure, shape = Structure)) +
geom_flat_violin(position = position_nudge(x = .2, y = 0), scale = 'width', alpha = 0.3) +
geom_point(position = position_jitter(height = .05, width = .05), size = 1.5, alpha = 0.5) +
geom_boxplot(color = 'black', width = .2, outlier.shape = NA, alpha = 0.0) +
scale_shape_manual(values=SHAPE)+
scale_y_continuous(
name="Coverage"
) +
scale_x_discrete(
name="Structure"
) +
scale_colour_manual(values = cb_palette) +
scale_fill_manual(values = cb_palette) +
ggtitle('Final activation gene coverage')+
p_theme + coord_flip()
8.3.2.2.1 Stats
Summary statistics for activation gene coverage.
coverage = filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'TOURNAMENT' & Generations == 50000)
coverage %>%
group_by(Structure) %>%
dplyr::summarise(
count = n(),
na_cnt = sum(is.na(pop_act_cov)),
min = min(pop_act_cov, na.rm = TRUE),
median = median(pop_act_cov, na.rm = TRUE),
mean = mean(pop_act_cov, na.rm = TRUE),
max = max(pop_act_cov, na.rm = TRUE),
IQR = IQR(pop_act_cov, na.rm = TRUE)
)## # A tibble: 3 x 8
## Structure count na_cnt min median mean max IQR
## <fct> <int> <int> <int> <dbl> <dbl> <int> <dbl>
## 1 EA 100 0 1 1 1 1 0
## 2 IS 100 0 1 1 1 1 0
## 3 NMIS 100 0 3 4 3.95 4 0
Kruskal–Wallis test provides evidence of difference among activation gene coverage.
##
## Kruskal-Wallis rank sum test
##
## data: pop_act_cov by Structure
## Kruskal-Wallis chi-squared = 296.65, df = 2, p-value < 2.2e-16
Results for post-hoc Wilcoxon rank-sum test with a Bonferroni correction on activation gene coverage.
pairwise.wilcox.test(x = coverage$pop_act_cov, g = coverage$Structure, p.adjust.method = "bonferroni",
paired = FALSE, conf.int = FALSE, alternative = 'g')##
## Pairwise comparisons using Wilcoxon rank sum test with continuity correction
##
## data: coverage$pop_act_cov and coverage$Structure
##
## EA IS
## IS 1 -
## NMIS <2e-16 <2e-16
##
## P value adjustment method: bonferroni
8.4 Lexicase selection
Here we analyze how the different population structures affect standard lexicase selection on the contradictory objectives diagnostic.
8.4.1 Satisfactory trait coverage
Satisfactory trait coverage analysis.
8.4.1.1 Coverage over time
Satisfactory trait coverage over time.
lines = filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'LEXICASE') %>%
group_by(Structure, Generations) %>%
dplyr::summarise(
min = min(pop_sat_cov),
mean = mean(pop_sat_cov),
max = max(pop_sat_cov)
)## `summarise()` has grouped output by 'Structure'. You can override using the
## `.groups` argument.
ggplot(lines, aes(x=Generations, y=mean, group = Structure, fill = Structure, color = Structure, shape = Structure)) +
geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.1) +
geom_line(size = 0.5) +
geom_point(data = filter(lines, Generations %% 2000 == 0), size = 1.5, stroke = 2.0, alpha = 1.0) +
scale_y_continuous(
name="Coverage"
) +
scale_x_continuous(
name="Generations",
limits=c(0, 50000),
breaks=c(0, 10000, 20000, 30000, 40000, 50000),
labels=c("0e+4", "1e+4", "2e+4", "3e+4", "4e+4", "5e+4")
) +
scale_shape_manual(values=SHAPE)+
scale_colour_manual(values = cb_palette) +
scale_fill_manual(values = cb_palette) +
ggtitle('Satisfactory trait coverage over time')+
p_theme
8.4.1.2 Best coverage throughout
Best satisfactory trait coverage throughout 50,000 generations.
### best satisfactory trait coverage throughout
filter(base_best, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'LEXICASE' & VAR == 'pop_sat_cov') %>%
ggplot(., aes(x = Structure, y = VAL, color = Structure, fill = Structure, shape = Structure)) +
geom_flat_violin(position = position_nudge(x = .2, y = 0), scale = 'width', alpha = 0.2) +
geom_point(position = position_jitter(height = .05, width = .05), size = 1.5, alpha = 1.0) +
geom_boxplot(color = 'black', width = .2, outlier.shape = NA, alpha = 0.0) +
scale_y_continuous(
name="coverage"
) +
scale_x_discrete(
name="Structure"
)+
scale_shape_manual(values=SHAPE)+
scale_colour_manual(values = cb_palette, ) +
scale_fill_manual(values = cb_palette) +
ggtitle('Best satisfactory trait coverage')+
p_theme + coord_flip()
8.4.1.2.1 Stats
Summary statistics for the best satisfactory trait coverage.
### best
coverage = filter(base_best, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'LEXICASE' & VAR == 'pop_sat_cov')
coverage$Structure = factor(coverage$Structure, levels=c('EA','NMIS','IS'))
coverage %>%
group_by(Structure) %>%
dplyr::summarise(
count = n(),
na_cnt = sum(is.na(VAL)),
min = min(VAL, na.rm = TRUE),
median = median(VAL, na.rm = TRUE),
mean = mean(VAL, na.rm = TRUE),
max = max(VAL, na.rm = TRUE),
IQR = IQR(VAL, na.rm = TRUE)
)## # A tibble: 3 x 8
## Structure count na_cnt min median mean max IQR
## <fct> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 EA 100 0 45 48 48.3 51 2
## 2 NMIS 100 0 35 41 40.4 45 3
## 3 IS 100 0 21 24 24.2 29 2
Kruskal–Wallis test provides evidence of difference among satisfactory trait coverage.
##
## Kruskal-Wallis rank sum test
##
## data: VAL by Structure
## Kruskal-Wallis chi-squared = 266.69, df = 2, p-value < 2.2e-16
Results for post-hoc Wilcoxon rank-sum test with a Bonferroni correction on satisfactory trait coverage.
pairwise.wilcox.test(x = coverage$VAL, g = coverage$Structure, p.adjust.method = "bonferroni",
paired = FALSE, conf.int = FALSE, alternative = 'l')##
## Pairwise comparisons using Wilcoxon rank sum test with continuity correction
##
## data: coverage$VAL and coverage$Structure
##
## EA NMIS
## NMIS <2e-16 -
## IS <2e-16 <2e-16
##
## P value adjustment method: bonferroni
8.4.1.3 End of 50,000 generations
Satisfactory trait coverage in the population at the end of 50,000 generations.
### end of run
filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'LEXICASE' & Generations == 50000) %>%
ggplot(., aes(x = Structure, y = pop_sat_cov, color = Structure, fill = Structure, shape = Structure)) +
geom_flat_violin(position = position_nudge(x = .2, y = 0), scale = 'width', alpha = 0.3) +
geom_point(position = position_jitter(height = .05, width = .05), size = 1.5, alpha = 0.5) +
geom_boxplot(color = 'black', width = .2, outlier.shape = NA, alpha = 0.0) +
scale_shape_manual(values=SHAPE)+
scale_y_continuous(
name="Coverage"
) +
scale_x_discrete(
name="Structure"
) +
scale_colour_manual(values = cb_palette) +
scale_fill_manual(values = cb_palette) +
ggtitle('Final satisfactory trait coverage')+
p_theme + coord_flip()
8.4.1.3.1 Stats
Summary statistics for satisfactory trait coverage in the population at the end of 50,000 generations.
### end of run
coverage = filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'LEXICASE' & Generations == 50000)
coverage$Structure = factor(coverage$Structure, levels=c('EA','NMIS','IS'))
coverage %>%
group_by(Structure) %>%
dplyr::summarise(
count = n(),
na_cnt = sum(is.na(pop_sat_cov)),
min = min(pop_sat_cov, na.rm = TRUE),
median = median(pop_sat_cov, na.rm = TRUE),
mean = mean(pop_sat_cov, na.rm = TRUE),
max = max(pop_sat_cov, na.rm = TRUE),
IQR = IQR(pop_sat_cov, na.rm = TRUE)
)## # A tibble: 3 x 8
## Structure count na_cnt min median mean max IQR
## <fct> <int> <int> <int> <dbl> <dbl> <int> <dbl>
## 1 EA 100 0 36 39 38.8 42 1.25
## 2 NMIS 100 0 29 34 33.7 38 3
## 3 IS 100 0 15 17 16.7 19 1
Kruskal–Wallis test provides evidence of difference among satisfactory trait coverage in the population at the end of 50,000 generations.
##
## Kruskal-Wallis rank sum test
##
## data: pop_sat_cov by Structure
## Kruskal-Wallis chi-squared = 265.34, df = 2, p-value < 2.2e-16
Results for post-hoc Wilcoxon rank-sum test with a Bonferroni correction on satisfactory trait coverage in the population at the end of 50,000 generations.
pairwise.wilcox.test(x = coverage$pop_sat_cov, g = coverage$Structure, p.adjust.method = "bonferroni",
paired = FALSE, conf.int = FALSE, alternative = 'l')##
## Pairwise comparisons using Wilcoxon rank sum test with continuity correction
##
## data: coverage$pop_sat_cov and coverage$Structure
##
## EA NMIS
## NMIS <2e-16 -
## IS <2e-16 <2e-16
##
## P value adjustment method: bonferroni
8.4.2 Activation gene coverage
Activation gene coverage analysis.
8.4.2.1 Coverage over time
Activation gene coverage over time.
# data for lines and shading on plots
lines = filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'LEXICASE') %>%
group_by(Structure, Generations) %>%
dplyr::summarise(
min = min(pop_act_cov),
mean = mean(pop_act_cov),
max = max(pop_act_cov)
)## `summarise()` has grouped output by 'Structure'. You can override using the
## `.groups` argument.
ggplot(lines, aes(x=Generations, y=mean, group = Structure, fill = Structure, color = Structure, shape = Structure)) +
geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.1) +
geom_line(size = 0.5) +
geom_point(data = filter(lines, Generations %% 2000 == 0), size = 1.5, stroke = 2.0, alpha = 1.0) +
scale_y_continuous(
name="Coverage"
) +
scale_x_continuous(
name="Generations",
limits=c(0, 50000),
breaks=c(0, 10000, 20000, 30000, 40000, 50000),
labels=c("0e+4", "1e+4", "2e+4", "3e+4", "4e+4", "5e+4")
) +
scale_shape_manual(values=SHAPE)+
scale_colour_manual(values = cb_palette) +
scale_fill_manual(values = cb_palette) +
ggtitle('Activation gene coverage over time')+
p_theme
8.4.2.2 End of 50,000 generations
Activation gene coverage in the population at the end of 50,000 generations.
### end of run
filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'LEXICASE' & Generations == 50000) %>%
ggplot(., aes(x = Structure, y = pop_act_cov, color = Structure, fill = Structure, shape = Structure)) +
geom_flat_violin(position = position_nudge(x = .2, y = 0), scale = 'width', alpha = 0.3) +
geom_point(position = position_jitter(height = .05, width = .05), size = 1.5, alpha = 0.5) +
geom_boxplot(color = 'black', width = .2, outlier.shape = NA, alpha = 0.0) +
scale_shape_manual(values=SHAPE)+
scale_y_continuous(
name="Coverage"
) +
scale_x_discrete(
name="Structure"
) +
scale_colour_manual(values = cb_palette) +
scale_fill_manual(values = cb_palette) +
ggtitle('Final activation gene coverage')+
p_theme + coord_flip()
8.4.2.2.1 Stats
Summary statistics for activation gene coverage.
coverage = filter(base_over_time, Diagnostic == 'CONTRADICTORY_OBJECTIVES' & `Selection\nScheme` == 'LEXICASE' & Generations == 50000)
coverage$Structure = factor(coverage$Structure, levels=c('EA','NMIS','IS'))
coverage %>%
group_by(Structure) %>%
dplyr::summarise(
count = n(),
na_cnt = sum(is.na(pop_act_cov)),
min = min(pop_act_cov, na.rm = TRUE),
median = median(pop_act_cov, na.rm = TRUE),
mean = mean(pop_act_cov, na.rm = TRUE),
max = max(pop_act_cov, na.rm = TRUE),
IQR = IQR(pop_act_cov, na.rm = TRUE)
)## # A tibble: 3 x 8
## Structure count na_cnt min median mean max IQR
## <fct> <int> <int> <int> <dbl> <dbl> <int> <dbl>
## 1 EA 100 0 36 39 38.8 42 1.25
## 2 NMIS 100 0 29 34 33.7 38 3
## 3 IS 100 0 15 17 16.7 19 1
Kruskal–Wallis test provides evidence of difference among activation gene coverage.
##
## Kruskal-Wallis rank sum test
##
## data: pop_act_cov by Structure
## Kruskal-Wallis chi-squared = 265.34, df = 2, p-value < 2.2e-16
Results for post-hoc Wilcoxon rank-sum test with a Bonferroni correction on activation gene coverage.
pairwise.wilcox.test(x = coverage$pop_act_cov, g = coverage$Structure, p.adjust.method = "bonferroni",
paired = FALSE, conf.int = FALSE, alternative = 'l')##
## Pairwise comparisons using Wilcoxon rank sum test with continuity correction
##
## data: coverage$pop_act_cov and coverage$Structure
##
## EA NMIS
## NMIS <2e-16 -
## IS <2e-16 <2e-16
##
## P value adjustment method: bonferroni