Giter Site home page Giter Site logo

p6's Introduction

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.

p6's People

Contributors

guillaumejchauveau avatar oumaimac avatar riquet14 avatar

Watchers

 avatar

p6's Issues

Visualisateur de solution pour CLI

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).

Déterminer si la Solution est stable

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:

  • Vérifier si les règles ont modifié la solution.
  • Estimer automatiquement le nombre d'itération à l'avance.

Mdr

un super truc

Tester un nouveau modèle de sélection des réactions

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 .

Renommer certaines classes

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 ?

Stockage des symboles autrement qu'avec une ArrayList

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.