|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectbr.uerj.petrinetanalyzer.engine.PetriNetAnalyzer
public class PetriNetAnalyzer
Classe que cuida da engine da Análise da Rede de Petri
| Field Summary | |
|---|---|
private PetriNetProperties |
properties
Propriedades da Rede |
private javax.swing.tree.DefaultMutableTreeNode |
root
Nó raíz da árvore de alcançabilidade |
private ImplSimulator |
simulator
Engine do Simulador |
private javax.swing.JTree |
tree
Árvore de alcançabilidade |
private javax.swing.tree.DefaultTreeModel |
treeModel
Model usado para tratar a árvore de alcançabilidade, apenas prepara a árvore para ser usada na interface gráfica. |
| Fields inherited from interface br.uerj.petrinetanalyzer.common.interfaces.IntfEngineConstants |
|---|
ERROR_CODE, STATE_DUPLICADO, STATE_FRONTEIRA, STATE_INTERIOR, STATE_TERMINAL, TOKEN_INFINITO |
| Constructor Summary | |
|---|---|
PetriNetAnalyzer(ImplPetriNetBase pn)
Construtor que recebe a Rede de Petri como Parâmetro. |
|
| Method Summary | |
|---|---|
javax.swing.tree.DefaultMutableTreeNode |
addObject(javax.swing.tree.DefaultMutableTreeNode parent,
java.lang.Object child)
Adiciona um novo nó na árvore de seqüência de disparos. |
static int |
compareMarking(PetriNetState stateA,
PetriNetState stateB)
Método que compara a marcação de 2 estados recebidos como parâmetro. |
PetriNetState |
createNewState(javax.swing.tree.DefaultMutableTreeNode nodeX,
int transicao)
Cria um Novo Estado para a árvore de alcançabilidade. |
void |
geraArvore(javax.swing.tree.DefaultMutableTreeNode node)
Função recursiva, que vai varrendo a árvore que vai sendo criada, e processando seus nós. |
void |
geraArvoreAlcancabilidade()
Gera a arvore de alcançabilidade da Rede de Petri e verifica propriedades. |
PetriNetProperties |
getProperties()
Retorna as Propriedades encontradas na Rede. |
javax.swing.JTree |
getTree()
Retorna a Árvore de Alcançabilidade. |
void |
processNode(javax.swing.tree.DefaultMutableTreeNode nodeX)
Processa o Nó da árvore de alcançabilidade Algoritmo: Seja o X o nó a ser processado. 1) Se existe um nó Y na árvore que não é fronteira e tem a mesma marcação que X. |
void |
verifyConservativa(PetriNetState stateX)
Uma Rede é conservativa se o total de fichas na rede se mantém. |
void |
verifyLimite(PetriNetState stateX)
Uma rede é limitada, se para todas as marcações acessíveis, o número de fichas em qualquer lugar da Rede não exceder K (inteiro - limite). |
void |
verifyProperties(PetriNetState stateX)
Verifica várias propriedades da Rede de Petri. |
void |
verifyVivacidade(PetriNetState stateX)
Uma rede é viva se pelo menos uma transição puder ser disparada, em qualquer estado, ou seja ela é morta, se chegar a algum estado que não tenha transições para disparar. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
private ImplSimulator simulator
private PetriNetProperties properties
private javax.swing.JTree tree
private javax.swing.tree.DefaultMutableTreeNode root
private javax.swing.tree.DefaultTreeModel treeModel
| Constructor Detail |
|---|
public PetriNetAnalyzer(ImplPetriNetBase pn)
pn - Rede de Petri a ser analizada| Method Detail |
|---|
public void geraArvoreAlcancabilidade()
Algoritmo: root = Estado Inicial; processNode(root); verifyProperties(root); geraArvore(root);
public void geraArvore(javax.swing.tree.DefaultMutableTreeNode node)
Algoritmo: Seja N o nó recebido como parâmetro.
Para i de 1 até Número de filhos de N Faça
X = N.getFilho(i);
processNode(X);
geraArvore(X);
verifyProperties(X);
Fim Para
node - Nó pai, cujos filhos serão processados.public void processNode(javax.swing.tree.DefaultMutableTreeNode nodeX)
Algoritmo:
Seja o X o nó a ser processado.
1) Se existe um nó Y na árvore que não é fronteira e tem a mesma marcação que X.
então X é um nó DUPLICADO.
Para cada nó Y da arvore Faça
Se ((µ(Y) = µ(X)) E (Y != X) E (Y.tipo != FRONTEIRA)) Então
X.tipo = DUPLICADO;
retorna;
Fim Se
Fim Para.
2) Se não existem transições sensibilizadas associadas à marcação µ(x),
ou seja {d (µ(x),tj) é indefinida PARA todo tj pertencente à T};
então X é um nó TERMINAL.
Se (X.temTransicaoDisponivel == false) Então
X.tipo = TERMINAL;
retorna;
Fim Se
3) Para todas as transições tj Pertencente à T, que são habilitadas em µ[x],
cria-se um novo nó Z, na árvore de alcançabilidade, ligados ao primeiro,
através de um arco ao qual se associa a transição disparada.
Um arco, designado tj é dirigido do nó X para o nó Z. O nó X é redefinido como nó INTERIOR
e Z, torna-se um nó FRONTEIRA.
Para cada transição habilitada T de X Faça
Z = createNewState(X);
Z.tipo = FRONTEIRA;
AdicionaNóNaArvore(Z);
Fim Para
X.tipo = INTERIOR;
public PetriNetState createNewState(javax.swing.tree.DefaultMutableTreeNode nodeX,
int transicao)
Algoritmo: Seja X o pai de Z na árvore, e Z o nó a ser processado.
Z = Disparo de Tj a partir de X;
Y = X;
Enquanto ( Y <> null ) Faça
Se Marcacao(Z) > Marcacao(Y) Então
Para i de 1 até total de lugares Faça
Se (Z.lugar[i].fichas > Y.lugar[i].fichas) Então
Z.lugar[i].fichas = w;
Fim Para
Fim Se
Y = Y.getPai();
Fim Enquanto
retorna Z;
nodeX - Nó paitransicao - Número da transição disparada
public static int compareMarking(PetriNetState stateA,
PetriNetState stateB)
Algoritmo: ComparaMarcacao(A,B) <--> [Marcacao(A) > Marcacao(B)]
boolean existe = false; // Existe um lugar de A que possui fichas > Lugar de B
boolean maior = true; // Todo lugar de A possui fichas > Todo Lugar de B
Para i de 1 até numero de lugares Faça:
Se (A.lugar[i].fichas >= B.lugar[i].fichas) E (maior = true)Então
maior = true;
Se (A.lugar[i].fichas > B.lugar[i].fichas)
existe = true;
Senão
maior = false;
Fim Se
Fim Para
Se ( maior = true ) E ( existe = true) Então
retorna 1;
Se ( maior = true ) E ( existe = false ) Então
retorna 0;
Se (maior = false) Então
retorna -1;
stateA - Estado AstateB - Estado B
public javax.swing.tree.DefaultMutableTreeNode addObject(javax.swing.tree.DefaultMutableTreeNode parent,
java.lang.Object child)
parent - Nó paichild - Estado filho
public void verifyProperties(PetriNetState stateX)
stateX - Estado a ser verificadopublic void verifyLimite(PetriNetState stateX)
stateX - Estado a ser verificado.public void verifyConservativa(PetriNetState stateX)
stateX - Estado a ser verificado.public void verifyVivacidade(PetriNetState stateX)
stateX - Estado a ser verificado.public javax.swing.JTree getTree()
public PetriNetProperties getProperties()
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||