Modification du nombre de bateaux
Bonjour, J'essaie, depuis une règle, de modifier le nombre de bateaux initialement entré dans l'interface pour une stratégie donnée. Voici la partie utile de mon code: for (Strategy str : strs){ if (str.getName().compareTo("S1") == 0){ SetOfVessels newSet; FleetCapacityOld = str.getSetOfVessels().getNumberOfVessels(); FleetCapacityNew = (int) Math.round(cumcountEmgtFra*FleetCapacityOld); newSet = str.getSetOfVessels(); newSet.setNumberOfVessels(FleetCapacityNew); str.setSetOfVessels(newSet); } } Chaque début d'année, l'ancien nombre de bateaux (FleetCapacityOld) devrait être remplacé par FleetCapacityNew. Or, bien que la valeur de FleetCapacityNew soit correctement modifiée d'une année à l'autre, FleetCapacityOld reste toujours constant d'une année à l'autre, et n'est pas remplacé par FleetCapacityNew (ces deux variables ont été déclarées en début de règle /public int/). Pouvez vous m'aider? Merci d'avance, Paul -- Paul Marchal IFREMER DOP/DHMMN 150, Quai Gambetta BP 699 62321 Boulogne sur mer FRANCE Tel: (+33) 321 99 56 86 Fax: (+33) 321 99 56 01 Mail: paul.marchal@ifremer.fr
Le 20/10/2010 11:59, Paul MARCHAL a écrit :
Bonjour,
J'essaie, depuis une règle, de modifier le nombre de bateaux initialement entré dans l'interface pour une stratégie donnée. Voici la partie utile de mon code:
for (Strategy str : strs){ if (str.getName().compareTo("S1") == 0){ SetOfVessels newSet; FleetCapacityOld = str.getSetOfVessels().getNumberOfVessels(); FleetCapacityNew = (int) Math.round(cumcountEmgtFra*FleetCapacityOld); newSet = str.getSetOfVessels(); newSet.setNumberOfVessels(FleetCapacityNew); str.setSetOfVessels(newSet); } }
Chaque début d'année, l'ancien nombre de bateaux (FleetCapacityOld) devrait être remplacé par FleetCapacityNew. Or, bien que la valeur de FleetCapacityNew soit correctement modifiée d'une année à l'autre, FleetCapacityOld reste toujours constant d'une année à l'autre, et n'est pas remplacé par FleetCapacityNew (ces deux variables ont été déclarées en début de règle /public int/).
Pouvez vous m'aider? Bonjour,
Le comportement est normal. Toutes les modifications faites par les règles sont annulées à la fin du pas de temps. Donc "str.getSetOfVessels().getNumberOfVessels()" renverra toujours la même valeur. Peut etre dans votre cas ne faut-il pas affecter la valeur FleetCapacityOld et utiliser la valeur de la règle ou une autre stocké dans le context. -- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
Merci, pour une réponse rapide. Par contre, je ne vois pas bien la solution proposée. Vous me proposez, si je comprends bien, d'entrer dans l'interface "nombre de bateaux" une variable qui aurait été préalablement définies en context. Pour cela il faudrait que je puisse entrer une équation (comme pour la mortalité naturelle par exemple). Or, là, sauf erreur de ma part, je ne peux rentrer qu'une constante. Eric Chatellier a écrit :
Le 20/10/2010 11:59, Paul MARCHAL a écrit :
Bonjour,
J'essaie, depuis une règle, de modifier le nombre de bateaux initialement entré dans l'interface pour une stratégie donnée. Voici la partie utile de mon code:
for (Strategy str : strs){ if (str.getName().compareTo("S1") == 0){ SetOfVessels newSet; FleetCapacityOld = str.getSetOfVessels().getNumberOfVessels(); FleetCapacityNew = (int) Math.round(cumcountEmgtFra*FleetCapacityOld); newSet = str.getSetOfVessels(); newSet.setNumberOfVessels(FleetCapacityNew); str.setSetOfVessels(newSet); } }
Chaque début d'année, l'ancien nombre de bateaux (FleetCapacityOld) devrait être remplacé par FleetCapacityNew. Or, bien que la valeur de FleetCapacityNew soit correctement modifiée d'une année à l'autre, FleetCapacityOld reste toujours constant d'une année à l'autre, et n'est pas remplacé par FleetCapacityNew (ces deux variables ont été déclarées en début de règle /public int/).
Pouvez vous m'aider?
Bonjour,
Le comportement est normal. Toutes les modifications faites par les règles sont annulées à la fin du pas de temps. Donc "str.getSetOfVessels().getNumberOfVessels()" renverra toujours la même valeur. Peut etre dans votre cas ne faut-il pas affecter la valeur FleetCapacityOld et utiliser la valeur de la règle ou une autre stocké dans le context.
-- Paul Marchal IFREMER DOP/DHMMN 150, Quai Gambetta BP 699 62321 Boulogne sur mer FRANCE Tel: (+33) 321 99 56 86 Fax: (+33) 321 99 56 01 Mail: paul.marchal@ifremer.fr
ok, je pense avoir contourné le problème, en changeant chaque mois le nombre de bateaux, au début de ma règle Paul Eric Chatellier a écrit :
Le 20/10/2010 11:59, Paul MARCHAL a écrit :
Bonjour,
J'essaie, depuis une règle, de modifier le nombre de bateaux initialement entré dans l'interface pour une stratégie donnée. Voici la partie utile de mon code:
for (Strategy str : strs){ if (str.getName().compareTo("S1") == 0){ SetOfVessels newSet; FleetCapacityOld = str.getSetOfVessels().getNumberOfVessels(); FleetCapacityNew = (int) Math.round(cumcountEmgtFra*FleetCapacityOld); newSet = str.getSetOfVessels(); newSet.setNumberOfVessels(FleetCapacityNew); str.setSetOfVessels(newSet); } }
Chaque début d'année, l'ancien nombre de bateaux (FleetCapacityOld) devrait être remplacé par FleetCapacityNew. Or, bien que la valeur de FleetCapacityNew soit correctement modifiée d'une année à l'autre, FleetCapacityOld reste toujours constant d'une année à l'autre, et n'est pas remplacé par FleetCapacityNew (ces deux variables ont été déclarées en début de règle /public int/).
Pouvez vous m'aider?
Bonjour,
Le comportement est normal. Toutes les modifications faites par les règles sont annulées à la fin du pas de temps. Donc "str.getSetOfVessels().getNumberOfVessels()" renverra toujours la même valeur. Peut etre dans votre cas ne faut-il pas affecter la valeur FleetCapacityOld et utiliser la valeur de la règle ou une autre stocké dans le context.
-- Paul Marchal IFREMER DOP/DHMMN 150, Quai Gambetta BP 699 62321 Boulogne sur mer FRANCE Tel: (+33) 321 99 56 86 Fax: (+33) 321 99 56 01 Mail: paul.marchal@ifremer.fr
participants (2)
-
Eric Chatellier -
Paul MARCHAL