Skip to content

Commit 0502b72

Browse files
committed
Add special permutable_allele_size_scaled to RangeGenoype and MultiRangeGenotype
1 parent 1c1f416 commit 0502b72

File tree

5 files changed

+35
-12
lines changed

5 files changed

+35
-12
lines changed

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2222
`StaticMatrixGenotype`, as matrix has no use for permutation_
2323
* _Note: Scales should be symmetrical around zero, as always, but good to
2424
remember_
25+
* _Note: As an added benefit the generic `StrategyBuilder` with deferred
26+
specialization can now also be used for `RangeGenotype` and
27+
`MultiRangeGenotype`_
2528
* Keep track of `scale_generation` next to `current_generation` in
2629
`StrategyState`, resets every scale increment
2730
* Add `mutation_type_allows_permutation()` guard on `Genotype` and check in
@@ -600,7 +603,7 @@ This is a major breaking release, see Changed:
600603
* Rename `MutateSingleGeneRandomDynamic` to `MutateSingleGeneDynamic` as it just calls `mutate_chromosome()` on `Genotype`
601604
* Rename `MutateMultiGeneRandom` to `MutateMultiGene` as it just calls `mutate_chromosome()` on `Genotype`
602605
* Rename `MutateMultiGeneRandomDynamic` to `MutateMultiGeneDynamic`as it just calls `mutate_chromosome()` on `Genotype`
603-
* Rename `allele_neighbour_range` to `allele_mutation_range` in `RangeGenoype` (incl. Multi) to define relative mutation
606+
* Rename `allele_neighbour_range` to `allele_mutation_range` in `RangeGenotype` (incl. Multi) to define relative mutation
604607
* Add `allele_mutation_scaled_range` to `RangeGenotype` (incl. Multi) to define scaled mutation
605608
* All changes to `RangeGenotype` are reflected in `MultiRangeGenotype` as well
606609

src/genotype/multi_range.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,13 @@ where
741741
})
742742
.collect()
743743
}
744+
745+
pub fn chromosome_permutations_size_scaled(&self, scale_index: usize) -> BigUint {
746+
self.permutable_allele_sizes_scaled(scale_index)
747+
.iter()
748+
.map(|v| BigUint::from(*v))
749+
.product()
750+
}
744751
}
745752

746753
impl<T: RangeAllele + Into<f64>> ChromosomeManager<Self> for MultiRange<T>
@@ -849,7 +856,16 @@ where
849856
writeln!(f, "genotype:")?;
850857
writeln!(f, " genes_size: {}", self.genes_size)?;
851858
writeln!(f, " mutation_type: {:?}", self.mutation_type)?;
852-
writeln!(f, " chromosome_permutations_size: uncountable")?;
859+
860+
if let Some(max_scale_index) = self.max_scale_index() {
861+
let sizes: Vec<BigUint> = (0..max_scale_index)
862+
.map(|scale_index| self.chromosome_permutations_size_scaled(scale_index))
863+
.collect();
864+
writeln!(f, " chromosome_permutations_size (per scale): {:?}", sizes)?;
865+
} else {
866+
writeln!(f, " chromosome_permutations_size: uncountable")?;
867+
}
868+
853869
writeln!(
854870
f,
855871
" neighbouring_population_size: {}",

src/genotype/range.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,10 @@ where
668668
})
669669
.count()
670670
}
671+
672+
pub fn chromosome_permutations_size_scaled(&self, scale_index: usize) -> BigUint {
673+
BigUint::from(self.permutable_allele_size_scaled(scale_index)).pow(self.genes_size() as u32)
674+
}
671675
}
672676

673677
impl<T: RangeAllele> ChromosomeManager<Self> for Range<T>
@@ -767,7 +771,7 @@ where
767771

768772
if let Some(max_scale_index) = self.max_scale_index() {
769773
let sizes: Vec<BigUint> = (0..max_scale_index)
770-
.map(|scale_index| self.chromosome_permutations_size(Some(scale_index)))
774+
.map(|scale_index| self.chromosome_permutations_size_scaled(scale_index))
771775
.collect();
772776
writeln!(f, " chromosome_permutations_size (per scale): {:?}", sizes)?;
773777
} else {

tests/genotype/multi_range_test.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ fn float_chromosome_permutations_2_scaled() {
398398
));
399399

400400
assert_eq!(
401-
genotype.chromosome_permutations_size(Some(0)),
401+
genotype.chromosome_permutations_size_scaled(0),
402402
BigUint::from(9u32)
403403
);
404404
let chromosomes = genotype
@@ -422,7 +422,7 @@ fn float_chromosome_permutations_2_scaled() {
422422
));
423423

424424
assert_eq!(
425-
genotype.chromosome_permutations_size(Some(1)),
425+
genotype.chromosome_permutations_size_scaled(1),
426426
BigUint::from(25u32)
427427
);
428428
let chromosomes = genotype
@@ -462,7 +462,7 @@ fn float_chromosome_permutations_2_scaled() {
462462
));
463463

464464
assert_eq!(
465-
genotype.chromosome_permutations_size(Some(2)),
465+
genotype.chromosome_permutations_size_scaled(2),
466466
BigUint::from(24u32)
467467
);
468468
let chromosomes = genotype

tests/genotype/range_test.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ fn float_chromosome_permutations_2_scaled() {
470470
));
471471

472472
assert_eq!(
473-
genotype.chromosome_permutations_size(Some(0)),
473+
genotype.chromosome_permutations_size_scaled(0),
474474
BigUint::from(9u32)
475475
);
476476
let chromosomes = genotype
@@ -494,7 +494,7 @@ fn float_chromosome_permutations_2_scaled() {
494494
));
495495

496496
assert_eq!(
497-
genotype.chromosome_permutations_size(Some(1)),
497+
genotype.chromosome_permutations_size_scaled(1),
498498
BigUint::from(36u32)
499499
);
500500
let chromosomes = genotype
@@ -545,7 +545,7 @@ fn float_chromosome_permutations_2_scaled() {
545545
));
546546

547547
assert_eq!(
548-
genotype.chromosome_permutations_size(Some(2)),
548+
genotype.chromosome_permutations_size_scaled(2),
549549
BigUint::from(25u32)
550550
);
551551
let chromosomes = genotype
@@ -840,7 +840,7 @@ fn integer_chromosome_permutations_2_scaled() {
840840
assert_eq!(inspect::chromosome(&chromosome), vec![4, 4]);
841841

842842
assert_eq!(
843-
genotype.chromosome_permutations_size(Some(0)),
843+
genotype.chromosome_permutations_size_scaled(0),
844844
BigUint::from(9u32)
845845
);
846846
let chromosomes = genotype
@@ -862,7 +862,7 @@ fn integer_chromosome_permutations_2_scaled() {
862862
);
863863

864864
assert_eq!(
865-
genotype.chromosome_permutations_size(Some(1)),
865+
genotype.chromosome_permutations_size_scaled(1),
866866
BigUint::from(36u32)
867867
);
868868
let chromosomes = genotype
@@ -911,7 +911,7 @@ fn integer_chromosome_permutations_2_scaled() {
911911
);
912912

913913
assert_eq!(
914-
genotype.chromosome_permutations_size(Some(2)),
914+
genotype.chromosome_permutations_size_scaled(2),
915915
BigUint::from(25u32)
916916
);
917917
let chromosomes = genotype

0 commit comments

Comments
 (0)