mardi 10 décembre 2013

ammonites : chronologie et taux de croissances

Résumé


Ammonites liasiques : temps géologiques correspondant et calcul de taux de croissance de Pleuroceras spinatum et Harpoceras falciferum
  • Cheminement de l'esprit
  • Carte géologique retrouvée
  • Ammonites retrouvées
  • Temps géologiques
  • Quid de wikipedia ?
  • Marqueur stratigraphique
  • Taxonomie de quelques ammonites
  • Echelle des temps géologiques
  • Modélisation de quelques ammonites

Carte géologiqe

Tout a commencé ce week-end d'hiver où j'ai retrouvé une vieille et poussièreuse carte géologique Thionville-Waldwisse et sa notice explicative ( http://ficheinfoterre.brgm.fr/Notices/0114N.pdf ) et où plein de vieux besoins ou de vieilles envies sont maintenant devenues possibles du fait de la technologie.
Ah, chère collection de fossiles, surtout des ammonites du Carixien et de l'Hettangien ( http://fr.wikipedia.org/wiki/Pliensbachien ), après tout, c'est un peu normal, Thionville est à côté d'Hettange-Grande, lieu de référence du niveau, mais je m'avance un peu sur les conclusions stratigraphiques.

Temps géologiques

Mais de quand datent tous ces fossiles issus de strates notées I3a-2 à I5d ? Et à quoi correspondent ces strates ?
On peut lire : l5 : Carixien l3-4 : Sinémurien (calcaires en dalles, calcaires à silex) l1-2 : Hettangien (roches carbonatées vacuolaires : dolomies, marnes et calcaires).
Les fossiles datent donc du jurassique inférieur ( lias ), plus particulièrement du carixien.

Wikipedia: du choix dans les dates

Bon, mais qu'en est-il des dates ?
Vu ici : http://fr.wikipedia.org/wiki/Pliensbachien le Plienbaschien dura de -190 à -182 millions d'années
Et pour cette période, les écarts ne sont que d'un seul million d'années.
Un petit tour sur tous les étages géologiques vous confortera qu'il y a un delta de quelques millions ( d'années ) entre les versions anglaises et françaises de Wikipedia, et ce n'est pas pour une question de taux de change. Espérons que les couleurs des différents ages sont bien ceux reconnus par les conventions internationales, elles sont reprises plus loin.

Ammonite : marqueur stratigraphique

Oui, oui, c'est bien connu, les ammonites sont de bons marqueurs stratigraphiques, mais qu'en est-il exactement ici ? Que dit la notice associée à la carte géologique ?
Le I, premier caractère des strates veut dire Lias ( jurassique inférieur ), les niveaux en 5 sont récents, ceux en 3 voire 2, plus anciens.
Du plus récent au plus ancien :
I5d ( Toarcien supérieur )
  • Grammoceras fallaciatum
  • Harpoceras insigne et dispansum
  • Lytoceras jurense
I5c
  • Harpoceras striatulum
  • Lytoceras jurense ( encore )
  • Hildoceras bifrons ( une grande classique )
  • Coeloceras crassum
I5b
  • Hildoceras bifrons ( encore ) et boreale
  • Coeloceras commune
I5a ( toarcien inférieur )
  • Harpoceras falciferum et serpentinum ( voir modélisation en fin d'article )
  • Coeloceras commune ( encore )
I4c ( domérien )
  • Pleuroceras spinatum ( voir modélisation en fin d'article )
I4b ( domérien )
  • Amaltheus margaritatus ( un grande classique )
  • Lytoceras fimbriatum
I4-3 ( veut dire que la strate contient du I4 et du I3 )
  • Echioceras raricostatum
  • Promicroceras planicosta
  • Lytoceras fimbriatum
  • Prodactylioceras davoei
  • Nautilus intermedius ( celui-là a survécu jusqu'à nos jours )
  • Uptonia jamesoni
  • Oxynoticeras oxynatum
I3b
I3a-2 ( de I3a à I2 : Sinémurien + Héttangien supérieur, premier étage du jurassique )
  • Arietites bisulcatus ( plutôt pauvre en diversification d'ammonites pour du I3a-2 … )

Bref,
Cherchons des informations sur les étages ,niveaux et ammonites :
Si les informations sont fiables, c'est vraiment du bonheur.
Sur le dernier lien, on lit que Harpoceras falciferum se situe dans la zone Serpentinum du toarcien moyen. La notice indique I5a et wikipedia « l5 : Carixien » ( donc Plienbaschien ) c'est pas gagné. Cependant, Hildoceras est bien du Toarcien moyen, c'est bon. La stratification est peut être imprécise à Thionville, mais c'est pas sûr du tout ...

Mais combien de temps ont vécu les Prodactylioceras ( voir la couche I4-3 ci-avant ) ?
Un bout de réponse ici : http://fossilworks.org/bridge.pl?a=taxonInfo&taxon_no=15454# soit de 186.7 à 184.1 Millions d'années.
Cela ne colle pas avec cette échelle géologique pour wikipedia FR ( Plienbaschien « moyen » ) et http://en.wikipedia.org/wiki/Jurassic ( bonne grosse partie du Plienbaschien )
De même, les ages géologiques différent tous. Après une recherche méticuleuse, afin de retrouver les ages effectifs de bon nombre d'ammonites, le site fossilworks et wikipedia GB sont coordonnées ensemble. Ce qui es quelque peu gênant quand on a un référentiel français.
Qu'à cela ne tienne, faisons avec.

Echelle des temps géologiques

Après avoir récupéré les ages géologiques ( temps issus de wikipedia GB et couleurs internationales associées ) et quelques fossiles, un petit programme java va permettre de construire une échelle à partir de quelques données dont celles-ci :
Le groupe des scaphites a été indiqué ici comme référence au groupe qui a eu une grande extension temporelle, du Trias au Crétacé.

Taxonomie de ces quelques genres, espèces ou familles

Par extraction d'informations issues de la page http://en.wikipedia.org/wiki/List_of_ammonites et de ses genres, les quelques ammonites ( hors Acanthoceras, je ne sais pas encore pourquoi, et d'autres n'ayant pas de pages dans Wikipedia ) sont affichées ci-après à partir du grapheur "dot" de Graphviz ( http://www.graphviz.org/ ) :
La représentation automatique vaut ce qu'elle vaut : Echioceras fait partie de la famille des Echioceratidae et cela n'est pas indiqué sur la page http://en.wikipedia.org/wiki/Echioceras ...
Si vous trouvez une classification complète, merci de me contacter ;)

Temps géologiques en java :

Les bornes sont lié à une double incertitude, celle de la référence de la langues ( wikipedia anglo-saxon ) et celle des deltas associés aux incertitudes géologiques. Pour information, les ages et les zones ne sont pas les mêmes aux Amériques et en Europe depuis la séparation de la Pangée vu qu'ils ont connu une spécialisation de la faune différentielle. La mondialisation des phénomènes géologique n'est pas bonne pour ne donner qu'un seul référentiel.
Moment mToarcien = new Moment( Moment.etage , "Toarcien" , mAalenien.ageMaxi , 183 , new Color(116,209,240)) ;
Moment mPlienbaschien = new Moment( Moment.etage , "Plienbaschien" , mToarcien.ageMaxi , 189.6f , new Color(60,201,239)) ;
Moment mDomerien = new Moment( Moment.sous_etage , "Domerien" , mToarcien.ageMaxi , 185.7f ) ;
Moment mCarixien = new Moment( Moment.sous_etage , "Carixien" , mDomerien.ageMaxi , mPlienbaschien.ageMaxi ) ;
Moment mSinemurien = new Moment( Moment.etage , "Sinemurien" , mPlienbaschien.ageMaxi , 196.5f , new Color(7,193,237)) ;
Moment mHettangien = new Moment( Moment.etage , "Hettangien" , mSinemurien.ageMaxi , 201.3f , new Color(0,187,235)) ;
Moment mJurassiqueInf = new Moment( Moment.serie , "JurassiqueInf" , mToarcien.ageMini , mHettangien.ageMaxi , new Color(0,183,234) ) ;
Moment mJurassique = new Moment( Moment.periode , "Jurassique" , mTithonian.ageMini , mHettangien.ageMaxi , new Color(0,187,231) ) ;

Ammonites :

On notera par exemple que les Pleuroceras n'auront vécu qu'au Plienbaschien
Famille fAcanthoceras = new Famille( "Acanthoceras" , mTuronian.ageMini , mAlbian.ageMaxi ) ;
//Aegoceras 186.7 to 185.7 Ma
Famille fAlsatites = new Famille( "Alsatites" , mHettangien.ageMini , mHettangien.ageMaxi ) ;
Famille fAmaltheus = new Famille( "Amaltheus" , mDomerien.ageMini , mDomerien.ageMaxi ) ;
//aegoceras sinemurien.0
Famille fArietites = new Famille( "Arietites" , mSinemurien.ageMini , mSinemurien.ageMaxi ) ;
// Arnioceras 205.6 to 183.0 Ma
// Ceratites 251.3 to 221.5 Ma
Famille fCoeloceras = new Famille( "Coeloceras" , mPlienbaschien.ageMini , mSinemurien.ageMaxi ) ;
Famille fDactylioceras = new Famille( "Dactylioceras" , mToarcien.ageMini , mPlienbaschien.ageMaxi ) ;
Famille fEchioceras = new Famille( "Echioceras" , mSinemurien.ageMini , mSinemurien.ageMaxi ) ;
// Goniatites 409.1 to 205.6 Ma
Famille fGrammoceras = new Famille( "Grammoceras" , mAalenien.ageMini , mToarcien.ageMaxi ) ;
Famille fGraphoceras = new Famille( "Graphoceras" , mBajocian.ageMini , mAalenien.ageMaxi ) ;
// Haploceras 155.7 to 130.0 Ma
Famille fHarpoceras = new Famille( "Harpoceras" , mTithonian.ageMini , mToarcien.ageMaxi ) ;
Famille fHildoceras = new Famille( "Hildoceras" , mToarcien.ageMini , mToarcien.ageMaxi ) ;
//Hoplites 155.7 to 99.7 Ma
//lytoceras 196.5 to 99.7 Ma
Famille fMacroscaphites = new Famille( "Macroscaphites" , mAptian.ageMini , mBarremian.ageMaxi ) ;
Famille fOxynaticeras = new Famille( "Oxynaticeras" , mPlienbaschien.ageMini , mSinemurien.ageMaxi ) ;
Famille fParkinsonia = new Famille( "Parkinsonia" , mCallovian.ageMini , mBajocian.ageMaxi ) ;
Famille fPerisphinctes = new Famille( "Perisphinctes" , mTithonian.ageMini , mBathonian.ageMaxi ) ;
// Phylloceras 235.0 to 66.043 Ma
Famille fPleuroceras = new Famille( "Pleuroceras" , mPlienbaschien.ageMini , mPlienbaschien.ageMaxi ) ;
Famille fProdactylioceras = new Famille( "Prodactylioceras" , mPlienbaschien.ageMini , mPlienbaschien.ageMaxi ) ;
Famille fPromicroceras = new Famille( "Promicroceras" , mPlienbaschien.ageMini , mSinemurien.ageMaxi ) ;
Famille fScaphites = new Famille( "Scaphites" , mMaastrichtian.ageMini , mCarnian.ageMaxi ) ;
Famille fSchlotheimia = new Famille( "Schlotheimia" , mSinemurien.ageMini , mHettangien.ageMaxi ) ;
Famille fUptonia = new Famille( "Uptonia" , mPlienbaschien.ageMini , mSinemurien.ageMaxi ) ;

La carte géologique adaptée à ces ammonites devient donc :

Modélisation de quelques ammonites

Vu sur le net, plusieurs familles d'Ammonites ont une structure « mathématique » en spirale logarithmique ( http://fr.wikipedia.org/wiki/Spirale_logarithmique , http://rouxjeanbernard.ch/AM/html/amch65.html , http://www.spirasolaris.ca/sbb4d2c.html ) ou basées sur d'autres modèles.
Sur le très intéressant site ammonites.fr, cette page est même bien ludique: http://www.ammonites.fr/Articles/draw.htm
Certains sites donnent quelques informations statistiques sur les proportions et taux de croissance des ammonites comme par exemple http://paleopolis.rediris.es/cg/CG2008_M04/ et http://www.ville-ge.ch/mhng/paleo/paleo-pdf/27-1/pal-27-1-14.pdf
Et pour voir la variabilité morphologique des ammonites :http://members.home.nl/paflo/keysheets/Determination%20key%20ammonites.pdf
Après une étude de la page http://www.spirasolaris.ca/sbb4d2c.html ( plusieurs pages web intéressantes ), essayons de déterminer le taux de croissance ( rapport entre 2 tours successifs ) concernant Pleuroceras spinatum.
La description de la bête ici : http://www.ammonites.fr/Fiches/0427.htm

Procédé

  • Récupération d'une photo ( la plus en face possible, ici http://www.fossilmuseum.net/Fossil_Galleries/Ammonites/Pleuroceras/Pleuroceras-orig.jpg )
  • Trouver le centre du fossile ( naissance de l'animal )
  • Trouver un repère cohérent sur 2 spires consécutives
  • Calculer le taux de croissance par tour ( celui-ci ne caractérise pas forcément la rapidité de croissance de l'animal )
  • reste à automatiser le procédé pour quelques autres ammonites ... ou regarder ce qui existe déjà sur quelques sites.
  • Avec un peu d'astuce, on peut ainsi retrouver les coefficients pour des ammonites quelque peu involutes.
Ce qui donne en image : 
  • L'image originelle
  • avec un repère ( calcul sur l'axe Ox )
  • test avec différents taux de croissances et coefficients homothétiques ( agrandissement ) en jaune
  • la formule théorique appliquée ( en rouge )

Conclusions

  • Le taux de croissance entre 2 spires concentriques est très voisin de 2.
  • Les puissances de phi donnant phi^ratio = 2 donnent un ratio voisin 3/2,
  • Le taux de croissance de cette Pleuroceras spinatum est donc de k=phi^(3/2), ce qui est somme toute tout à fait possible.

Dans les valeurs de k voisines de 2 :

5/4 1.82
9/7 1.86
4/3 1.9
7/5 1.96
10/7 1.99
3/2 2.06
8/5 2.16
Le ratio 3/2 est vraiment le plus simple, plus simple que 10/7 voire même 7/5, il lui sera préféré.

Logiciel dédié pour Pleuroceras spinatum et Harpoceras falciferum

Afin de calculer plus facilement les coefficients, un petit logiciel à façon s'impose : 
Celui-ci, à partir de la localisation de 3 spires consécutives, calcule une quatrième ( afin de vérifier les coefficients et affiche la spirale en fonction à partir du centre localisé.
Pour l'ergonomie, quelques curseurs :
  • bleu clair et foncé : pour trouver le point de naissance de l'ammonite, l'origine de la spirale donc.
  • jaune, orange et rouge : 3 spires consécutives, de la plus externe vers la plus interne
  • vert : deux choses
  1. une quatrième spire interne calculée à partir des 3 autres ( il y a moins d'incertitudes de calcul en se rapprochant du centre )
  2. la spirale calculée à partir du coefficient calculé, avec un curseur pour gérer un coefficient d'enroulement.
Les résultats sont sans appel : les mathématiques se retrouvent bien dans la nature
Pleuroceras spinatum ( k ~ phi^(3/2) )
Harpoceras falciferum ( k ~ phi^(5/6) )
Concernant Lytoceras juilleti, le taux est proche de k ~ phi^2

Plus d'informations

Et pour les germanophones ( avec des genres du Jura suisse )


ammonites : stratigraphie et taux de croissance

Résumé

Ammonites liasiques : temps géologiques correspondant et calcul de taux de croissance de Pleuroceras spinatum

Cheminement des faits :

  • Carte géologique retrouvée
  • Ammonites retrouvées
  • Temps géologiques : variabilité de durée des genres
  • Quid de wikipedia ? de l'ivraie et du bon grain
  • Marqueur stratigraphique : confirmé ( depuis longtemps )
  • Echelle des temps géologiques made pour l'occasion
  • Modélisation de quelques ammonites, enfin, une ici : Pleuroceras spinatum
Tout a commencé ce week-end où j'ai retrouvé une vieille carte géologique Thionville-Waldwisse et sa notice explicative ( http://ficheinfoterre.brgm.fr/Notices/0114N.pdf ).
Ah, chère collection de fossiles, surtout des ammonites du Plienbaschien, Sinémurien et de l'Hettangien ( http://fr.wikipedia.org/wiki/Pliensbachien ), après tout, c'est un peu normal pour Hettange, Thionville est à côté d'Hetange-Grande, lieu de référence du niveau, mais je m'avance un peu sur les conclusions.

Temps géologiques

Mais de quand datent tous ces fossiles issus de strates notées I3a-2 à I5d ? Et à quoi correspondent ces strates ?
On peut lire : l5 : Carixien l3-4 : Sinémurien (calcaires en dalles, calcaires à silex) l1-2 : Hettangien (roches carbonatées vacuolaires : dolomies, marnes et calcaires)
Quid de wikipedia ?
Bon, mais qu'en est-il des dates ?
Vu ici : http://fr.wikipedia.org/wiki/Pliensbachien le Plienbaschien dura de -190 à -182 millions d'années
Un petit tour sur tous les étages géologiques vous confortera qu'il y a un delta de quelques millions ( d'années ) entre les versions anglaises et françaises de Wikipedia, et ce n'est pas pour une question de taux de change.

Marqueur stratigraphique

Oui, oui, les ammonites sont de bons marqueurs stratigraphiques, mais qu'en est-il exactement ? Que dit la notice associée à la carte géologique ?
Le I, premier caractère des strates veut dire Lias ( jurassique inférieur ), les niveaux en 5 sont récents, ceux en 3 voire 2, plus anciens.
Du plus récent au plus ancien :

I5d

  • Grammoceras fallaciatum
  • Harpoceras insigne et dispansum
  • Lytoceras jurense

I5c

  • Harpoceras striatulum
  • Lytoceras jurense ( encore )
  • Hildoceras bifrons ( une grande classique )
  • Coeloceras crassum

I5b

  • Hildoceras bifrons ( encore ) et boreale
  • Coeloceras commune

I5a

  • Harpoceras falcifarum et serpentinum
  • Coeloceras commune ( encore )

I4c

  • Pleuroceras spinatum

I4b

  • Amaltheus margaritatus ( un grande classique )
  • Lytoceras fimbriatum

I4-3 ( veut dire que la strate contient du I4 et du I3 )

  • Echioceras raricostatum
  • Promicroceras planicosta
  • Lytoceras fimbriatum
  • Prodactylioceras davoei
  • Nautilus intermedius ( celui-là a survécu jusqu'à nos jours )
  • Uptonia jamesoni
  • Oxynaticeras oxynatum

I3b

  • Aegoceras dudressieri

I3a-2 ( de I3a à I2 : Sinémurien + Héttangien )

  • Arietites bisulcatus ( plutôt pauvre en diversification d'ammonites pour I3a-2 … )

Bref,
Cherchons des informations sur les étages ,niveaux et ammonites :
Si les informations sont fiables, c'est vraiment du bonheur.
Sur le dernier lien, on lit que Harpoceras falcifarum se situe dans la zone Serpentinum du toarcien moyen. La notice indique I5a et wikipedia « l5 : Carixien » ( donc Plienbaschien ) c'est pas gagné. Cependant, Hildoceras est bien du Toarcien moyen, c'est bon. La stratification est peut être imprécise à Thionville, mais c'est pas sûr du tout ...

Mais combien de temps ont vécu les Prodactylioceras ( voir I4-3 ) ?
Un bout de réponse ici : http://fossilworks.org/bridge.pl?a=taxonInfo&taxon_no=15454# soit de 186.7 à 184.1 Millions d'années.
Cela ne colle pas avec cette échelle géologique pour wikipedia FR ( Plienbaschien « moyen » ) et http://en.wikipedia.org/wiki/Jurassic ( bonne grosse partie du Plienbaschien )
De même, les ages géologiques différent tous. Après une recherche méticuleuse, afin de retrouver les ages effectifs de bon nombre d'ammonites, le site fossilworks et wikipedia GB sont coordonnées ensemble. Ce qui es quelque peu gênant quand on a un référentiel français.
Qu'à cela ne tienne, faisons avec.

Echelle des temps géologiques

Après avoir récupéré les ages géologiques ( temps GB et couleurs internationales associées ) et quelques fossiles, un petit programme java va permettre de construire une échelle à partir de quelques données dont celles-ci :

Temps géologiques :
Les bornes sont dues à une double incertitude, celle de la langue ( fr ou gb ) et celle des deltas associés aux incertitudes géologiques, Pour information, les ages et les zones ne sont pas les mêmes aux amériques et en Europe depuis la séparation de la Pangée vu qu'ils ont connu une spécialisation de la faune différentielle.
Moment mToarcien = new Moment( Moment.etage , "Toarcien" , mAalenien.ageMaxi , 183 , new Color(116,209,240)) ;
Moment mPlienbaschien = new Moment( Moment.etage , "Plienbaschien" , mToarcien.ageMaxi , 189.6f , new Color(60,201,239)) ;
Moment mDomerien = new Moment( Moment.sous_etage , "Domerien" , mToarcien.ageMaxi , 185.7f ) ;
Moment mCarixien = new Moment( Moment.sous_etage , "Carixien" , mDomerien.ageMaxi , mPlienbaschien.ageMaxi ) ;
Moment mSinemurien = new Moment( Moment.etage , "Sinemurien" , mPlienbaschien.ageMaxi , 196.5f , new Color(7,193,237)) ;
Moment mHettangien = new Moment( Moment.etage , "Hettangien" , mSinemurien.ageMaxi , 201.3f , new Color(0,187,235)) ;
Moment mJurassiqueInf = new Moment( Moment.serie , "JurassiqueInf" , mToarcien.ageMini , mHettangien.ageMaxi , new Color(0,183,234) ) ;
Moment mJurassique = new Moment( Moment.periode , "Jurassique" , mTithonian.ageMini , mHettangien.ageMaxi , new Color(0,187,231) ) ;

Ammonites :
On notera par exemple que les Pleuroceras n'auront vécu qu'au Plienbaschien
Famille fAcanthoceras = new Famille( "Acanthoceras" , mTuronian.ageMini , mAlbian.ageMaxi ) ;
//Aegoceras 186.7 to 185.7 Ma
Famille fAlsatites = new Famille( "Alsatites" , mHettangien.ageMini , mHettangien.ageMaxi ) ;
Famille fAmaltheus = new Famille( "Amaltheus" , mDomerien.ageMini , mDomerien.ageMaxi ) ;
//aegoceras sinemurien.0
Famille fArietites = new Famille( "Arietites" , mSinemurien.ageMini , mSinemurien.ageMaxi ) ;
// Arnioceras 205.6 to 183.0 Ma
// Ceratites 251.3 to 221.5 Ma
Famille fCoeloceras = new Famille( "Coeloceras" , mPlienbaschien.ageMini , mSinemurien.ageMaxi ) ;
Famille fDactylioceras = new Famille( "Dactylioceras" , mToarcien.ageMini , mPlienbaschien.ageMaxi ) ;
Famille fEchioceras = new Famille( "Echioceras" , mSinemurien.ageMini , mSinemurien.ageMaxi ) ;
// Goniatites 409.1 to 205.6 Ma
Famille fGrammoceras = new Famille( "Grammoceras" , mAalenien.ageMini , mToarcien.ageMaxi ) ;
Famille fGraphoceras = new Famille( "Graphoceras" , mBajocian.ageMini , mAalenien.ageMaxi ) ;
// Haploceras 155.7 to 130.0 Ma
Famille fHarpoceras = new Famille( "Harpoceras" , mTithonian.ageMini , mToarcien.ageMaxi ) ;
Famille fHildoceras = new Famille( "Hildoceras" , mToarcien.ageMini , mToarcien.ageMaxi ) ;
//Hoplites 155.7 to 99.7 Ma
//lytoceras 196.5 to 99.7 Ma
Famille fMacroscaphites = new Famille( "Macroscaphites" , mAptian.ageMini , mBarremian.ageMaxi ) ;
Famille fOxynaticeras = new Famille( "Oxynaticeras" , mPlienbaschien.ageMini , mSinemurien.ageMaxi ) ;
Famille fParkinsonia = new Famille( "Parkinsonia" , mCallovian.ageMini , mBajocian.ageMaxi ) ;
Famille fPerisphinctes = new Famille( "Perisphinctes" , mTithonian.ageMini , mBathonian.ageMaxi ) ;
// Phylloceras 235.0 to 66.043 Ma
Famille fPleuroceras = new Famille( "Pleuroceras" , mPlienbaschien.ageMini , mPlienbaschien.ageMaxi ) ;
Famille fProdactylioceras = new Famille( "Prodactylioceras" , mPlienbaschien.ageMini , mPlienbaschien.ageMaxi ) ;
Famille fPromicroceras = new Famille( "Promicroceras" , mPlienbaschien.ageMini , mSinemurien.ageMaxi ) ;
Famille fScaphites = new Famille( "Scaphites" , mMaastrichtian.ageMini , mCarnian.ageMaxi ) ;
Famille fSchlotheimia = new Famille( "Schlotheimia" , mSinemurien.ageMini , mHettangien.ageMaxi ) ;
Famille fUptonia = new Famille( "Uptonia" , mPlienbaschien.ageMini , mSinemurien.ageMaxi ) ;

La carte géologique adaptée à ces ammonites devient donc :

Modélisation de quelques ammonites

Vu sur le net, plusieurs familles d'Ammonites ont une structure « mathématique » en spirale logarithmique ( http://fr.wikipedia.org/wiki/Spirale_logarithmique , http://rouxjeanbernard.ch/AM/html/amch65.html , http://www.spirasolaris.ca/sbb4d2c.html ) ou basées sur d'autres modèles.
Sur le très intéressant site ammonites.fr, cette page est caractéristique : http://www.ammonites.fr/Articles/draw.htm
Certains sites donnent quelques informations statistiques sur les proportions et taux de croissance des ammonites comme par exemple http://paleopolis.rediris.es/cg/CG2008_M04/ et http://www.ville-ge.ch/mhng/paleo/paleo-pdf/27-1/pal-27-1-14.pdf
Et pour voir la variabilité morphologique des ammonites :http://members.home.nl/paflo/keysheets/Determination%20key%20ammonites.pdf
Après une étude de la page http://www.spirasolaris.ca/sbb4d2c.html,
Essayons de déterminer le taux de croissance ( rapport entre 2 tours successifs ) concernant Pleuroceras spinatum.

Procédé

avec repère
 avec calage de divers coefficients

calage final

Conclusions

  • Le taux de croissance entre 2 spires concentriques est très voisin de 2.
  • Les puissances de phi donnant phi^ratio = 2 donnent un ratio voisin 3/2,
  • Le taux de croissance de cette Pleuroceras spinatum est donc de k=phi^(3/2).
Dans les valeurs de k voisines de 2 :
5/4 1.82
9/7 1.86
4/3 1.9
7/5 1.96
10/7 1.99
3/2 2.06
8/5 2.16
Le ratio 3/2 est vraiment le plus simple, plus simple que 10/7 voire même 7/5, il lui sera préféré.

Plus d'informations



jeudi 5 décembre 2013

petit à petit, les pions sont posés

Scrabble, la suite

Mazette ( 16 points ), le scrabble avance de temps en temps,
de quoi occuper les longues soirées d'hiver en famille ( entre nous soit dit : l'optimisation tue le plaisir du jeu, de la réunion et le temps ).
Le plaisir est dans la recherche donc, et ses oublis, pas l'automatisation, même si parfois le programme donne quelques surprises comme ces 4 scrabble d'affilé, pour un total de 5 pour cette partie de 982 points.


Quelques statistiques

  • 2 à 3 scrabble en moyenne par partie
  • 27 coups
  • 100 secondes pour les 20 premiers coups ( 5 s par coup donc )
  • moins de 140 secondes par partie

Reste à faire

  • choisir les pions à tirer
  • choisir le mot à poser
  • gérer les joker

lundi 28 octobre 2013

au Scrabble citoyens

Scrabblélipopette,

il fallait s'en douter. à force de faire des programmes pour jouer et/ou résoudre des problèmes d'Othello, Sudoku, compte et bon et mot le plus log, le Scrabble s'inscrit tout à fait dans cette continuité.
Mine de rien, il existe déjà pas mal d'adaptations de Scrabble pour ordinateurs, avec notamment des portages sur PlayStation et Android. Cela n'en fera qu'une de plus.

Et pourtant, le Scrabble, ce n'est pas Trivial ...

Un peu comme Othello, facile à jouer, difficile à maitriser.
Il faut :
  • disposer d'un dictionnaire ( ok, celui déjà utilisé regroupe plus de 360.000 mots )
  • avoir du temps ( ça tombe bien, tout comme pour les autres jeux, l'objectif est aussi de gagner du temps sur les parfois très longues et monotones parties. Il s'agit donc bien d'un investissement sur le futur)
  • un ordinateur un peu puissant ( à quand les jeux sur Raspberry ? )
  • savoir jouer avec les mots et marquer des points ( au propre comme au figuré ) et optimiser ses choix.

Le prototype : l'origine de tous les mots

L'objectif était de faire en 2 jours - bien remplis - un jeu capable de faire un minimum de choses essentielles, à savoir :
  • gérer des lettres, le modèle est là : http://fr.wikipedia.org/wiki/Lettres_du_Scrabble#Fran.C3.A7ais
  • créer des pions et les mélanger ( pour simplifier, les joker ne sont pas utilisés )
  • gérer une partie avec un seul joueur
  • avoir toujours 7 pions sur son chevalet, du moins jusqu'à la fin de partie
  • remettre ses pions dans le chevalet si pas de mots trouvés
  • pouvoir jouer 2 tours ( les cas 1 et cas 7 décrits ci-après )
  • ne pas faire sauter le compteur ( surveiller sa mémoire vive )
  • gérer les cases multiplicatrices des points et de mots
  • maitre mot : faire à chaque tour le maximum de points possibles
Il reste encore pas mal de travail, notamment afficher le déroulement de la partie et la comptabilisation, jouer à plusieurs, étendre  tous les cas possibles et étudier des coups à jouer. Ce genre de choses.

La schématisation du problème

Sur une feuille A4, cela aurait pu ressembler à ceci :

Le scrabblier après 2 tours

Le sac contient les 100 pions lettrés mélangés 100 fois.
BAGNE fait (3*2+1+2+1+1)*2 = 22 points au 1° tour
TAXOLS fait (1+1+10+1+1+1)*2 = 30 points au 2° tour, soit 52 points sur les 2 premiers tours.

Gestion de la mémoire

avant la barre bleue, la création des dictionnaires ( dont anagrammes ) en mémoire à partir d'un simple fichier texte. Une dizaine de secondes pour préparer les données.
après la barre bleue, les 2 coups joués et la copie d'écran. Les deux coups du début sont ( quasiment ) instantanés.

Sur l'image un bug répértorié, l'ordinateur a placé "QUE" au milieu parce que le "mot compte double" de la case du milieu n'a pas été annulé après avoir été utilisé.

les 7 plaies des glyphes, je les prends aux mots

Le scrabble, ce n'est pas trivial, parce qu'il y a pas mal de façons de rajouter un mot à un autre. Voici listés les 7 types de base, passons-les en revue.

Imageons la scène

Comment poser les mots "DE" ( ou "DES" ) en relation avec "UN" ? Les 7 cas sont indiqués sur fond bleu.
Pour le fun, quelques exemples de placement avec le mot "TROIS".

Type 1

Il s'agit du cas le plus simple,trouver à placer le mot faisant le plus de points. Valable uniquement pour le 1° tour.

Type 2

à partir du chevalet, compléter un mot existant ( par exemple UN + DES = DUNES ).

Type 3

Le nouveau mot est un mot à part entière et ne modifie pas le mot existant, parallèle à celui-ci, joint par une lettre formant un troisième nouveau mot de 2 lettres.

Type 4

Les cas général de la rencontre du 3° type. Avec recouvrements multiples.

Type 5

pendant du type 3, mais en orthogonalité

Type 6

Le contraire du type  5. Le mot précédent ne change pas, mais le nouveau mot n'existe pas sans lui.

Type 7

Les mots croisés, le 2° mot traversant le 1°

Type 8

le contraire du type 7, mais je n'en parlerai pas pour ne pas créer un 8° cas à traiter.

Généralisation du problème

Si le type 3 est un cas particulier du type 4, il faut bien voir que l'on a 2 fonctionnements radicalement différents, dont le 2° est bien plus difficile à gérer.

cas général 1

Le cas le plus simple, on cherche à poser sur le chevalet un mot complet ( cas 1, 2, 3 , 4 et 5 - et 8 - ). nous pouvons utiliser le dictionnaire de mots pour

cas général 2

des pions sont à placer pour créer un mot existant. Dans le pire des cas, le nouveau mot peut s'appuyer sur plusieurs mots posés séparés ( cas 6 et 7, et l'exemple complexe AVANT + AVANT + ESUIE = 2 * AVANT + ENSUITE )

lundi 12 août 2013

le compte est bon ... reste à savoir s'il fait de bons amis

Bon, le compte est bon... Je n'ai pas pu attendre l'année prochaine, cela faisait bien quelques années que le sujet me démangeait.

Avant tout, quelles sont les contraintes à gérer ?

- le temps : moins de 45 secondes pour trouver serait pas mal, et bien moins serait encore mieux
- les plaques : plus il y a de plaques dans les formules, plus c'est long à toruver
- les doublons : les doublons font des permutations inutiles, et donc du temps perdu, et le sujet est à la recherche du temps perdu ...
- la complexité des formules : plus il y a de parenthèses, plus c'est pénible à gérer, d'autant que certaines sont totalement superflues
- gérer les divisions pas entières

quelques problèmes résolus

il faut dire que pour résoudre la question, il aura fallu gérer un générateur de programmes, permettant de gérer les formules à analyser.

la génération des formules

Suivant le nombre de plaques, les formules générées varient en nombre et en qualité :

pour 2 plaques

la formule est de la forme a*b où "*" remplace un des 4 opérateurs standard
Il y a juste une formule générique : a*b

pour 3 plaques

la formule est de la forme a*b*c avec possibilité de rajouter des parenthèses
Il y a 3 formules génériques : a*b*c , (a*b)*c et a*(b*c)

à priori, le nombre de formules développées devrait être de 3 * 4^2 , soit 48.
Il faut cependant supprier les "FIC", les Formules Inutilement Coplexes comme (a+b)+c qui est la même que a+b+c, beaucoup plus simple.
Les formules développées sont au nombre de 20, en voici quelques unes :
try { gerer( a*b*c,"a*b*c",a,b,c,0,0,0 ) ; } catch( ArithmeticException e) {}// try { gerer( a+b+c,"a+b+c",a,b,c,0,0,0 ) ; } catch( ArithmeticException e) {}
( ... )
// try { gerer( (a*b)*c,"(a*b)*c",a,b,c,0,0,0 ) ; } catch( ArithmeticException e) {}
try { gerer( a/b/c,"a/b/c",a,b,c,0,0,0 ) ; } catch( ArithmeticException e) {}

Les lignes commençant par // sont des FIC.
Le nombre réel est d'enviro 50% du nombre théorique, ce qui permet déjà de diviser par deux le temps de calcul pour 3 plaques.

Nombre de formules par plaque

2 : 1
3 : 3
4 : 11
5 : 45
6 : 217 ( ah, oui, cela fait beaucoup, et cela ne tient pas comptes des quelques 6! permutations possibles )

Pour 6 plaques, donc 5 opérateurs, le nombre de formules théoriques est de 217 * 4^5 soit 222.208, donc 222.208 * 6! pour les permutations, soit 160 millions à quelque chose près.
L'optimisation a donc son importance.

Générer les formules

Là aussi le problème est de taille, pour 3 plaques, la formule générale est "?a?*?b?*?c?", où chque "?" peut représenter un "cretain nombre de parenthèses ouvrantes et fermante, le tout devant donner une formule arithmétiquement correcte, et elle aussi optimisée.
Typiquement, la formule a*(b*c)*d est valable, tout comme la formule a*((b*c))*d, sauf que là, il y a des parenthèses inutiles. Cette formule est à éliminer des formules utiles.

Son un PC dual core monothreadé tournant à 3 GHz, il aura fallu plus de 5 minutes à un programme java pour calculer TOUTES les formules plossibles pour 6 plaques. après optimisations expliquées ci-avant, ce temps passe à 90 secondes.

Concrétement

Concernant l'émission qui m'aura servi de référence pour "le mot le plus long" ( tirages consultables ici : http://fitness-greg.over-blog.com/article-pascal-a-encore-fait-une-bouchee-face-annick-119337317.html ), les tirages sont les suivants :

        new CompteEstBon( 5 , 9 , 25 , 2 , 7 , 5 , 782 ) ;
        new CompteEstBon( 7 , 1 , 2 , 9 , 100 , 25 , 844 ) ;
        new CompteEstBon( 4 , 5 , 1 , 9 , 8 , 6 , 607 ) ;
        new CompteEstBon( 10 , 3 , 10 , 4 , 6 , 3 , 881 ) ;
        new CompteEstBon( 2 , 3 , 5 , 4 , 7 , 9 , 205 ) ;
        new CompteEstBon( 1 , 4 , 25 , 5 , 10 , 7 , 785 ) ;

Le programme s'arrête au calcul impliquant le moins de plaques possibles.
Afin d'éviter les doublons qui n'auraient pas (encore) été filtrés, le programme affiche au maximum 4 calculs exacts. Le programme ne va donc pas (encore) chercher les calculs approchés.

tirage : 5    9    25    2    7    5    =    782

secondes pour 2 plaques : 0.003
secondes pour 3 plaques : 0.036
secondes pour 4 plaques : 0.09
782 = (5*5+9)*(25-2)    //    (a*b+c)*(d-e)    [5,5,9,25,2,0]
782 = (5*5-2)*(9+25)    //    (a*b-c)*(d+e)    [5,5,2,9,25,0]
782 = (5*5-2)*(25+9)    //    (a*b-c)*(d+e)    [5,5,2,25,9,0]
782 = (9+5*5)*(25-2)    //    (a+b*c)*(d-e)    [9,5,5,25,2,0]
secondes pour 5 plaques : 0.749
secondes pour 999 plaques : 0.889


Le programme trouve plusieurs résultats ( dont 50% de permutations ) en moins de 1 seconde pour 5 plaques.
Le résultat a été trouvé pour 5 plaques. Le résultat de l'émission est constitué de 6 plaques. Il faut dire que les tables de 23 et de 34 sont généralement assez peu utilisées.

tirage : 7    1    2    9    100    25    =    844

secondes pour 2 plaques : 0.001
secondes pour 3 plaques : 0.006
secondes pour 4 plaques : 0.139
844 = (7+2)*(100-9)+25    //    (a+b)*(c-d)+e    [7,2,100,9,25,0]
844 = (1-7+100)*9-2    //    (a-b+c)*d-e    [1,7,100,9,2,0]
844 = ((1-7+100)*9)-2    //    ((a-b+c)*d)-e    [1,7,100,9,2,0]
844 = (1+100-7)*9-2    //    (a+b-c)*d-e    [1,100,7,9,2,0]
secondes pour 5 plaques : 1.076
secondes pour 999 plaques : 1.222

Similaire au résultat trouvé. Les 2° et 4° solutions sont les mêmes aux permutations près.

tirage : 4    5    1    9    8    6    =    607

secondes pour 2 plaques : 0.0
secondes pour 3 plaques : 0.001
secondes pour 4 plaques : 0.052
secondes pour 5 plaques : 2.159
secondes pour 6 plaques : 50.656
secondes pour 999 plaques : 52.871

Cas typique de résultat exhaustif non trouvé ( 51 secondes pour les 6 plaques )
Vu les temps indiqués pour les 2, 3, 4 et 5 plaques, le temps total pour gérer les 6 plaques ( 51 secondes ) est hors cadre. Il doit encore manques des optimisations.
Dans l'émission, un résultat approché à 608 a été trouvé.

tirage : 10    3    10    4    6    3    =    881

secondes pour 2 plaques : 0.0
secondes pour 3 plaques : 0.001
secondes pour 4 plaques : 0.021
secondes pour 5 plaques : 0.618
secondes pour 6 plaques : 13.345
secondes pour 999 plaques : 13.986

Idem, et résultat approché trouvé à 880
Remarque : avec 2 plaques identiques, le temps de traitement des 6 plaques passe globalement de 50 secondes à 15 secondes.

tirage : 2    3    5    4    7    9    =    205

secondes pour 2 plaques : 0.0
secondes pour 3 plaques : 0.001
secondes pour 4 plaques : 0.045
205 = (2+3)*(5+4*9)    //    (a+b)*(c+d*e)    [2,3,5,4,9,0]
205 = (2+3)*(5*9-4)    //    (a+b)*(c*d-e)    [2,3,5,9,4,0]
205 = (2+3)*(5+9*4)    //    (a+b)*(c+d*e)    [2,3,5,9,4,0]
205 = (2+3+4*9)*5    //    (a+b+c*d)*e    [2,3,4,9,5,0]
secondes pour 5 plaques : 0.083
secondes pour 999 plaques : 0.13

Similaire à l'émission. La 4° solution proposée est bien plaisante.

tirage : 1    4    25    5    10    7    =    785

secondes pour 2 plaques : 0.0
secondes pour 3 plaques : 0.002
secondes pour 4 plaques : 0.106
785 = ((25-4)*7+10)*5    //    ((a-b)*c+d)*e    [25,4,7,10,5,0]
785 = (((25-4)*7)+10)*5    //    (((a-b)*c)+d)*e    [25,4,7,10,5,0]
785 = 25*(5*7-4)+10    //    a*(b*c-d)+e    [25,5,7,4,10,0]
785 = (25*(5*7-4))+10    //    (a*(b*c-d))+e    [25,5,7,4,10,0]
secondes pour 5 plaques : 1.23
secondes pour 999 plaques : 1.341

Similaire à l'émission

Conclusion

- des permutations difficiles à gérer
- des optimisations ( ? ) concernant les 6 plaques
- calculs approchés à prévoir
- gestion des plaques en double
- gestion "améliorée" des traitements des formules allant des calculs simples aux calculs complexes
- des chronos la plupart du temps très réduits
- le cas des 6 plaques encore problématique.

quelques références en ligne 

non exhaustif bien évidemment
http://www.langue-au-chat.fr/tricher-au-compte-est-bon/
http://fitness-greg.over-blog.com/