From 6515b51e2ce04ebc24c8a6f83b9935f58c128d54 Mon Sep 17 00:00:00 2001 From: dlesignac <damien.lesignac@dreev.com> Date: Sun, 24 Apr 2022 15:47:22 +0200 Subject: [PATCH] Move some code and add kata.md --- kata.md | 46 +++++++++++++++++++ .../common/{measure => }/Angle.java | 2 +- .../common/{measure => }/Distance.java | 2 +- .../common/{measure => }/Probability.java | 2 +- .../common/{measure => }/Vector.java | 2 +- .../common/{measure => }/VectorComponent.java | 2 +- .../DefaultPredatorMatingConfigurer.java | 4 +- .../mating/DefaultPreyMatingConfigurer.java | 4 +- .../mating/MatingConfigurer.java | 4 +- .../DefaultPredatorMovingConfigurer.java | 2 +- .../moving/DefaultPreyMovingConfigurer.java | 2 +- .../takima/lotka_volterra/moving/Moving.java | 6 +-- .../moving/MovingConfigurer.java | 2 +- .../lotka_volterra/moving/MovingEntity.java | 2 +- .../lotka_volterra/moving/Position.java | 4 +- .../moving/PositionComponent.java | 2 +- .../predation/DefaultPredationConfigurer.java | 4 +- .../predation/PredationConfigurer.java | 4 +- .../moving/MovingEntityTest.java | 2 +- 19 files changed, 72 insertions(+), 26 deletions(-) create mode 100644 kata.md rename src/main/java/fr/takima/lotka_volterra/common/{measure => }/Angle.java (87%) rename src/main/java/fr/takima/lotka_volterra/common/{measure => }/Distance.java (91%) rename src/main/java/fr/takima/lotka_volterra/common/{measure => }/Probability.java (92%) rename src/main/java/fr/takima/lotka_volterra/common/{measure => }/Vector.java (96%) rename src/main/java/fr/takima/lotka_volterra/common/{measure => }/VectorComponent.java (80%) diff --git a/kata.md b/kata.md new file mode 100644 index 0000000..a424323 --- /dev/null +++ b/kata.md @@ -0,0 +1,46 @@ +Au programme aujourd'hui, il ne s'agira pas tellement de cercle mais plutôt de sinus: ceux des equations de +[Lotka-Volterra](https://en.wikipedia.org/wiki/Lotka%E2%80%93Volterra_equations). + +``` +Kezako ? +``` + +En résumé, il s'agit d'une modélisation mathématique de la relation qui existe entre l'évolution d'une population de +proie et l'évolution de la population de ses prédateurs. + + + +En 4 phrases: + +* lorsque les proies sont peu nombreuses, le manque de nourriture entraine la diminution de la population de prédateurs +* lorsque les prédateurs sont peu nombreux, la diminution du danger entraine l'augmentation de la population de proies +* lorsque les proies sont nombreuses, l'abondance de nourriture entraine l'augmentation de la population de prédateurs +* lorsque les prédateurs sont nombreux, l'augmentation du danger entraine la diminituion de la population de proies. + +``` +D'accord, mais moi je code quoi ? +``` + +Rien de moins qu'un écosystème virtuel. Une simulation mettant en jeu une population de proie, une population de +prédateurs, une relation de prédation et une relation de reproduction, dont la complexité se limitera à ton imagination. + +Par exemple, une relation de prédation simple: + +* dans `x` % des cas, la prédation est réussie: le prédateur survit et la proie meurt +* dans `(100 - x)` % des cas, la prédation échoue: le prédateur meurt et la proie survit. + +Bien sûr, cette version ultra-simplifiée est très peu représentative de la réalité. Tu peux par exemple décider +d'ajouter une notion de distance entre les entités, un système de *points de vie* pour que les prédateurs ne meurent pas +au premier échec, ... Cet exercice est volontairement libre pour que ton imagination puisse s'exprimer. + +``` +Et le rapport avec Lotka-Volterra ? +``` + +Si ta simulation est stable, alors elle ne devrait aboutir ni à l'extinction, ni à la prolifération (croissance infinie +qui ne peut correspondre à la réalité) de l'une ou l'autre des deux (ou plus ;) ) espèces. En traçant la courbe de +l'évolution des populations, tu devrais donc retrouver des formes familières. + +Voici un [petit exemple](https://gitlab.takima.io/dlesignac/lotka-volterra) en Java de simulation pas encore stabilisée. + +Pas facile... De quoi faire réfléchir sur la complexité et la fragilité de notre écosystème. diff --git a/src/main/java/fr/takima/lotka_volterra/common/measure/Angle.java b/src/main/java/fr/takima/lotka_volterra/common/Angle.java similarity index 87% rename from src/main/java/fr/takima/lotka_volterra/common/measure/Angle.java rename to src/main/java/fr/takima/lotka_volterra/common/Angle.java index 78e16b2..785d020 100644 --- a/src/main/java/fr/takima/lotka_volterra/common/measure/Angle.java +++ b/src/main/java/fr/takima/lotka_volterra/common/Angle.java @@ -1,4 +1,4 @@ -package fr.takima.lotka_volterra.common.measure; +package fr.takima.lotka_volterra.common; import fr.takima.lotka_volterra.common.value.PositiveInt; import fr.takima.lotka_volterra.validator.LowerThanValidator; diff --git a/src/main/java/fr/takima/lotka_volterra/common/measure/Distance.java b/src/main/java/fr/takima/lotka_volterra/common/Distance.java similarity index 91% rename from src/main/java/fr/takima/lotka_volterra/common/measure/Distance.java rename to src/main/java/fr/takima/lotka_volterra/common/Distance.java index 11da308..08fd030 100644 --- a/src/main/java/fr/takima/lotka_volterra/common/measure/Distance.java +++ b/src/main/java/fr/takima/lotka_volterra/common/Distance.java @@ -1,4 +1,4 @@ -package fr.takima.lotka_volterra.common.measure; +package fr.takima.lotka_volterra.common; import fr.takima.lotka_volterra.common.value.BigDecimalValue; import fr.takima.lotka_volterra.validator.GreaterThanValidator; diff --git a/src/main/java/fr/takima/lotka_volterra/common/measure/Probability.java b/src/main/java/fr/takima/lotka_volterra/common/Probability.java similarity index 92% rename from src/main/java/fr/takima/lotka_volterra/common/measure/Probability.java rename to src/main/java/fr/takima/lotka_volterra/common/Probability.java index 21b7458..4b7ba4a 100644 --- a/src/main/java/fr/takima/lotka_volterra/common/measure/Probability.java +++ b/src/main/java/fr/takima/lotka_volterra/common/Probability.java @@ -1,4 +1,4 @@ -package fr.takima.lotka_volterra.common.measure; +package fr.takima.lotka_volterra.common; import fr.takima.lotka_volterra.common.value.BigDecimalValue; import fr.takima.lotka_volterra.validator.GreaterThanValidator; diff --git a/src/main/java/fr/takima/lotka_volterra/common/measure/Vector.java b/src/main/java/fr/takima/lotka_volterra/common/Vector.java similarity index 96% rename from src/main/java/fr/takima/lotka_volterra/common/measure/Vector.java rename to src/main/java/fr/takima/lotka_volterra/common/Vector.java index 614a577..00b209c 100644 --- a/src/main/java/fr/takima/lotka_volterra/common/measure/Vector.java +++ b/src/main/java/fr/takima/lotka_volterra/common/Vector.java @@ -1,4 +1,4 @@ -package fr.takima.lotka_volterra.common.measure; +package fr.takima.lotka_volterra.common; import fr.takima.lotka_volterra.validator.NotNullValidator; diff --git a/src/main/java/fr/takima/lotka_volterra/common/measure/VectorComponent.java b/src/main/java/fr/takima/lotka_volterra/common/VectorComponent.java similarity index 80% rename from src/main/java/fr/takima/lotka_volterra/common/measure/VectorComponent.java rename to src/main/java/fr/takima/lotka_volterra/common/VectorComponent.java index 30bdc3c..71179bd 100644 --- a/src/main/java/fr/takima/lotka_volterra/common/measure/VectorComponent.java +++ b/src/main/java/fr/takima/lotka_volterra/common/VectorComponent.java @@ -1,4 +1,4 @@ -package fr.takima.lotka_volterra.common.measure; +package fr.takima.lotka_volterra.common; import fr.takima.lotka_volterra.validator.NotNullValidator; diff --git a/src/main/java/fr/takima/lotka_volterra/mating/DefaultPredatorMatingConfigurer.java b/src/main/java/fr/takima/lotka_volterra/mating/DefaultPredatorMatingConfigurer.java index 7ec8b5c..dbac6c6 100644 --- a/src/main/java/fr/takima/lotka_volterra/mating/DefaultPredatorMatingConfigurer.java +++ b/src/main/java/fr/takima/lotka_volterra/mating/DefaultPredatorMatingConfigurer.java @@ -1,7 +1,7 @@ package fr.takima.lotka_volterra.mating; -import fr.takima.lotka_volterra.common.measure.Probability; -import fr.takima.lotka_volterra.common.measure.Distance; +import fr.takima.lotka_volterra.common.Probability; +import fr.takima.lotka_volterra.common.Distance; import org.springframework.stereotype.Component; import java.math.BigDecimal; diff --git a/src/main/java/fr/takima/lotka_volterra/mating/DefaultPreyMatingConfigurer.java b/src/main/java/fr/takima/lotka_volterra/mating/DefaultPreyMatingConfigurer.java index b671d95..5fa22f8 100644 --- a/src/main/java/fr/takima/lotka_volterra/mating/DefaultPreyMatingConfigurer.java +++ b/src/main/java/fr/takima/lotka_volterra/mating/DefaultPreyMatingConfigurer.java @@ -1,7 +1,7 @@ package fr.takima.lotka_volterra.mating; -import fr.takima.lotka_volterra.common.measure.Probability; -import fr.takima.lotka_volterra.common.measure.Distance; +import fr.takima.lotka_volterra.common.Probability; +import fr.takima.lotka_volterra.common.Distance; import org.springframework.stereotype.Component; import java.math.BigDecimal; diff --git a/src/main/java/fr/takima/lotka_volterra/mating/MatingConfigurer.java b/src/main/java/fr/takima/lotka_volterra/mating/MatingConfigurer.java index aea7579..f5cb9ec 100644 --- a/src/main/java/fr/takima/lotka_volterra/mating/MatingConfigurer.java +++ b/src/main/java/fr/takima/lotka_volterra/mating/MatingConfigurer.java @@ -1,7 +1,7 @@ package fr.takima.lotka_volterra.mating; -import fr.takima.lotka_volterra.common.measure.Probability; -import fr.takima.lotka_volterra.common.measure.Distance; +import fr.takima.lotka_volterra.common.Probability; +import fr.takima.lotka_volterra.common.Distance; import java.util.Random; diff --git a/src/main/java/fr/takima/lotka_volterra/moving/DefaultPredatorMovingConfigurer.java b/src/main/java/fr/takima/lotka_volterra/moving/DefaultPredatorMovingConfigurer.java index d291f0a..46827a3 100644 --- a/src/main/java/fr/takima/lotka_volterra/moving/DefaultPredatorMovingConfigurer.java +++ b/src/main/java/fr/takima/lotka_volterra/moving/DefaultPredatorMovingConfigurer.java @@ -1,6 +1,6 @@ package fr.takima.lotka_volterra.moving; -import fr.takima.lotka_volterra.common.measure.Distance; +import fr.takima.lotka_volterra.common.Distance; import org.springframework.stereotype.Component; import java.util.Random; diff --git a/src/main/java/fr/takima/lotka_volterra/moving/DefaultPreyMovingConfigurer.java b/src/main/java/fr/takima/lotka_volterra/moving/DefaultPreyMovingConfigurer.java index 6c800b2..6730b98 100644 --- a/src/main/java/fr/takima/lotka_volterra/moving/DefaultPreyMovingConfigurer.java +++ b/src/main/java/fr/takima/lotka_volterra/moving/DefaultPreyMovingConfigurer.java @@ -1,6 +1,6 @@ package fr.takima.lotka_volterra.moving; -import fr.takima.lotka_volterra.common.measure.Distance; +import fr.takima.lotka_volterra.common.Distance; import org.springframework.stereotype.Component; import java.util.Random; diff --git a/src/main/java/fr/takima/lotka_volterra/moving/Moving.java b/src/main/java/fr/takima/lotka_volterra/moving/Moving.java index 9971985..08a55e4 100644 --- a/src/main/java/fr/takima/lotka_volterra/moving/Moving.java +++ b/src/main/java/fr/takima/lotka_volterra/moving/Moving.java @@ -1,8 +1,8 @@ package fr.takima.lotka_volterra.moving; -import fr.takima.lotka_volterra.common.measure.Angle; -import fr.takima.lotka_volterra.common.measure.Distance; -import fr.takima.lotka_volterra.common.measure.Vector; +import fr.takima.lotka_volterra.common.Angle; +import fr.takima.lotka_volterra.common.Distance; +import fr.takima.lotka_volterra.common.Vector; import fr.takima.lotka_volterra.validator.NotNullValidator; import java.util.HashSet; diff --git a/src/main/java/fr/takima/lotka_volterra/moving/MovingConfigurer.java b/src/main/java/fr/takima/lotka_volterra/moving/MovingConfigurer.java index da217e6..169d201 100644 --- a/src/main/java/fr/takima/lotka_volterra/moving/MovingConfigurer.java +++ b/src/main/java/fr/takima/lotka_volterra/moving/MovingConfigurer.java @@ -1,6 +1,6 @@ package fr.takima.lotka_volterra.moving; -import fr.takima.lotka_volterra.common.measure.Distance; +import fr.takima.lotka_volterra.common.Distance; import java.util.Random; diff --git a/src/main/java/fr/takima/lotka_volterra/moving/MovingEntity.java b/src/main/java/fr/takima/lotka_volterra/moving/MovingEntity.java index 2e0f4dd..8968c98 100644 --- a/src/main/java/fr/takima/lotka_volterra/moving/MovingEntity.java +++ b/src/main/java/fr/takima/lotka_volterra/moving/MovingEntity.java @@ -1,6 +1,6 @@ package fr.takima.lotka_volterra.moving; -import fr.takima.lotka_volterra.common.measure.Distance; +import fr.takima.lotka_volterra.common.Distance; public interface MovingEntity { diff --git a/src/main/java/fr/takima/lotka_volterra/moving/Position.java b/src/main/java/fr/takima/lotka_volterra/moving/Position.java index 00198ed..cf8c69d 100644 --- a/src/main/java/fr/takima/lotka_volterra/moving/Position.java +++ b/src/main/java/fr/takima/lotka_volterra/moving/Position.java @@ -1,7 +1,7 @@ package fr.takima.lotka_volterra.moving; -import fr.takima.lotka_volterra.common.measure.Distance; -import fr.takima.lotka_volterra.common.measure.Vector; +import fr.takima.lotka_volterra.common.Distance; +import fr.takima.lotka_volterra.common.Vector; import fr.takima.lotka_volterra.validator.NotNullValidator; import java.math.BigDecimal; diff --git a/src/main/java/fr/takima/lotka_volterra/moving/PositionComponent.java b/src/main/java/fr/takima/lotka_volterra/moving/PositionComponent.java index 722934e..2849e54 100644 --- a/src/main/java/fr/takima/lotka_volterra/moving/PositionComponent.java +++ b/src/main/java/fr/takima/lotka_volterra/moving/PositionComponent.java @@ -1,6 +1,6 @@ package fr.takima.lotka_volterra.moving; -import fr.takima.lotka_volterra.common.measure.VectorComponent; +import fr.takima.lotka_volterra.common.VectorComponent; import fr.takima.lotka_volterra.common.value.IntValue; import fr.takima.lotka_volterra.validator.GreaterThanValidator; import fr.takima.lotka_volterra.validator.LowerThanValidator; diff --git a/src/main/java/fr/takima/lotka_volterra/predation/DefaultPredationConfigurer.java b/src/main/java/fr/takima/lotka_volterra/predation/DefaultPredationConfigurer.java index 07124e2..f72bc80 100644 --- a/src/main/java/fr/takima/lotka_volterra/predation/DefaultPredationConfigurer.java +++ b/src/main/java/fr/takima/lotka_volterra/predation/DefaultPredationConfigurer.java @@ -1,7 +1,7 @@ package fr.takima.lotka_volterra.predation; -import fr.takima.lotka_volterra.common.measure.Probability; -import fr.takima.lotka_volterra.common.measure.Distance; +import fr.takima.lotka_volterra.common.Probability; +import fr.takima.lotka_volterra.common.Distance; import fr.takima.lotka_volterra.predator.Satiety; import org.springframework.stereotype.Component; diff --git a/src/main/java/fr/takima/lotka_volterra/predation/PredationConfigurer.java b/src/main/java/fr/takima/lotka_volterra/predation/PredationConfigurer.java index 36f939b..7c32142 100644 --- a/src/main/java/fr/takima/lotka_volterra/predation/PredationConfigurer.java +++ b/src/main/java/fr/takima/lotka_volterra/predation/PredationConfigurer.java @@ -1,7 +1,7 @@ package fr.takima.lotka_volterra.predation; -import fr.takima.lotka_volterra.common.measure.Probability; -import fr.takima.lotka_volterra.common.measure.Distance; +import fr.takima.lotka_volterra.common.Probability; +import fr.takima.lotka_volterra.common.Distance; import fr.takima.lotka_volterra.predator.Satiety; import java.util.Random; diff --git a/src/test/java/fr/takima/lotka_volterra/moving/MovingEntityTest.java b/src/test/java/fr/takima/lotka_volterra/moving/MovingEntityTest.java index 62cc56f..589105a 100644 --- a/src/test/java/fr/takima/lotka_volterra/moving/MovingEntityTest.java +++ b/src/test/java/fr/takima/lotka_volterra/moving/MovingEntityTest.java @@ -1,7 +1,7 @@ package fr.takima.lotka_volterra.moving; -import fr.takima.lotka_volterra.common.measure.Distance; +import fr.takima.lotka_volterra.common.Distance; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -- GitLab