Je suis débutante en java j'ai jamais fait avant de programmation et la j'ai un projet sur l'allocation de ressources
Allocation de ressources
Une plante terrestre croît grâce à l'assimilation de deux types de ressources : du carbone, prélevé dans
l'atmosphère par les feuilles en présence de lumière (photosynthèse) ; de l'azote, prélevé dans le sol par les
racines. Il faut de l'azote et du carbone pour fabriquer et faire grandir les feuilles. Il faut aussi de l'azote et du
carbone pour fabriquer et faire pousser les racines. Plus il y a de surface de feuille, plus la quantité de carbone
prélevée augmente. Plus il y a de surface de racine, plus la quantité d'azote prélevée augmente. Pour que la
croissance soit optimale, il faut que les ressources soient correctement réparties de façon dynamique entre les
organes de la plante. Par exemple, si la plante manque d'azote, elle doit temporairement favoriser le
développement des racines plutôt que des feuilles, etc.
Ce système peut être modélisé par des agents (feuilles et racines) qui fournissent des nutriments et demandent
des ressources. La répartition de ces ressources vise à assurer une croissance optimale de la plante.
J'ai pensé à creer 4 class Feuille racine N et C et je vois un peu les méthodes et les données des classes feuille et racine mais je ne vois pas trop les méthodes et les données des class C et N est ce quelqu'un qui s' y connaît pourrais m'aider ?
Bonjour,
Le début de ta conception est bien mais, jepense que pour ton exercice, c'est tout simplement une plante qu'il faut modéliser.
Le carbone et l'azote ne sont que des quantités contenues dans la plante.
Pour débuter voici comment je vois les choses.
Une plante a :
- 0 à N feuilles
- 0 à N racines (pas forcément réaliste mais bon)
- Une quantité d'azote absorbée disponible
- Une quantité de carbone absorbée disponible
La plante peut :
- faire grandir ses feuilles et/ou racines
- créer de nouvelles feuilles et/ou racines
- absorber des ressources
-----------------------------------------
Une feuille a :
- Une surface
- Un coefficient d'absorbtion de carbone par unité de surface (commun à toutes les feuilles) (je n'ai pas mis ici le temp en ligne de compte)
Une feuille peut :
- grandir
- absorber du carbone
------------------------------------------
Une racine a:
- Une surface
- Un coefficient d'absorbtion de azotepar unité de surface (commun à toutes les racines) (je n'ai pas mis ici le temp en ligne de compte)
Une racine peut :
- grandir
- absorber de l'azote
------------------------------------------
La modélisation java de ce que je viens de dire se traduit ainsi :
Plante
Feuille
Racine
Voila, bon bien sur tout n'est pas forcément exact, mais cela constitue un point de départ.
Bonne chance,
Niroken
Merci pour ton aide! Je vois plus ce que je pourrais faire Je vais rajouter une class main Repartition dans laquelle si il ya moins d'azote je ferai gandir les racines et si ily a moins de cabone je ferais plutôt grandir les feuilles avec des boucles while ou des selection genre if et else en fonction des ressources disponibles
J'ai finalement fait une analyse de l'exercice et je voulais rajouter l'eau et la lumière de façon à ce que la plante en est tjrs et je sais pas si doit utiliser des méthodes ou des attributs pour le faire .
Je veux aussi rajouter les paramètre azote et carbone du milieu pour faire varier le C et N dans la plante .
Voilà l'analyse et l'algorithme
* Créer un nombre de feuilles et de racines avec des surfaces initiales.
* Absorber par les racines une quantité d’azote.
* Absorber par les feuilles une quantité de carbone
* Tant que surface des feuilles et des racines augmente ,la quantité d’azote et de carbone augmente aussi.
* Faire grandir racines et feuilles si
quantité N/Quantité C = 1
* Si C/N < 1 ou N/C>1 faire grandir les feuilles .
* Créer un tableau C/N .Ranger 10 valeurs de 0 à 1 du rapport C/N.
* Créer un tableau surface F de 10 éléments .Ranger les valeurs de la surface des feuilles.
* Afficher les éléments des tableaux .
* Représenter graphiquement la croissance des feuilles en fonction du rapport C/N
* Si N/C <1 ou C/N>1 faire grandir les racines .
* Créer un tableau N/C .Ranger 10 valeurs de 0 à 1 du rapport N/C.
* Créer un tableau surface F de 10 éléments .Ranger les valeurs de la surface des feuilles.
* Afficher les éléments des tableaux .
* Représenter graphiquement la croissance des feuilles en fonction du rapport N/C
Hello,
D'après ton algo, je vois que la quantité de feuille et de racines est fixée au départ et ne bouge plus, j'ai donc retiré de mon code, les méthodes qui permettaient à la plante de créer feuilles et racines.
J'ai juste ajouté une méthode qui simule le comportement de vie d'une plante.
En gros la simulation se résume à ceci :
Toutes les unités de temps, la plante absorbe des ressources, et décide si elle doit faire grandir ses feuilles ou ses racines en fonction des quantités d'azote et carbone disponibles.
Ensuite la méthode affiche juste à chaque période, la quantité d'azote et de carbone dispo dans la plante.
Par rapport à ton besoin il faudrait aussi ajouter les surfaces des feuilles et des racines, je te laisserais le soin de faire ca.
Une petite chose que je n'ai pas bien compris, tu as parlé de feux facteurs supplémentaires, eau et lumière, or dans ton algo, il n'est nul part mentionné leur impact sur la plante. Pour l'instant donc je n'en ai pas tenu compte.
Voici l'implémentation :
Feuille
Racine
Plante
Program
Dans mon program j'ai crée une Plante à deux feuilles et une racine, si tu veux avoir un comportement moins "linéaire", il faut jouer sur les coefficient d'absorbtion des racines et des feuilles.
Bonne chance,
Niroken
Merci beaucoup pour ton aide je réfléchis à tout ça !
Je voulais te demander tu a utilisé ArrayList et List pour le nombre de feuilles et de racines ??? Ces pacckages te permettent de faire quoi exactement tu peux m'expliquer?
Ta methode pour construire la plante tu la fais parce que tu devais avoir une plante pour pouvoir simuler sa vie?
et quand tu écris
private void absorbeRessources (){
for (feuilles vFeuilleTmp : mfeuilles ){
mQuantitéCarbone += vFeuilleTmp.absorbeCarbone ();
}
for( feuilles vfeuillestmp :mfeuilles) c'est pour quoi ? c'est pour indiquer que ce qui vient après c'est juste pour les feuilles mais est-ce que c'est obligatoire de préciser à chaque fois le for?
et dernière chose j'ai pas compris quand tu m'as dit qu' il faudrait rajouter les surfaces des feuilles et des racines c'est dans la méthode simuler la vie de la plante que je dois le faire?
merci d'avance pour tes explications
Hello,
En java, pour représenter une collection on peut utiliser des tableaux :
Des listes :
Des maps, des sets, vectors....
L'avantage des listes par rapport aux tableaux, c'est qu'on a pas besoin de préciser la taille de la liste a l'avance, de sorte que si l'on veut ajouter ou retirer un élément cela se fait sans problème, or dans le cas d'un tableau, il faut redéclarer un tableau de taille +1 ou -1 et recopier les éléments du tableau initial dans le nouveau.
Ici dans le cas de la plante, ca s'y prétait bien puisque j'avais pensé qu on avait un nombre de feuilles et de racines indéterminés.
Pour parcourir un élément de type collection à partir de java 1.5 on peut utiliser :
Sinon on peut parcourir cette collection de facon plus classique :
Dans l exemple ci dessus, je parcours la liste de feuille de la plante, et j 'ajoute a la quantité de carbone de la plante, les quantités de carbones absorbées de chacune de feuilles.
Enfin pour finir, j'avais ajoutés des paramètres sCoefficientAbsorbeCarbone, ce paramètre est utilisé pour savoir quelle est la quantité de carbone absorbée pour chaque feuille par unité de surface.
Ainsi, si tu modifies ce paramètre, ta plante absorberas bcp de carbone. dans le cas contraire, elle n'en absorbera pas beaucoup.
Ce paramètre ainsi que les autres vont donc modifier le comportement de la vie de ta plante.
Bonne chance,
Niroken
merci j'ai compris et je préfère utiliser les tableaux parce que c'est ce que j'ai appris cette année on a pas vu les "Array list"
du coup j' ai tapé le code en faisant des tableaux de feuilles ,de racines,de surface, et de quantité de ressources j'ai rajouté deux données ce sont les Carbone et Azote du milieu que j' obtiens aléatoirement.
J'ai tapé le code sur NetBeans mais ça marche pas alors sais pas pourquoi voici les codes:
Merci encore
Hello,
J'ai corrigé ton code,je te transmets juste les classes modifiées :
Milieu :
Plante :
En revanche, je ne vois pas trop à quoi sert ta classe Milieu.
Apparemment tu as essayé de faire un système de sauvegarde de l'état de la plante à chaque instant t.
Mais il aurait mieux valu que tu fasses, une méthode interne a la classe Plante qui te renvoit à la limite un String pour l'état de la plante, ou alors au mieux une structure de données qui te sauvegarde ces infos en vue de les écrire plus tard dans un fichier par exemple.
A l'heure atuelle ce qui marche donc, c'est que tu affiches les quantités de carbone et d azote absorbées par la plante en fonction du temps.
Bonne chance,
Niroken
Merci bcp :D pour ton aide tu m'a pas mal aidé maintenant je vais voir avec ma prof d'info comment représenter les resultats je vais lui demander de m'aider à faire des courbes QCarbone & QAzote en fct du temps.
@+