guillaumejchauveau / p6 Goto Github PK
View Code? Open in Web Editor NEWP system engine implemented in Java
P system engine implemented in Java
Projet P6. Ce projet requiert Java 11 pour fonctionner. Pour préparer le dossier de distribution (dist), lancer le script dist/scripts/dist(.sh ou .bat). Ce script va préparer Gradle, installer les dépendances, compiler les sources et créer les archives Jar de l'interface en ligne de commandes (CLI) dans dist/cli/lib puis créer la Javadoc dans dist/docs. La première exécution peut prendre plusieurs minutes. Le CLI peut être utilisé avec le script dist/scripts/cli depuis n'importe quel dossier. Le dossier de travail sera ajouté au chemin de classes Java, afin de permettre le chargement de bibliothèques P6 avec le système de services Java. Des programmes P6 sont disponibles dans le dossier dist/demos. Vous pouvez par exemple lancer le programme du crible d'Eratosthène avec la commande ./dist/scripts/cli.sh dist/demos/crible.txt 2000 500 où les nombres 2000 et 500 sont respectivement la cible d'itérations et la cible de stabilité (lire les commentaires dans les fichiers de programme). Pour plus d'informations sur le CLI, exécuter le script avec le drapeau --help. Afin d'utiliser la bibliothèque MyLibrary définie dans dist/demos/demo, compiler les fichiers de démonstration Java avec le script compileDemo, puis exécuter CLI normalement en se trouvant dans le dossier dist/demos (là où le dossier META-INF nécessaire aux services Java se trouve). Sont aussi présentes des démonstrations utilisant l'API du noyau et du registre (compilées par compileDemo). Elles peuvent être exécutées avec le script runDemo en passant comme argument le nom de la classe correspondant à la démonstration. Pour finir, le dossier de distribution peut être nettoyé avec le script clean.
Créer une classe dans CLI pour visualiser le contenu d'une cellule et ses sous-cellules avant et après une réaction, pour que l'utilisateur puisse avoir un retour sur le résultat de son programme. Soit directement dans le terminal (ou une version simplifiée pour des cellules avec peu d'éléments seulement), ou alors un moyen d'exporter l'état final dans un fichier pour l'utiliser ailleurs (plus pour les cellules avec beaucoup d'éléments).
Pour l'instant, les Runners vont exécuter les règles un nombre pré-définit de fois (sauf si la solution ne contient plus qu'un seul symbole). Il faut maintenant déterminer si une solution est stable (ou quasi-stable). Je vois plusieurs approches possibles pour l'instant:
un super truc
Actuellement, les réactions sont testées par rapport à des réactifs déjà sélectionnés et la première à pouvoir s'appliquer sera la seule à l’être. D'autres modèles sont possibles cependant, la page Wikipédia sur les P-Systèmes propose une approche où, à chaque itération, toutes les règles doivent être satisfaites (si possible). Elle introduit aussi une notion de priorité entre les réactions. Il serait intéressant de tester une implémentation de cette approche avec un nouveau réacteur basé sur le réacteur basique. Des modifications structurelles vont cependant être nécessaire pour permettre sa réalisation. Elles seront introduites avec #9 .
Je trouve que le nom Runner
est nul et Condition
et Result
ne sont pas très clairs. Du coup je propose
Reactor
(tout de suite plus stylé), ReactionCondition
et ReactionProduct
pour être un peu plus proche de la dimension chimique du projet. Dans la foulée, Symbol
ne va pas tellement avec ces nouveaux noms du coup pourquoi pas Element
?
Un candidat potentiel pour remplacer ArrayList serai une liste chaînée. Le stockage des symboles doit pouvoir choisir un symbole au hasard, le supprimer et rajouter d'autres symbole. ArrayList doit être le plus performant pour la sélection et l'ajout mais il est possible que la suppression prenne beaucoup de temps. L'idée serai de faire une sorte de liste doublement chaînée (donc qui aurait 3 champs: le nœud précédent, la valeur et le nœud suivant). La suppression serait dans ce cas très rapide (O(1)) là où les tableaux ont une complexité O(n). Par contre, la sélection d'un symbole sera plus longue car pour un indice donné, il faut parcourir chaque nœud pour arriver à celui qui nous intéresse. Il faudrait donc faire des tests pour voir si les tableaux ou les listes doublements chaînées sont plus intéressantes.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.