Closed xexeo closed 10 years ago
Eu estou aplicando a função shuffle() à coleção de Nodes e de Edges antes de iterar sobre elas. Não sei se é suficiente; é uma solução não-definitiva: 13993459426651bcb6036782a9154d4d4b6a9c2c
Percebi, mas tem o side effect the listar tudo fora de ordem a cada rodada. Fica muito estranho o relatório.
Acho que isso implica em corrigir o relatório (to_s) para ordenar o output, que tal?
Acho que quando a gente retirou o código de impressão de dentro do loop principal esse problema deixou de existir, certo, @xexeo ?
Oi,
Nesse modo de operação a cada ciclo/round apenas um nó "fires".
Esse é um modo teoricamente mais forte que o modo que estamos usando (a cada ciclo/round todos os nós "fire"), porque ainda existe a questão de ordem dentro do ciclo.
Basicamente, é criar um Diagram#run! diferente. Eu posso fazer isso quando o resto ficar pronto e você parte para os nós.
Oi Dei uma olhada no seu código.
Acho que o Node#stage! não funciona no caso "all", só funciona no caso "any". Isso porque o any realmente faz edge a edge, mas o all precisa que todos os edges estejam prontos para funcionar.
Volto a frisar que o all é muito importante. É a questão de ter E e OU no diagrama.
Xexéo
Eu notei que, para fazer o all, eu ia precisar de mais informação(dos edges ligados a esse nó) mas eu achei melhor fazer primeiro o any funcionar (pois aí eu já ia poder fazer todos os testes anteriores passarem) e depois generalizar para o all. O senhor acha melhor eu já atacar o all logo agora?
Uma outra coisa: eu não confio muito no machinations em si, eu nunca sei se algum comportamento é feature ou é bug. Por exemplo, se o senhor vir o diagrama que eu criei em machinations_diagrams/feature_ou_bug.xml , pode notar que os dois tokens passam em um turno só, apesar da aresta ter label
2014-04-06 23:06 GMT-03:00 Geraldo Xexeo notifications@github.com:
Oi Dei uma olhada no seu código.
Acho que o Node#stage! não funciona no caso "all", só funciona no caso "any". Isso porque o any realmente faz edge a edge, mas o all precisa que todos os edges estejam prontos para funcionar.
Ok, como lembrança, você tem que saber que os edges tem lembrança do que fazem (isso é muito estranho). Assim, se um nó é any tem "tamanho" 5 e só tem 2, ele consome os dois. Mas se algum momento os 3 ficarem disponíveis, ele vai consumir os 3. Acho que os 3 que faltam ficam "devendo".
Vou tentar fazer um modelo com esse comportamento.
Nós não precisamos fazer igualzinho, mas temos que saber as diferenças.
Xexéo
Reply to this email directly or view it on GitHubhttps://github.com/queirozfcom/rachinations/issues/11#issuecomment-39690956 .
FA "Every time you stay out late; every time you sleep in; every time you miss a workout; every time you don't give 100% - You make it that much easier for me to beat you." - Unknown author
Ainda sobre esse tema, o que o senhor acha de uma pasta com exemplos "canônicos" para definirmos o funcionamento preciso da engine?
Eu acho que a gente tá em melhores condições do que o próprio Dormans de construir um negócio preciso e sem ambiguidades, pois no nosso caso é tudo código.
2014-04-06 23:26 GMT-03:00 Felipe Almeida falmeida1988@gmail.com:
Eu notei que, para fazer o all, eu ia precisar de mais informação(dos edges ligados a esse nó) mas eu achei melhor fazer primeiro o any funcionar (pois aí eu já ia poder fazer todos os testes anteriores passarem) e depois generalizar para o all. O senhor acha melhor eu já atacar o all logo agora?
Uma outra coisa: eu não confio muito no machinations em si, eu nunca sei se algum comportamento é feature ou é bug. Por exemplo, se o senhor vir o diagrama que eu criei em machinations_diagrams/feature_ou_bug.xml , pode notar que os dois tokens passam em um turno só, apesar da aresta ter label
- Isso tá certo?
2014-04-06 23:06 GMT-03:00 Geraldo Xexeo notifications@github.com:
Oi
Dei uma olhada no seu código.
Acho que o Node#stage! não funciona no caso "all", só funciona no caso "any". Isso porque o any realmente faz edge a edge, mas o all precisa que todos os edges estejam prontos para funcionar.
Ok, como lembrança, você tem que saber que os edges tem lembrança do que fazem (isso é muito estranho). Assim, se um nó é any tem "tamanho" 5 e só tem 2, ele consome os dois. Mas se algum momento os 3 ficarem disponíveis, ele vai consumir os 3. Acho que os 3 que faltam ficam "devendo".
Vou tentar fazer um modelo com esse comportamento.
Nós não precisamos fazer igualzinho, mas temos que saber as diferenças.
Xexéo
Reply to this email directly or view it on GitHubhttps://github.com/queirozfcom/rachinations/issues/11#issuecomment-39690956 .
FA "Every time you stay out late; every time you sleep in; every time you miss a workout; every time you don't give 100% - You make it that much easier for me to beat you." - Unknown author
FA "Every time you stay out late; every time you sleep in; every time you miss a workout; every time you don't give 100% - You make it that much easier for me to beat you." - Unknown author
Correto sobre nossa possibilidade. Podemos inclusive ser mais formais. Isso pode dar uma boa dissertação de mestrado (acertar a semântica de Machinations). Vou ver seu exemplo.
Pela descrição do seu diagrama, enquanto um nó faz PUSH o outro faz PULL então os dois tokens se movem ao mesmo tempo. Acho que isso acontecerá no nosso diagrama também. Considero isso um comportamento correto, mas entendo sua dúvida. Vou postar no site do Machinations e ver o que o Dormans acha.
Fiz o NonDeterministicDiagram com uma só mudança da classe original.
There should be a way to run Diagram (and Diagram#run_round!) in full deterministic order.
This is done by firing just one node at each round, randomly chosen.
This is standard Petri Net behavior.
But should be an option in rackinations