IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Généalogie et consanguinité : traduction d'algorithme


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Agronome
    Inscrit en
    Novembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Agronome

    Informations forums :
    Inscription : Novembre 2017
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Généalogie et consanguinité : traduction d'algorithme
    Bonjour à tous,

    Je débute sous windev, avec la version Express. Ma base de Donées est en HyperFile Classic ( en gros , c'est un SGBD // SQL )

    Mon objectif est de développer un petit soft pour gérer les différents moutons (ou autres bestioles) entre voisins, l'idée maitresse étant de maitriser la consanguinité et la sélection de caractère.
    Tout se passe relativement bien, mais je coince sur l'algorithme de calcul de consanguinité...

    J'ai trouvé l'algorithme ICI. Mes maths sont un peu loin mais je comprends à peu près. Reste à le traduire en langage WD. Ma base de donnée est en HyperFileSQL Classic, la table d'enregistrement T des individus est de la forme Clé ID - Nom - Clé ID du père - Clé ID de la mère, ces deux dernières clés étant vides si inconnues.

    Le principe de l'algorithme est de construire d'abord l'arbre d'ascendance d'un individu, en remplaçant les parents successifs par un 0 si mâle et un 1 si femelle. On obtient alors un tableau d'ascendance avec des "mots" binaires représentant les "chemins". Si un ancêtre a plus de un mot, c'est un ancêtre commun aux parents direct d'où consanguinité.
    Pour simplifier le calcul, je pense à rajouter une colonne à T contenant un tableau, construit au fur et à mesure de l'entrée de nouveaux moutons, dont l’élément de base serait {Clé père, chemin mot binaire},{clé mère, chemin mot binaire}, chaque chemin s'ajoutant en préfixe à celui des parents successifs. La première génération étant "orpheline", les tableaux correspondants seront vides.

    Exemple avec E, fils de D(0) et C(1); C fille de A(0) et B(1)
    Initialement, on aurait
    Clé 1 - A - ¤ - ¤ - {¤,¤}
    Clé 2 - B - ¤ - ¤ - {¤,¤}
    Puis à la naissance de C et à l'achat de D,
    Clé 3 - C - 1 - 2 - {1,0}{2,1}
    Clé 4 - D - ¤ - ¤ - {¤,¤}
    Puis à la naissance de E
    Clé 5 - E - 4 - 3 - {4,0}{3,1}{1,10}{2,11} (10 et 11 sont les chemins allant de E à A et B)

    Si F né de E et B, on aura
    Clé 6 - F - 5 - 2 - {5,0}{4,00}{3,01}{1,010}{2,011}{2,1}

    Ce qui donne visuellement comme tableau d'ascendance pour F, avec B ancêtre commun:
    A 010
    B 011,0
    C 01
    D 00
    E 0
    F


    Premier problème: comment coder le rajout du nouveau chemin en préfixe lors de la naissance
    Deuxième problème: il faut éviter les doublons, c'est à dire que lorsqu'un individu parent a déjà été relevé dans l'ascendance, il ne faut pas continuer à rajouter le nouveau chemin aux ancêtre de cet individu sinon, tous les ancêtres de cet individu vont être augmentés alors que le calcul de la consanguinité doit s’arrêter à cet individu.
    Bref, si vous avez une piste, je suis preneur.

    Ceci est pour la création de l'ascendance. Il restera ensuite à extraire les ancêtres communs puis à calculer la consanguinité. L'algorithme complet, avec un arbre plus fourni et des explications surement moins obscures, est dans le doc en lien plus haut.

    Merci pour l'aide!

  2. #2
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    Je ne vois pas trop pourquoi tu différencie les mâles des femelles (0; 1) puisque de toutes façons il faut obligatoirement mâle et femelle pour faire un petit.
    Perso, je ferais avec des chaînes contenant les ascendants et en numérotant les moutons
    Avec 10 moutons, ça pourrait donner:
    10 fils ou fille (sans importance) de 9 et de 8; noté 10="9 8"
    Si 9 fils ou fille de 6 et 7 et 8 fils ou fille de 4 et 5 --> 10="9 8 6 7 4 5"
    Pour les consanguinités il suffit de comparer les chaînes.
    Si on veut différencier mâles et femelles il suffit d'ajouter "m" ou "f" au numéro, et on peut ainsi ajouter autant de caractéristiques codifiées que l'on veut; un intercalement chiffres-lettres servant de tokens de lecture.
    Montre un bout de la table des moutons.
    Savoir pour comprendre et vice versa.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Le document est un peu compliqué.
    Déjà une question, tu travailles sur quel volume de données (combien d'individus, sur combien de génération environ) ; Et as-tu des besoins de performance important. Si un programme calcule un taux de consanguinité pour un mouton en 20 minutes, est-ce que c'est bloquant ?

    Maintenant, revenons au problème lui-même.
    J'avais vaguement lu des trucs sur les taux de consanguinités il y a quelques années. Le souvenir que j'en ai, c'est : On cible une génération donnée. Par exemple la génération n-7.
    Pour un individu donné, dans la génération n-1, on a 2 individus.
    Dans la génération n-2, on a (théoriquement) 4 individus
    pour n-3 --> théoriquement 8 individus
    pour n-4 --> théoriquement 16 individus
    pour n-5 --> théoriquement 32 individus
    pour n-6 --> théoriquement 64 individus
    pour n-7 --> théoriquement 128 individus

    Si en remontant mon arbre généalogique sur 7 générations, j'ai 128 personnes différentes, mon taux de consanguinité est de 0, et si j'ai n individus différents, mon taux de consanguinité est de (128-n)/128.
    Avec quand même une grosse amélioration à apporter à ceci. Peut-être que en remontant de 7 générations, je tombe sur X individus différents, mais en fait parmi les X personnes en question, il y en a quelques unes présentes aussi dans le sous arbre de niveau n-6.
    Illustration : du coté de mon père , mon père avait 30 ans quand je suis né, son père à lui avait 30 ans quand mon père est né, etc etc .
    Et du côté de ma mère, elle avait 25 ans quand je suis né ; sa mère à elle avait 25 ans quand elle est née etc etc..
    Et donc en remontant de 7 générations du coté de ma mère on tombe sur une personne née vers 1810, et en remontant de seulement 6 générations du côté de mon père, on tombe aussi sur une personne née vers 1810. Et peut-être qu'on tombe sur la même personne.

    Il faut donc rectifier le calcul précédent, en prenant ce phénomène en compte.

    C'est ma vision de la question de la consanguinité. Dans le document que tu as donné, c'est peut-être aussi cette approche.... mais ça ne saute pas aux yeux. Ou j'ai lu de façon trop superficielle, c'est très possible.

    Si ma vision est celle que tu veux mettre en place, il reste 2 ou 3 points à définir, et on peut se mettre au boulot.
    Si j'ai tout faux... il faut que tu exprimes (en français, sans termes mathématiques) ta compréhension du problème.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Généalogie et consanguinité : traduction d'algorithme
    Bonjour,

    tbc92 a pointé les difficultés liées à l'augmentation exponentielle du nombre d'ascendants, et à l'éventuel décalage temporel à l'intérieur d'une même génération.
    Et l'examen de toutes les variétés du cousinage est de nature à donner des sueurs froides au programmeur désireux de quantifier la proximité de deux individus.

    Un moyen d'y voir plus clair est de se demander: sur combien de générations est-il pertinent de remonter, pour déterminer un taux de consanguinité non nul ? Faut-il aller au-delà de la 3me génération, c. à d. des arrière-grands-parents)?

    Le plus simple est d'attribuer à chaque individu la liste de ses ascendants biologiques sur un nombre modéré de générations (3 ou 4 ?):
    L = 1, 2 (parents), 3, 4, 5 , 6 (grands-parents), 7, 8, 9, 10, 11, 12, 13, 14 (arrières-grands-parents) ...
    ce qui conduira, pour deux individus donnés d'indices respectifs (i, j)
    à relever les éventuels termes communs dans les deux listes: (L[i, p], L[j, n]) ,
    et à augmenter leur indice de consanguinité mutuelle Ic(i, j) de la quantité Nc(m, n) = F(m) + F(n)
    après avoir par exemple convenu: F(k) = 8 (pour k = 1 ou 2) ; F(k) = 4 (pour 3 <= k <=6) ; F(k) = 2 (pour 7 <= k <= 14) etc.

    La comparaison terme à terme de deux listes de dimension 14 ou 30 reste accessible dans un temps très court.
    L'indice maximal sur quatre générations serait: Icmax = 8*2 + 4*4 + 2*8 + 1*16 = 64 .
    L'inventaire pourrait être abrégé dans la mesure où dès que l'on repère deux ascendants identiques, les ascendants ultérieurs le sont aussi; cela obligerait toutefois à concevoir une fonction G(m, n) plus compliquée.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  5. #5
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    Il semble que le généalogiste se soit perdu dans la montagne avec ses moutons.
    Dommage, le truc pouvait se faire en deux coups de cuillère à pot.
    Savoir pour comprendre et vice versa.

  6. #6
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Généalogie et consanguinité : traduction d'algorithme
    Le calcul de (Ic) est sans doute perfectible, et c'est l'examen de cas particuliers qui permettra d'y parvenir.

    On peut aussi envisager la distance minimale (exprimée en nombres de générations) des individus comparés au premier ancêtre commun, ce qui serait l'équivalent d'un logarithme. À examiner, donc, de la même façon.

    En consultant le lien fourni par Gyamotab, il semble nécessaire (si j'ai bien compris) de définir les liens d'ascendance sur tous les individus présents et passés, en remontant jusqu'aux ancêtres fondateurs - et c'est une affaire autrement plus complexe.
    On comprend la motivation de l'éleveur, qui cherche à perfectionner ou répandre un caractère intéressant.
    La création d'une arborescence apparaissait déjà utile; elle s'impose désormais, si le projet se confirme.

    PS:
    Citation Envoyé par valentin03 Voir le message
    Il semble que le généalogiste se soit perdu dans la montagne avec ses moutons ...
    Ça, c'est bien possible , mais la liste que je propose ressemble beaucoup à la tienne ...
    Citation Envoyé par valentin03 Voir le message
    ... Dommage, le truc pouvait se faire en deux coups de cuillère à pot.
    Là, j'en doute un peu, car c'est l'archivage de tous liens de parenté qui constitue malheureusement le gros du travail.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  7. #7
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Généalogie et consanguinité : traduction d'algorithme
    Je crois qu'il faut équiper le programme de la structure la plus légère, mais permettant de remonter à volonté aux ascendants les plus éloignés.
    Deux solutions:

    1) Un tableau unidimensionnel d'enregistrements, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CONST NmaxM = 1500;                    // Effectif maximal du troupeau
    TYPE Animal = RECORD  Sexe: BOOLEAN; Ascend_0, Ascend_1: Word  END;
    TYPE LstM = ARRAY[1..NmaxM] OF Animal;
     
    VAR Liste: LstM
    dont chaque terme peut être affecté de données supplémentaires, tels que le nom (au format String[10]) et la date de naissance - sous une forme appropriée (jjmmaaaa).
    Les ancêtres fondateurs se singulariseraient par l'absence de parents: Ascend_0 = Ascend_1 = 0 .

    2) Une chaîne ramifiée, dont chaque noeud comporte deux pointeurs désignant le père et la mère, et qui permettrait probablement des calculs plus rapides.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CONST NmaxM = 1500;
     
    TYPE P_Anim = ^Point;
         Point = RECORD  Sexe: BOOLEAN; 
                         Ascend_0, Ascend_1: P_Anim  END;
         LstP = ARRAY[1..NmaxP)] OF P_Anim;
     
    VAR Liste: LstP
    Après initialisation de la variable (tâche assez lourde !) on verrait mieux ce qui faut chercher. Je crois que ce que j'ai proposé auparavant peut être repris, moyennant adaptation.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  8. #8
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    @: wiwaxia: Perso, je suis parti avec trois couples fondateurs et avec des chaînes, sans distinction mâle-femelle; je m'attendais à une croissance exponentielle des soucis, et bien pas du tout; car quand une consanguinité a été trouvée, on peut éliminer ses doublons, en numérotant les moutons dans leur ordre de naissance, on a directement le degré (distance).
    Il serait intéressant de calculer (pc) la fonction qui lie le degré (occurrences) de consanguinité aux nombre de couples initiaux ou à la durée de fécondité.
    J'en suis à 126 lignes; au diable l'avarice.. ça tourne (sans la suppression ni l'ajout et sans tri. mais sur fond coloré.
    Pour aller plus loin il faudrait avoir le format et le volume de la base et les volontés du généalogiste (Cahier des charges) le pdf ne m'a inspiré que perplexité.
    Savoir pour comprendre et vice versa.

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    la liste est un peu redondante et pour moi ne sert à rien vu qu'avec l'enregistrement tu peut
    créer un arbre (ou graphe)
    d’après se que je comprend les feuilles solitaire ne nous intéresse que très peu ou pas du tout
    quand je lis dans le pdf tout ceci est sujet aux règle de arbre binaire ce qui simplifie les recherche
    0 1
    00 01 11 10
    000 001 011 010 110 111 101 100
    ....
    on approfondissant le raisonnement on comprend très vite que les mâle sont paire et les femelle impaire ou inversement selon le choix du départ
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  10. #10
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Généalogie et consanguinité : traduction d'algorithme
    L'algorithmique est une chose, la génétique en est une autre.
    Il faut que Gyamotab nous dise clairement ce qu'il entend par taux de consanguinité.

    De nombreuse références fournissent des méthodes de calcul, souvent bien expliquées.
    Elles font intervenir (j'en avais parlé) la notion de distance générationnelle et l'exponentielle binaire (2-d); cela vient de ce qu'à chaque génération, l'un des parents ne transmet que la moitié de son patrimoine génétique.

    Le problème est beaucoup plus compliqué pour un éleveur, dans la mesure où interviennent des caractères dominants ou récessifs, ou une transmission exclusive par le père (ou la mère) ... Mais là, je me retrouve en zone inconnue.

    https://fr.wikipedia.org/wiki/Consanguinit%C3%A9

    http://www.haras-nationaux.fr/information/accueil-equipaedia/genetique-caracterisation/diversite-genetique/coefficient-de-consanguinite.html?L=0

    http://www.agorat.org/articles/M%C3%A9thode_de_calcul_du_taux_de_consanguinit%C3%A9

    http://www.agorat.org/extras/calculateur_consanguinite

    http://www.agroparistech.fr/svs/genere/uvf/GP/Phi/calcul0.htm

    http://www.braquedubourbonnais.info/fr/calcul-consanguinite.htm

    http://www.braquedelariege.fr/race/genetique/page3.html


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Agronome
    Inscrit en
    Novembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Agronome

    Informations forums :
    Inscription : Novembre 2017
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Dsl à tous, c'est que non seulement je me lance dans " l'élevage" ovin - disons plutôt qu'on va profiter entre voisins de nos "tondeuses" pour faire perdurer le "troupeau" - mais je suis en même temps marin et internet est très aléatoire. Je suis au large de la Hollande en ce moment

    Nous serons loin d'une sélection via caractères récessif ou dominant, ce sera plus sur le mode sélection de masse (pour les plantes: on plante toutes les graines et on sélectionne les meilleures et on recommence pendant 20 ans). Ce qui nous intéresse est plutôt de profiter d'avoir chacun mâle et femelle d'origines différentes (donc moins consanguin même si l'espèce, du Cameroun, est forcément issu d'individus limités mais pour ceux que cela intéresse, cette consanguinité se dilue dans le temps du fait des mutations: les européens proviennent à priori d'un groupe de 10 hommes d'après les dernières trouvailles!)
    Du coup, nous cherchons à limiter la consanguinité avant de s’intéresser à la sélection, pour éviter d'avoir à racheter des mâles même si cela sera inévitable (il faut à priori 12 mâles différents pour s'affranchir de cette problématique dixit les éleveurs). Au minimum, nous devons travailler sur 8 générations à terme (soit dans 4-5 ans)

    Concernant le volume de données, c'est au départ 4 mâles en pâturages/propriétaires distincts et suivant le cas, de une à 3 femelles. Comme base de départ, je pensais partir sur 4 mâles et 3 femelles chacun. Reste aussi que la majorité vont passer à la casserole - les plus consanguins pour le coup, limitant d'autant le volume.

    wiwaxia a raison, la base des calculs est bien la distance générationnelle en "montant" du père vers l’ancêtre commun et en redescendant vers la mère.

    Je pars donc sur une base sql pour profiter du soft que je développe sous windev pour y inclure le suivi sanitaire, les dates de naissance, poids etc. C'est donc sur cette base que je vais travailler, avec dans l'idée initiale, quand un agneau arrive, d'y inscrire le nom du père et de la mère et d'avoir un calcul automatique de sa consanguinité. Si le soft doit tourner 1h en fin de saison de "lutte" comme on dit, ce n'est pas grave mais vu le volume de données, je pense que ce sera plus rapide.

    J'étais parti comme valentin03, avec des variables de la forme ACDEBGAH, fils de ACDE et BGAH et en ne travaillant que sur les chaines de caractères, mais très vite, je fais face à des doublons d'ancêtre "au deuxième degré", c'est à dire des ancêtres commun à des ancêtres commun. Du coup, les chemins sont comptés deux voire trois fois et plombe le résultat de consanguinité.

    Du coup, je suis parti sur l'idée d'une variable sql contenant un tableau unidimensionnel (merci pour le terme wiwaxia!) reprenant toute la généalogie de chaque individu. Sauf qu'avec mes connaissances limités, je n'arrive pas à coder la création d'un tel tableau et encore moins à voir comment extraire la consanguinité en ne comptant qu'une fois les ancêtres commun.

    Bref, en tout cas, merci du coup de main, je vais prendre le temps de regarder chacune de vos propositions.

    Prochaine connexion peut être demain en Allemagne, sinon, ce sera lundi en France...

  12. #12
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    @: Gyamotab: Si tu es sous Windows il y a là un petit exe en zip tout en chaînes avec quelques imperfections
    Sous réserve que le lien fonctionne; rien à installer:
    https://www.mediafire.com/file/45boo.../Moutons2b.zip
    Savoir pour comprendre et vice versa.

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Agronome
    Inscrit en
    Novembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Agronome

    Informations forums :
    Inscription : Novembre 2017
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci Valentin03. Toutes vos réponses m'ont amener à trouver une solution intéressante. Je vais essayer de la présenter clairement:

    1-Effectivement, mâle/femelle n'a pas grand intérêt.
    2-Au contraire du document initial que j'avais mis en lien, je connais les ancêtres plus facilement et ils sont limités donc à priori, partir sur un tableau reste raisonnable.

    En créant un tableau avec les parents en ordonnée et les individus en abscisse, on peut recréer l'arbre généalogique de chaque individu en attribuant le degré de génération à chaque parent.
    Lorsqu'un individu a un enfant, il est ajouté à la liste.

    Un schéma valant mieux qu'un long discours, voici l'arbre sur lequel j'ai effectué mes tests:
    Nom : Arbre géné.jpg
Affichages : 1705
Taille : 289,9 Ko

    Voici le tableau partiel:
    Individus 34 23 22 26 33
    1 3 23
    2 3 23
    3 3
    4 3
    5 22 333 23
    6 22 333 23
    7 12 2
    8 2 2
    9 1
    10
    11
    12
    13 2
    14 2
    15 1 2 2
    16 1 2 12
    17 1 1
    18
    19
    20
    21 1
    22 1 1

    Comment lire?
    Pour 34, les parents directs sont 7 et 17 donc 1.
    Les grands parents sont ceux de 17, 7 et 8 donc 2. 7 étant un des originaux, le calcul s'arrête forcément à lui sur cette branche. On continue sur l'autre avec les arrières grands parents 1 et 2 qui prennent 3.

    Niveau calcul:

    Théorique:
    Chemin père vers ancêtre commun = 0
    Chemin mère vers ancêtre commun = 1 (17-7)
    La consanguinité est alors (1/2)0+1+1=1/2

    Dans le tableau:
    On ne considère que les cases possédant plus de 1 indice, qui représentent les ancêtres commun et on retire à chaque fois 1 à chaque indice (représentant le premier lien entre l'individu et son parent direct) puis on additionne et +1 comme dans la formule théorique.
    Pour 34, ça donne (1/2)(1-1)+(2-1)+1=1/2

    En procédant de même pour 23:
    (1/2)(2-1)+(3-1)+1+(1/2)(2-1)+(3-1)+1=2x(1/2)4=1/8

    Pour 26, en théorie, c'est 4x(1/2)2+2+1 (21-14-5 puis 5-15-22)
    (1/2)(3-1)+(3-1)+(3-1)+1+(1/2)(3-1)+(3-1)+(3-1)+1=2x(1/2)7=1/64 et là, ça marche pas...parce que cela ne représente pas les chemins exacts. Il y a normalement 4 chemins (1/2)5. Comment les retrouver dans le couple (5,333) & (6,333)?
    Si je pars du postulat que je forme des "doubles" par ancêtre commun, ça fait 5: 33 & 3, idem pour 6 et que pour les impairs seuls, on double fictivement ce terme, ça fonctionne...car le chemin de montée (21-14-5 ou 6) est commun au deux descentes.
    En gros, on transforme 333 par 3333.

    Reste les plus compliqués, 27, 28, 30 & 31....
    27:
    24-18-10-3-12-19-25 => (1/2)7
    24-18-10-4-12-19-25 => (1/2)7
    24-18-10-3-13-20-25 => (1/2)7
    24-18-10-4-13-20-25 => (1/2)7
    24-11-19-25 => (1/2)4
    Donc 4x(1/2)7 + (1/2)4=3/32

    Par le tableau, ça donne:
    11(23): (1/2)(2-1)+(3-1)+1
    3(444): 2x(1/2)3+3+1
    4(444): 2x(1/2)3+3+1
    Ça colle

    28 (Là, je colle l'arbre simplifié):
    Nom : Arbre géné partie.jpg
Affichages : 1220
Taille : 124,0 Ko
    25-19-12-3-13-21-26 => (1/2)7
    25-19-12-4-13-21-26 => (1/2)7
    25-20-14-5-15-22-26 => (1/2)7
    25-20-14-6-15-22-26 => (1/2)7
    25-20-14-5-16-22-26 => (1/2)7
    25-20-14-6-16-22-26 => (1/2)7
    25-20-13-21-26 => (1/2)5
    25-20-14-21-26 => (1/2)5
    Donc 6x(1/2)7+2x(1/2)5=7/64

    Par le tableau:
    13(33) & 14(33): 2x(1/2)2+2+1
    5 & 6 (4444): 4x(1/2)3+3+1 (on coupe en 44 & 44)
    3 & 4 (444): si je fais comme pour 27, j'aurais 4x(1/2)3+3+1 soit 8x(1/2)3+3+1 au lieu de 6....

    Pour 30, c'est pire, 5 & 6 comportent plusieurs indices provenant des branches dont est issu 28, parent de 30 (555) mais n'ont absolument pas à être comptés dans le calcul de consanguinité car aucun lien avec la branche amenant à 18....

    Bref, si vous avez réussi à lire jusque là...j'ai peur que ce soit chou blanc.
    Je reste persuadé que la présentation en tableau de cette façon peut amener à trouver le bon algorithme, reste à trouver quels indices choisir, où doit s'arrêter le calcul et la bonne formule.

  14. #14
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    Avec ton système, tu es obligé de: Soit affecter chaque nouveau mouton de sa lignée; soit de faire une analyse complexe du tableau pour retrouver la lignée; car sur le papier tu a le tableau sous les yeux, mais sauf à en faire une représentation graphique, dans le pc, le tableau, il est virtuel.
    En chaîne, le mouton est affecté de sa lignée dès sa conception puisque la lignée des parents est enchaînée et il n'y a besoin d'aucune analyse
    A-tu jeté un oeil à l'exe (Windows) dont je t'ai mis le lien plus haut ? (codé "au fil de l'eau" sans plan ni structure en simili-pseudo code (notice en menu))
    Savoir pour comprendre et vice versa.

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Agronome
    Inscrit en
    Novembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Agronome

    Informations forums :
    Inscription : Novembre 2017
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    J'ai regardé le soft. Il y a effectivement toute la lignée mais le problème est alors de savoir où "couper" car il n'y a pas d'indication générationnelle. Tu me diras, il suffit de la rajouter.

    J'ai construit le tableau pour essayer de trouver une pattern dans les calculs car finalement, on peut aussi utiliser le même système et obtenir la lignée dès la naissance en ne conservant que la colonne de l'individu car dans tous les cas, chaîne ou pas, il faudra une analyse pour trouver les différents chemins. Du coup, à la naissance, on se retrouve avec un tableau à une ligne.

    Mais je me dis que je ne cherche pas à avoir un calcul parfait, seule l'information finale m’intéresse: est ce que l'accouplement restreint la diversité génétique ou pas?En appliquant la méthode décrite dans le tableau (addition des "doublons" d'indices) à tous, le calcul sera parfois faux mais il donne une image de la consanguinité. Au passage, il peut donner une idée de cette fameuse diversité et des origines génétiques si on n'additionne pas les termes finaux.

    Par ex, pour 26: {21,1}{22,1}{13,2}{14,2}{15,2}{16,2}{3,3}{4,3}{5,333}{6,333} On pourrait d'ailleurs simplifier la chaîne en ne conservant que les termes avec plus d'un indice mais du coup, on perd la construction "automatique" de l'ascendance à la naissance.

    Si 26 fait un agneau X avec 22, le calcul serait:
    22={15,1}{16,1}{5,22}{6,22}
    X={22,12}{26,1}{21,2}{13,3}{14,3}{15,32}{16,32}{3,4}{4,4}{5,44433}{6,44433}

    En calcul, ça donne
    22: (1/2)0+1+1
    15 & 16: 2x(1/2)2+1+1
    5 & 6: 2x(1/2)3+3+1+2x(1/2)3+2+1+2x(1/2)2+2(fictif)+1
    soit (1/2)2+2x(1/2)4+2x(1/2)7+2x(1/2)6+2x(1/2)5=31/64 (0.484375)

    En théorie, on devrait avoir 5/16 (0.3125). La même problématique se pose en cas de chaîne de caractères comme dans le logiciel. Dans les deux cas, je n'arrive pas à trouver de condition de ségrégation des ancêtres communs à inclure ou non dans le calcul.

    Je viens de tomber sur une formule de calcul dans le cas où un ancêtre commun est lui même consanguin. Je vais regarder de ce coté car c'est ce qui fait buguer le calcul. La formule, c'est Cinduite par l'ancêtre(1+Cancêtre).

  16. #16
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Généalogie et consanguinité : traduction d'algorithme
    Que d'encombrement inutile! 30 individus mentionnés dans l'extrait du tableau fourni, comportant 22 lignes et 5 colonnes, soit un taux de remplissage égal à 30/110 = 27% ! Et c'est probablement pire pour le tableau complet ...

    La liste des individus inscrits selon l'ordre chronologique de la date de naissance, réduite à la mention des ascendants directs (0 pour le père, 1 pour la mère), occuperait un espace mémoire bien moindre et pourrait jouer le même rôle central quand à la recherche des parents et au calcul du taux de consanguinité : une variable tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VAR Liste_Asc: ARRAY[1..N, 0..1] OF Word;
    se réduirait à (2*N) éléments, tandis que la matrice que tu proposes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VAR Mat_Asc: ARRAY[1..N, 1..N) OF Word;
    en comporterait (N2) ... De fait, je me répète (# 7).

    Deux remarques concernant les difficultés que tu évoques:
    Citation Envoyé par Gyamotab Voir le message
    J'ai regardé le soft. Il y a effectivement toute la lignée mais le problème est alors de savoir où "couper" car il n'y a pas d'indication générationnelle ...

    En théorie, on devrait avoir 5/16 (0.3125). La même problématique se pose en cas de chaîne de caractères comme dans le logiciel. Dans les deux cas, je n'arrive pas à trouver de condition de ségrégation des ancêtres communs à inclure ou non dans le calcul.

    Je viens de tomber sur une formule de calcul dans le cas où un ancêtre commun est lui même consanguin. Je vais regarder de ce coté car c'est ce qui fait buguer le calcul. La formule, c'est Cinduite par l'ancêtre(1+Cancêtre).
    1) Les nombres d'ascendants et de générations sont nécessairement finis, puisque tout provient du cheptel initial.
    2) Il suffit d'ajouter (1/2g1 + 1/2g2 + ... + 1/2gk) pour tout ascendant commun rencontré (k) fois sur des branches indépendantes de l'arbre complet - sans avoir à remonter plus loin (gi > 0 représente l'écart générationnel).


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  17. #17
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    Avec les chaînes on peut rechercher par comparaison les ancêtres communs des parents et les dénombrer.
    Le N° du mouton Modulo n fondateurs doit être exploitable; à creuser....
    Ce que je vais faire de ce pas en ce Dimanche de soleil neigeux.
    Savoir pour comprendre et vice versa.

  18. #18
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Prenons une configuration de ce type : A est fils de A2 A3, qui étaient frère et soeur.
    B est fille de B2 et B3, qui étaient oncle et nièce.
    A a donc un très fort passif consanguin, ainsi que B. Mais Il n'y a aucune connexion connue entre la branche (A,A2, A3) et la branche (B,B2,B3). On va donc dire que le fils de A et B n'a aucun passif consanguin. Est-ce voulu ?

    Autre point, quand un animal est de parents inconnus, il est considéré comme totalement neutre ( ou plutôt comme totalement étranger : moins on sait de choses, plus on a des chances d'annoncer un taux de consanguinité proche de 0. C'est un peu gênant, est-ce voulu ?

    Autre point assez similaire : quand ta base sera montée, tu vas avoir à terme des informations de plus en plus poussées, tu pourras remonter à 7 générations, puis 8 puis 9 ... et donc, pour des configurations totalement similaires, tu trouves 7/64 aujourd'hui, et tu trouveras 20/128 ou 25/128 demain, parce que tu seras en mesure de remonter plus loin. Est-ce voulu ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Agronome
    Inscrit en
    Novembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Agronome

    Informations forums :
    Inscription : Novembre 2017
    Messages : 6
    Points : 1
    Points
    1
    Par défaut

    Citation Envoyé par tbc92 Voir le message
    On va donc dire que le fils de A et B n'a aucun passif consanguin. Est-ce voulu ?
    En fait oui dans un premier temps. Le fiston a ainsi moins de chances d'avoir un gène récessif non voulu qui s'exprime aka de subir une dégénérescence accélérée.
    Et non à terme car il serait également intéressant de connaître le pourcentage de chaque ancêtre dans chaque individu, pour faire de la sélection. Mais là, le calcul est trivial: il suffit de remonter à tous les ancêtres de niveau 0 puis de redescendre en divisant par deux à chaque fois.[/QUOTE]

    Citation Envoyé par tbc92 Voir le message
    Autre point, quand un animal est de parents inconnus, il est considéré comme totalement neutre [...] C'est un peu gênant, est-ce voulu ?
    Pas trop le choix à ce niveau. Après, les animaux de départ viennent tous d'élevage différents même si la souche européenne initiale du mouton du Cameroun est assez restreinte. Avec le temps et la multiplication des individus (et des mutations), la consanguinité se dilue. L'exemple type est l'origine de Sapiens en Europe: à priori, un groupe d'une dizaine d'individus.
    Sans compter les quelques mélanges avec d'autres espèces d'ovins, à éviter mais on ne sait jamais sauf si les moutons viennent d'élevages pros.

    Citation Envoyé par tbc92 Voir le message
    Autre point assez similaire : quand ta base sera montée, tu vas avoir à terme des informations de plus en plus poussées, tu pourras remonter à 7 générations, puis 8 puis 9 ... et donc, pour des configurations totalement similaires, tu trouves 7/64 aujourd'hui, et tu trouveras 20/128 ou 25/128 demain, parce que tu seras en mesure de remonter plus loin. Est-ce voulu ?
    C'est bien le problème. Ca rejoint ta première remarque: on distingue la consanguinité (la probabilité qu'un mouton a de porter la même allèle issue du même ancêtre) que je cherche au mieux à calculer sinon à estimer, d'une sorte de pourcentage de patrimoine génétique.
    Même à 15 génération, l'agneau d'un frère et d'une soeur devrait avoir une consanguinité initiale de 1/4. Si les dit frangins sont eux mêmes consanguins, c'est (1/2)3x(1+Cfrère)+(1/2)3x(1+Csoeur)
    Voir là: Cas d'un ancêtre commun dont le coefficient de consanguinité est non nul

    Citation Envoyé par wiwaxia Voir le message
    une variable tableau
    C'est ce que j'indique: j'ai construit le tableau (en espérant ne pas avoir fait d'erreurs!) pour essayer de trouver une formule de calcul mais j'ai bien l'idée d'utiliser une variable tableau (une ligne?) par individu, qui contient juste l'arbre direct. Je remplace juste le 0 ou 1 du sexe (valentin03 disait plus haut que mâle ou femelle avait peu d'importance et je suis assez d'accord) par le degré de génération.

    Citation Envoyé par wiwaxia Voir le message
    Il suffit d'ajouter (1/2g1 + 1/2g2 + ... + 1/2gk) pour tout ascendant commun rencontré (k) fois sur des branches indépendantes de l'arbre complet - sans avoir à remonter plus loin (gi > 0 représente l'écart générationnel).
    Je jete un oeil à ça D'ailleurs, gi ne serait il pas mon "degré de génération"?

    J'essaye de trouver comment ils calculent chez Agorat, mais je ne trouve pas. Je mets un mot sur leur forum

  20. #20
    Nouveau Candidat au Club
    Homme Profil pro
    Agronome
    Inscrit en
    Novembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Agronome

    Informations forums :
    Inscription : Novembre 2017
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bon, finalement, je pense qu'on fait fausse route si on tente de programmer la "méthode par chemins". Cela est bien expliqué sur vigies-pirates, page 79 & suivantes.
    Il semble nécessaire d'en passer par la méthode dite tabulaire et donc (dsl wiwaxia) par un tableau rempli à moitié de taille carrée par rapport au nombre d'individus
    Chaque case est un calcul et donne 10 calculs avec 4 individus...
    Page 106, on attaque le domaine des formules de math et des récurrences matricielles... Je pense que je vais devoir m'y plonger si je veux faire quelque chose de propre.

    *edit:
    L’établissement des formules de récurrence est assez laborieux, et la programmation de l’ensemble (recherche des valeurs propres de la matrice-compagne, etc.) demande un peu plus de travail, pour un résultat pas forcément très utile en pratique,
    puisqu’il y a peu de chances que l’on souhaite réellement produire plusieurs dizaines de générations de suite sans jamais faire aucun changement et sans aucun accident.
    Ce document propose une méthode de repro pour maitriser la consanguinité. C'est pour des rats mais c'est adaptable au mouton avec des ajustement de temps (périodes de maturité sexuelle, etc) et surtout, nous sommes 4 propriétaires, ce qui colle au schéma

Discussions similaires

  1. [XL-2010] Traduction d'algorithme en VBA
    Par enold dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/06/2014, 09h09
  2. [Débutant] Traduction d'algorithme en code
    Par raja_louhichi dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/04/2014, 10h22
  3. la traduction d' algorithme palindrome sur java
    Par yusuf islam dans le forum Général Java
    Réponses: 2
    Dernier message: 04/12/2009, 15h24
  4. probleme traduction d'algorithme de tri
    Par flyzi dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 24/02/2009, 17h51
  5. Traduction d'algorithme en Pascal : calculer x^k
    Par Zac EFRON dans le forum Pascal
    Réponses: 6
    Dernier message: 08/12/2008, 00h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo