Salut, Voila une petite réflexion rapide sur le pas de temps dans Isis (il manque sûrement des choses, donc il faut compléter) La demande initial est de pouvoir faire un pas de temps hebdomadaire. Les problèmes à un changement de pas de temps ============================================= - tout ce qui est migration vérifie les choses par rapport au mois, il faudrait que dans l'objet Month, on puisse avoir en plus la notion de quart de mois (=1semaine). - Les résultats se font avec des matrices mensuelles, il faudrait qu'en fonction du pas de temps choisi cette dimension puisse varier. - les saisons sont définis par un interval de mois - des Rules et autres scripts utilisent le mois pour faire des choses. Quelques pistes pour y arriver ============================== 1ère solution ------------- l'idée sera de pouvoir définir en paramétrage de simulation la division de l'année souhaitée. (1=année, 4=saison, 12=mois, 52=semaine, 365=jour) - L'objet TimeStep prendrait donc cette valeur comme pas de temps pour la simulation - TimeStep pourrait retourner des objets Year et YearStep (division courante de l'année. Ex: si 4 division d'année, 3 retourne l'equivalent des 3 derniers mois de l'année. si 12 divisions d'annee, 11 retourne l'equivalent du mois de décembre, ...) - Il serait agréable que lors de la division de l'année, l'utilisateur puisse déterminé le nom qu'il souhaite donnée à chaque division (si division en 12 alors janvier, fevrier, ...) Des propositions par défaut serait données, exemple division par 6 alors on propose (janvier/fevrier, mars/avril, mai/juin, ...) - il faudrait conserver une compatibilite avec l'existant, donc par defaut le decoupage est mensuel et la method getMonth dans ce cas fonctionne. 2ème solution ------------- L'idée sera de basé la plus petite division à 1 jour (le plus pratique je pense, si on descend en dessous du jour ça va être compliqué) On indique ensuite avec combien de jour, on souhaite créer le pas de temps. 7=semaine, 30=mois, 90=trimestre, 360=année, 720=2 ans, ... et combien de pas de temps à une rotation (équivalent d'une année avec les mois), ceci est nécessaire pour la création des saisons. Par exemple si on a un pas de temps de 30 jours, on peut indique qu'on utilise 12 pas de temps pour définir une année. Mais on peut vouloir travailler avec des saisons bi-annuelle, dans ce cas, on pourrait indiquer qu'un rotation prend 24 pas de temps. - L'objet TimeStep prendrait donc cette valeur comme pas de temps comme incrément pour passer au pas de temps suivant pour la simulation - TimeStep pourrait retourner des objets Year(=360), Month=(30), Week=(7), Day=(1) quelque soit le le pas de temps choisi (toujours un multiple de jour) - La compatibilite avec l'existant est automatique si le pas est fixé a 30 et la rotation a 12 pas pour une année - il faut une méthode pour retourner le pas de temps courant dans la rotation choisi (0, 1, 2, ...) (step % stepByRotation). Ceci est nécessaire si on choisi un pas de temps différent de year, month, week, day. - je pense qu'il ne faut pas tenir compte des mois de 28, 29, 31 jours (beaucoup de complexite pour peu de plus value) - il faudra une option (case a cochée) dans le rendu des résulats pour indiquer si l'on veut les résultats sous forme d'année ou de rotation. Peut-etre meme un champs texte qui permette de définir l'affichage souhaite (ou une combo editable avec des valeurs par défaut existant, mais l'utilisateur pourra lui meme redéfinir ce qu'il souhaite) Par exemple pour un pas de temps de 30, une rotation de 720. Pour représenter la division 1500 avec: - %day = 1500 - %step = 50 - %stepInRotation r-%rotation = 1 r-2 (on suppose que le premier step est 0) - %month année %year = février année 4 La question a se poser est garde-t-on 0 comme valeur de premier élément ou on fini par prendre 1 ? Conclusion ========== La deuxième solution me semble beaucoup plus évolutive, elle permet de faire des pas de temps supérieurs à l'année, et de choisir sa rotation (on est plus obligé de suivre l'année). Par contre cette solution ne permet pas de faire une simulation sur un pas de temps inférieure au jour (au contraire de la 1ère). Mais ce n'est pas totalement vrai, il suffit de dire que la division minimal de 1 n'est pas un jour mais 1 heure, que la rotation est sur 8640 (dans ce cas les methodes year, month, ... retournent n'importe quoi, mais ceci n'a que peut d'importance, car ne servent a rien a part a affiche de facon plus agréable le pas de temps courant) Les changements a faire ======================= - TimeStep - PopulationSeasonInfoImpl - DefaultSimulator - verifier que les scripts utilise bien le nouveau TimeStep -- Benjamin POUSSIN -------------------- tél: +33 (0) 2 40 50 29 28 email: poussin@codelutin.com http://www.codelutin.com