Home

Semáforos- Sistema Multi-Agente para simulação de tráfego

image

Contents

1. El public int sentido if sentido n return 0 lse if sentido e return 1 lse if sentido s return 2 else if sentido 0 return 3 movimenta se na horizontal Ef public void moveX if sentido e posX INCREMENTO else i if sentido 0 posX INCREMENTO 43 Sist movimenta se na vertical public void moveY if sentido n posY INCREMENTO else if sentido s posY INCREMENTO emas Periciais e Rob tica Relat rio Final determina quais as estradas para onde o carro pode seguir return vector que cont m todas as estradas poss veis rd private Vector estradasPossiveis Vector E vV V V V lse if sentido sentido addElement cidade addElement cidade addElement cidade new Vector 3 gt direita Hot squerda estradaComFimEm p estradaComInicioE estradaComInicioE ta cima gt baixo lt addElement cidade addElement cidade addElement cidade estradaComInicio estradaComInicio E E osX 1 posY 1 m posX 2 posY m posX 1 posY 1 m posX 1 posY 1 m posX posY 2 lse if lt sentido else if v addElement cidade v addElement cidade addElement cidade addElement cidade addElement cidade sentido v addElemen
2. esta excepc o ocorre quando o servidor n o est a pode ser ignorado Exception ee erro n o poss vel iniciar String args new String 1 args 0 ee toString processMessage InitializeFailed args Extens o do processMessage param comando Comando a executar param obj Lista de argumentos El public void processMessage String comando Object obj String args String ob3 if comando equals UnsupportedType 65 Sistemas Periciais e Rob tica Relat rio Final System out println comando args 0 else if comando equals InitializeFailed System out println comando args 0 endAction else if comando equals Quit endAction Obtem o objecto existent m MessageQueu converte o para um objecto KQML Depois executa a ac o apropriada de acordo com o comando param kqml mensagem KQMImessage recebida return true se ac o bem sucedida false em caso contr rio X7 protected boolean Act Object o try KOMLmessage kqml new KQMImessage String o String perf kqml getValue performative int emissor new Integer kqml getValue sender intValue int receptor new Integer kqml getValue receiver substring 1 intValue String msg kqml getValue content executa a ac o cidade semaforo receptor processaMsg emissor msg perf if
3. greenleft new Imagelcon greenleft gif getImage greenright new Imagelcon greenright gif getImage redup new Imagelcon redup gif getImage reddown new Imagelcon reddown gif getImage redleft new Imagelcon redleft gif getImage redright new ImageIcon redright gif getImage imageselec roadHor jbRoad new JButton new Imagelcon roadhor Jpg JbRoad setBounds 15 40 45 45 JbRoad setBorder BorderFactory createRaisedBevelBorder JbRoad setSelected true jbRoad addMouseListener new MouseAdapter public void mouseClicked MouseEvent e mouse click e jbSimular new JButton Simular jbSimular setBorder BorderFactory createRaisedBevelBorder joSimular setBounds 30 130 70 45 JbSimular addMouseListener new MouseAdapter public voi mouse_clic jlblCarros jlblCarros jlblCarros jtxtCarros jtxtCarros jtxtCarros d mouseClicked MouseEvent e k e new JLabel N de Viaturas setFont new Java awt Font dialog 1 setBounds 15 240 90 15 new JTextField 5 setHorizontalAlignment JTextField RIGHT setFont new Java awt Font dialog 1 12 12 24 jtxtCarros setBounds 15 260 90 Sistemas Periciais e Rob tica Relat rio Final LIS jlblSim new JLabel Tipo de Simula o Jj1b1Sim setFont new java awt Font dialog 1 12 Jj1b1Sim setBounds
4. if pontoTerminal x0 y0 30 Sistemas Periciais e Rob tica Relat rio Final else if inseriuCurva estrutura x0 y0 cityArray x0 y0 curva nrCurvas 1f horizontal x0 else yO inseriuCurva estrutura x1 y1 cityArray x1 y1 curva nrCurvas pontoTerminal x1 true true ton ts curva new Curva this x0 y0 y1 rory ts curva new Curva this x1 yl for int i x0 i lt x1 i for int J y0 j lt y1 j if estrutura i j e estrutura i j s this cityArray i 3 ts cross this cityArray i 1 3 1 ts redup this cityArray i 1 3 1 ts redright this cityArray li 1 3j 1 ts reddown this cityArray i 1 3 1 ts redleft this semaforo nrSemaforos new Semaforo nrSemaforos this i Jj if horizontal estrada nrEstradas new Estrada this xTmp yImp i 1 5 divideEstrada i 3 1 xTmp i 1 yImp j else estrada nrEstradas new Estrada this xTmp yTmp y JLN divideEstrada i l j xTmp i yTmp j 1 else if estrutura i j c estrutura i j e cityArray i j road estrada nrEstradas new Estrada this xTmp yImp x1 yl if inseriuCurva detQuadrante return true return false 31 Sistemas Periciais e Rob tica Relat rio Final determina os quadrantes de toda
5. if inicioEstrada cidade insereEstrutura estradaXini coordX estradaYini coordY else estradaXini coordX estradaYini coordY inicioEstrada inicioEstrada cidade repaint 25 Sistemas Periciais e Rob tica Relat rio Final lse if e getSource jbRoad imageselec roadHor lse if e getSource jbSimular if jbSimular getText equals Simular simular true cidade nrCarro new Integer jtxtCarros getText intValue if jrbFixo isSelected tempo fixo cidade funcionamento F cidade tempo new Integer JtxtTempo getText intValue else if jrbReactivo isSelected cidade funcionamento R reactivos else cidade funcionamento M troca de mensagens ti connect JbSimular setText Parar else ti shutdown simular false JbSimular setText Simular e Cidade java import java awt import java lang Math public class Cidade extends Canvas vari veis gerais int locX locY sizeX sizeY boxX boxY macroX macroY NumMacroPixelsX NumMacroPixelsY array de imagens Image cityArray simulador TrafficSim ts dimens es Dimension dts dpnl tamanho da grelha onde poss vel editar a cidade 26 Sistemas Periciais e Rob tica Relat rio Final protected static int MACRO PIXEL 40 n mero m ximo de sem foros fin
6. totall semaforo estrada 1 nrCarrosl try total2 sitVizinhos semVizinhos 1 nrSem 0 sitVizinhos semVizinhos 1 nrSem 1 sitVizinhos semVizinhos 1 nrSem 2 catch NullPointerException npe total2 semaforo estrada 2 nrCarros2 try total3 sitVizinhos semVizinhos 2 nrSem 0 sitVizinhos semVizinhos 2 nrSem 1 sitVizinhos semVizinhos 2 nrSem 2 catch NullPointerException npe total3 semaforo estrada 3 nrCarros2 Ro 53 Sistemas Periciais e Rob tica Relat rio Final System out println semaforo nrSem TOTALES total0 totall total2 total3 es A novoVerde determina o do maior novoVerde maximo total0 totall total2 total3 semaforo mudaLuz novoVerde actualiza a matriz que representa a cidade if novoVerde 0 semaforo cidade cityArray semaforo posX semaforo cidade ts greendown semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redright 1 semaforo posY 1 semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redup semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redleft else if novoVerde 1 semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts greenleft semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade
7. semaforo nrSem semaforo verde catch LSException lse while flag if semaforo estrada 0 nrCarrosl 0 flag true semaforo mudaLuz 3 semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts greenright semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redup semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts reddown semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redleft else if semaforo estrada 1 nrCarrosl 0 flag true semaforo mudaLuz 0 semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts greendown semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redright semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redup semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redleft else if semaforo estrada 2 nrCarros2 0 flag true semaforo mudaLuz 1 semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts greenleft 51 Sistemas Periciais e Rob tica Relat rio Final semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts reddown semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redright sema
8. carro sentido o carro cidade getGraphics clearRect carro posX 29 LD Lo else if carro sentido e carro cidade getGraphics clearRect carro posX Ty LDA LS cidade repaint carro cidade ConvertFromMacroCoordinate carro posX carro cidade ConvertFromMacroCoordinate carro posY MACRO PIXEL MACRO PIXEL move se para a direita carro posX carro INCREM ENTO 59 Sistemas Periciais e Rob tica Relat rio Final else if accao equals esquerda significa que avan ou uma posi o carro distPercorrida apaga a posi o anterior if carro sentido o carro cidade getGraphics clearRect carro posX carro posY 29 15 15 ER if carro sentido e carro cidade getGraphics clearRect carro posX carro posY 7 15 15 carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX MACRO PIXEL carro cidade ConvertFromMacroCoordinate carro posY MACRO PIXEL MACRO PIXEL MACRO PIXEL move se para a esquerda carro posX carro INCREMENTO else if accao equals cima significa que avan ou uma posi o carro distPercorrida apaga a posic o anterior if carro sentido n i carro cidade getGraphics clearRect carro posX Et carrosposZ 15 Lo se 1f carro sentido s carro cidade getGraphics clearRect carro posX 29 carro posY
9. determina a nova estrada a percorrer estradaSeg escolheEstradaSeguinte accao espera pelo verd while lcarro estrada cidade semaforo semaforo luz carro sentido actualiza a vari vel estat stica carro tempoEsperat pequena pausa tryl sleep 1000 catch java lang InterruptedException e apaga a posi o anterior if carro sentido n carro cidade getGraphics clearRect carro posX 7 carro posY 15 15 carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX 15 carro cidade ConvertFromMacroCoordinate carro posY 10 MACRO PIXEL MACRO PIXEL else if carro sentido s carro cidade getGraphics clearRect carro posX 29 carro posY 15 15 carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX 15 carro cidade ConvertFromMacroCoordinate carro posY 10 MACRO PIXEL MACRO PIXEL else if carro sentido o carro cidade getGraphics clearRect carro posX carro posY 29 15 15 carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX 15 carro cidade ConvertFromMacroCoordinate carro posY 10 MACRO PIXEL MACRO PIXEL else 14 if carro sentido e carro cidade getGraphics clearRect carro posX carro posY 7 15 15 carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX 15 carro cidade ConvertFromMacroCoordinate carro pos
10. norte S sul E este O oeste char sentido vari veis estat sticas int distPercorrida int inversoes 41 Sistemas Periciais e Rob tica Relat rio Final Construtor Representa um carro param cidade A cidad El st a que pertenc carro public Carro Cidade c this cidade posx posY distPercorrida sentido e 1 inversoes 0 1 Actualiza as vari veis estat sticas e determina a estrada a percorrer el public void entraCidade int estradas new int cidade nrEstradas int nrLimite 0 determina o das estradas com inicio ou fim no limite da cidade int i 0 i lt cidade nrEstradas i if cidade estrada i limite estradas nrLimite ds for this estrada cidade estrada estradas new Random nextInt nrLimite 1 this this this posX cidade ConvertFrom posY cidade ConvertFrom acroCoordinate estrada entradaX acroCoordinate estrada entradaY sentido estrada sentido Entrada posX posY if sentido o sentido n this estrada nrCarrosl r else this estrada nrCarros2 Chegou a um cruzamento param estradaSeguinte A nova estrada EH public void mudaEstrada Estrada estradaSeguinte if sentido o sentido n this estrada nrCarrosl else this estrada nrCarros2 if Math abs cidade ConvertToMacroCoordinate posX estradaSe
11. perf equals disconnected String args new String 1 args 0 kqml getValue sender _connections removeConnection args 0 catch ParseException e return false return true AX A A OR 24 Envia uma mensagem para um sem foro param emissor Identifica o do sem foro qu mite a mensagem Gparam receptor Identifica o do sem foro vai receber a mensagem param msg A mensagem a enviar Gparam tipo O tipo da mensagem a enviar public void enviaMsg int emissor String receptor String msg String tipo try KOMLmessage kqml new KQMLmessage kgmi addFieldValuePair performative tipo kqml addFieldValuePair content msg 66 Sistemas Periciais e Rob tica Relat rio Final kaqml addFieldValuePalir sender emissor kaqml addFieldValuePair receiver receptor System out println kqml getSendString sendMessage kqml Exception pe System out println pe 67
12. 15 15 carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX MACRO PIXEL carro cidade ConvertFromMacroCoordinate carro posY MACRO PIXEL MACRO PIXEL MACRO PIXEL move se para cima carro posY carro INCREMENTO else if accao equals baixo significa que avan ou uma posi o carro distPercorrida apaga a posic o anterior if carro sentido n carro cidade getGraphics clearRect carro posX 7 carro posY 15 15 ATA if carro sentido s E carro cidade getGraphics clearRect carro posX 29 carro posY 15 15 60 Sistemas Periciais e Rob tica Relat rio Final carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX MACRO PIXE carro cidade ConvertFromMacroCoordinate carro posY MACRO PIXEL y MACRO_PIXEL MACRO_PIXEL move se para baixo carro posY carro INCREMENTO chegou a uma estrada sem sa da else if accao equals inverte significa que avan ou uma posi o carro distPercorrida carro inversoes apaga a posic o anterior if carro sentido n carro cidade getGraphics clearRect carro posX 7 carro posY 15 15 carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX 15 carro cidade ConvertFromMacroCoordinate carro posY 10 MACRO PIXEL MACRO PIXEL else i
13. Mensagens Estat sticas da Simulac o Tipo de Simula o Mensagens N de Sem foros 2 N de Estradas N de Curvas N de Carros Dist ncia Total Percorrida Dist ncia M dia por carro N Total de Invers es de Marcha Tempo de Espera Total Tempo de Espera M dio Sistemas Periciais e Rob tica Relat rio Final Fig 13 Resultados da simula o com comunica o 17 Sistemas Periciais e Rob tica Relat rio Final MELHORAMENTOS Caso tiv ssemos tempo para tal uma das funcionalidades que poderia ser implementada prende se com o facto de criar estradas com prioridades diferentes Como sabido na realidade existem ruas com maior prioridade do que outras Outro ponto que poderia ter sido implementado e est de certa forma relaccionado com as prioridades a cria o de sinaliza o de tr nsito Este ponto possibilitaria a defini o de estradas com um ou dois sentidos De referir que na presente simula o existem apenas estradas com dois sentidos A exist ncia de pe es a cruzarem a via p blica uma realidade que tamb m seria interessante implementar Outras estruturas existentes numa rede de estradas tais como rotundas viadutos t neis ou pontes tamb m poderiam ser tidas em conta caso tiv ssemos tempo para tal Todos estes pontos ficam aqui registados com o intuito de ser implementados numa futura vers o do simulador BIBLIOGRAFIA Ao longo deste vasto projecto a
14. O m todo pertence int int verifica se determinado ponto pertence estrada Para alterar a localiza o de uma estrada existe o m todo alteraPosicao int int int int que recebe como argumentos as novas posi es dos pontos inicial e final da estrada e Carro java As vari veis de classe s o INCREMENTO que indica o n mero de pixeis que um carro se desloca de cada vez a estrada onde se encontra o carro as suas coordenadas em pixeis O sentido de deslocamento do carro e vari veis estat sticas tais como distPercorrida que indica a dist ncia que este carro j percorreu ao longo de toda a simula o n mero de inversoes de marcha que o carro fez por ter chegado a uma rua sem sa da e o tempoEspera que indica o tempo de espera em segundos num ao longo de todos os sem foros 8 Sistemas Periciais e Rob tica Relat rio Final O construtor inicializa as vari veis de classe Para entrar na cidade invocado o m todo entracidade feita a actualiza o das vari veis estat sticas e determinada a estrada a percorrer Quando o carro chega a um cruzamento necess rio invocar mudaEstrada Estrada que recebe como argumento a estrada seguinte No entanto quando chega ao fim de uma estrada sem sa da utilizado o m todo invertesentido Por vezes necess rio converter o char que representa o sentido do movimento j apresentado na ltima figura para inteiro Assim est justificada a exist ncia d
15. UTILIZADOR Ao desenvolver este simulador foi tido em considera o desde o in cio do projecto a cria o de uma interface intuitiva Em termos gerais consideramos este objectivo atingido No entanto existem alguns pontos que consideramos necess rio focar Cria o de Estradas Clique no ponto inicial e posterior clique no ponto final Cria o de Cruzamentos Um cruzamento resulta da intercep o de duas estradas perpendiculares Assim basta criar uma estrada e de seguida criar outra que a intercepte perpendicularmente Cria o de curvas Inicia se por criar uma estrada Seguidamente cria se uma segunda estrada onde um dos seus pontos terminai coincide com um dos pontos terminais da estrada criada inicialmente Escolha do tipo de simula o No painel existente no lado esquerdo da janela est presente um grupo de 3 bot es de r dio Basta seleccionar qual o tipo de simula o que pretendemos tempo fixo agentes reactivos ou mensagens Se for escolhido tempo fixo o valor existente na caixa de texto que se encontra ao lado direito do grupo de bot es de r dio funciona como temporizador In cio e fim da simula o Existe um bot o que alterna a sua indica o entre Simular e Parar 19 Sistemas Periciais e Rob tica Relat rio Final LISTAGEM DO C DIGO e Transito pro accao NrCarro ScurvalS carro NrCarro PosX PosY _ curva _ PosX PosY 1 1 accao NrCarro curva2
16. a abrir de acordo com a indica o do n mero de carros que poder o convergir para cada uma das 4 estradas do cruzamento param param param param E v0 v1 v2 v3 import import import import public v0 O v1 O v2 O v3 O de de de de estrada 0 estrada 1 estrada 2 estrada 3 n mero n mero n mero n mero carros carros carros carros na na na na int v2 private int maximo int v0 int vl int v3 if Math max v0 v1 v0 amp amp Math max v0 v2 v0 amp amp Math max v0 v3 return 3 if Math max vl v0 v1 amp amp Math max vl v2 v1 amp amp Math max vl v3 return 0 if Math max v2 v0 v2 amp amp Math max v2 vl v2 amp amp Math max v2 v3 return 1 if Math max v3 v0 v3 amp amp Math max v3 v1 v3 amp amp Math max v3 v2 return 2 CarroThread java Jjava lang ThreadLocal java util java awt amzi ls class CarroThread extends Thread o carro que este thread comanda Carro carro n mero de ordem do carro int numCarro vari vel de controlo boolean stop false servidor l gico LogicServer ls prolog int MACRO_PIXEL 40 55 Sistemas Periciais e Rob tica Relat rio Final Construtor param numCarro O n mero do carro a qu ste thread est associado fparam c O carro a qu ste thr
17. carro NrCarro 1 1 _ estradasPossiveis EstradaActual s El E2 E3 estrada EstradaActual X0 YO _ _ Xmenos is X0 1 Xmais is X0 1 21 Sistemas Periciais e Rob tica Relat rio Final Ymenos is Y0 1 Ymenos2 is Y0 2 estrada El _ _ Xmenos Ymenos estrada E2 _ _ X0 Ymenos2 estrada E3 Xmais Ymenos _ _ 1 estradasPossiveis EstradaActual n E1 E2 E3 estrada EstradaActual _ _ X1 Y1 Xmenos is X1 1 Xmais is X1 1 Ymais is Y1 1 Ymais2 is Y1 2 estrada El _ _ Xmenos Ymais estrada E2 X1 Ymais2 _ _ estrada E3 Xmais Ymais _ 2 estradasPossiveis EstradaActual o El E2 E3 estrada EstradaActual _ _ X1 Y1 Xmais is X1 1 Xmais2 is X1 2 Ymenos is Y1 1 Ymais is Y1 1 estrada El _ _ Xmais Ymenos estrada E2 Xmais2 Yl _ _ estrada E3 Xmais Ymais _ _ estradasPossiveis EstradaActual e El E2 E3 estrada EstradaActual X0 YO _ _ Xmenos is X0 1 Xmenos2 is X0 2 Ymenos is YO 1 Ymais is YO 1 estrada El _ _ Xmenos Ymenos estrada E2 _ _ Xmenos2 Y0 estrada E3 Xmenos Ymais _ _ 1 maximo X X X maximo X Y X X gt Y 1 maximo X Y Y SCE 5 TRANSFORMA formata 1 formata L Ls Str string_integer S L formata Ls Strl
18. como argumento Este m todo altera a matriz que representa as estruturas em cada macro pixel inserindo nos pontos respectivos o caracter e estrada O m todo detQuadrante utilizado para determinar o quadrante de uma curva Para melhor ilustrar o conceito de quadrante apresentada de sequida uma imagem al F 4 1 quadrante 2 quadrante 3 quadrante 4 quadrante Fig 3 Quadrantes das Curvas O m todo divideEstrada int int utilizado quando se pretende uma divis o de uma estrada devido cria o de um cruzamento Sistemas Periciais e Rob tica Relat rio Final O m todo podeInserirEstrutura int int int int permite verificar se poss vel ou n o inserir uma estrada nas coordenadas apresentadas como argumento Por vezes necess rio determinar se existe alguma estrada que inicie ou termine num determinado ponto Para tal foi criado o m todo pontoTerminal int int que recebe como argumentos as coordenadas de um dado ponto e retorna verdadeiro ou falso caso exista definida na cidade uma estrada com in cio ou fim neste ponto No entanto existem situa es em que n o indiferente saber se exise alguma estrada que inicie ou termine num dado ponto Por vezes exigido mais pormenor Assim est o implementados os m todos estradaComInicioEm int int estradaComFimEm int int que retornam a estrada que tem o in cio ou fim respectivamente no ponto passado como argumento Se existi
19. dp carro cidade 1 carro posY carro posY Carro MACRO_PIXEL MACRO_PIXEL cidade cidade cidade Sistemas Periciais e Rob tica Relat rio Final apaga a posic o anterior carro cidade getGraphics clearRect carro posxX 15 15 cidade repaint carro cidade ConvertFromMacroCoordinate carro posX carro cidade ConvertFromMacroCoordinate carro posY MACRO PIXEL MACRO PIXEL if 1 carro estrada orientacao horizontal carro estrada nrCarrosl carro estrada estradaComFimEm carro cidade ConvertToMacroCoordinate carro posX 1 Convert ToMacroCoordinate carro posY 1 false carro posX ConvertFromMacroCoordinate carro cidade Convert ToMacroCoordinate carro posX carro posY ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posY carro sentido Usb carro estrada nrCarros2 else carro estrada nrCarrosl carro estrada estradaComFimEm carro cidade ConvertToMacroCoordinate carro posX 1 Convert ToMacroCoordinate carro posY 1 true carro posX ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posX carro posY ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posY carro sentido e carro estrada nrCarros2 else if accao equals direita significa que avan ou uma posi o carro distPercorrida apaga a posic o anterior if
20. e2 e3 o emissor est por baixo deste semaforo emissor 0 e2 emissor 1 e3 emissor 2 e0 st esquerda deste semaforo emissor 0 e3 hos emissor 1 e0 hos emissor 2 el em cima deste semaforo hos emissor 0 mensageiro sitVizinhos emissor 1 hos emissor 2 el el e2 Cria uma string contendo a informac o relativa a situac o deste sem foro dirigem return Uma mensagem formatada para ser enviada ao servidor de mensagens relativamente ao n mero de carros qu a 1 a S private String detSituacao 38 Sistemas Periciais e Rob tica Relat rio Final return A 0 estrada 0 nrCarrosl 1 o estrada 1 nrCarrosl 2 estrada 2 nrCarros2 t 34 nm estrada 3 nrCarros2 Aun e Estrada java public class Estrada coordenadas int xIni xFim yIni yFim nr de carros em cada direc o int nrCarrosl nrCarros2 false vertical true horizontal boolean orientacao a cidada a que esta estrada pertence Cidade cidade Construtor Cria uma estrutura que representa uma estrada real param cidade A cidade a que pertenc sta estrada param x0 Coordenada x do ponto inicial param y0 Coordenada y do ponto inicial param x1 Coordenada x do ponto final param y1 Coordenada y do ponto final public Estrada Cidade cidade int x0 int y0 int x1 int yl
21. el yFim else if el xFim e2 xFim amp amp el yFim e2 yFim quadrante 4 x el xFim y el yFim e ThreadInterface java import amzi ls import java awt import java util public class ThreadInterface protected static Cidade cidade protected static CarroThread Cthread protected static SemThread Sthread public static LogicServer 1s public static LogicServer dummy amp amp amp el orientacao lel orientacao lel orientacao el orientacao 46 Sistemas Periciais e Rob tica Relat rio Final protected static Mensageiro mensageiro Permite inicializa es dos threads param cidade A cidade a que pertenc ste ThreadInterfac Ey public static void inicializa Cidade cid throws LSException cidade cid Cthread new CarroThread cidade MAX_CARROS Sthread new SemThread cidade MAX_SEM ls new LogicServer cidade MAX CARROS dummy new LogicServer dummy Init dummy Load transito xpl for int i 0 i lt cidade MAX_CARROS i ls i new LogicServer Permite actualiza es do Logic Server EL private static void actualizaLS for int i 0 i lt cidade nrCarro i try ls 1 Int MU 1s i Load transito xpl1 catch LSException lse System out println EXCEPGAO ao iniciali
22. passagem de mensagens Sem foro Quando obt m a resposta de todos os seus vizinhos o sem foro que efectuou o pedido tem que decidir qual das estradas vai ser contemplada com o sinal verde Como pretendemos um agente independente ele n o se pode basear cegamente na informa o que os seus vizinhos lhe facultam Por isso tem ele pr prio que efectuar a sua an lise Na figura seguinte encontram se representados nas setas os valores fornecidos pelos quatro sem foros vizinhos S o valores que os sem foros vizinhos prev m que circulem para essa estrada Nos c rculos figuram o n mero de carros que o sem foro consegue ver pois est o a circular nas estradas adjacentes Apesar de o nosso vizinho de ESTE apresentar um valor de 13 carros o nosso sem foro vai abrir verde para a estrada de SUL pois aquela que apresenta uma soma maior 5 carros a 7 carros 13 carros 3 carros Fig 9 An lise de decis o 11 Sistemas Periciais e Rob tica Relat rio Final Como apoio para a realiza o deste algoritmo foi desenvolvido o m todo maximo int int int int que determina qual o sem foro a abrir de acordo com a indica o do n mero de carros que poder o convergir para cada uma das 4 estradas do cruzamento e CarroThread java Esta classe tamb m uma sub classe de Thread Tem como fun o o controlo dos movimentos de um carro ao longo das ruas da cidade O m todo run possui um ciclo while
23. que s termina quando invocado o m todo terminate Este ciclo inicia por consultar o Prolog com o intuito de determinar qual a pr xima ac o que o carro val tomar Este procedimento recorre aos m todos ExecStr GetStrArg que surgem em amzi 1s Esta consulta tem obrigatoriamente que ser synchronized para evitar conflitos entre os v rios thread s a correr De seguida surge uma sequ ncia de instru es if else if Dependendo da ac o ordenada pelo Prolog s o executados os procedimentos respectivos As ac es poss veis s o entraCidade curval curva2 curva3 curva4 direita esquerda cima baixo inverte Cruzamento Estas ac es t m explica o intuitiva no entanto encontram se devidamente comentadas no c digo que surge em anexo Quando estamos perante um cruzamento necess rio determinar aleatoriamente qual a estrada a seguir Para tal existe o m todo escolheEstradaSeguinte String que recebe a string retornada pelo Prolog que corresponde a uma lista de estradas poss veis O m todo tem que descartar essa string e escolher a pr xima estrada pela qual o carro vai circular Por fim actualizado o Prolog de acordo com a nova posi o do carro feita uma pequena pausa e todo o processo se repete at a simula o terminar e Mensageiro java 2 Esta classe utilizada apenas no caso de o utilizador escolher a op o de agentes comunicativos Est o dispon veis dois construtores Um d
24. r E E EstPoss quais as estradas poss veis chegou a um cruzamento scolhe a nova estrada 20 Sistemas Periciais e Rob tica Relat rio Final accao NrCarro NovaEstrada carro NrCarro PosX PosY n estrada NrEstrada _ _ PosX PosY estradasPossiveis NrEstrada n EstPoss quais as estradas poss veis neste cruzamento Ymais is PosY 1 semaforo NrSem PosX Ymais _ formata NrSem EstPoss EstradasStr strcat cruzamento EstradasStr NovaEstrada 1 o chegou a uma estrada sem sa da inverte o sentido accao NrCarro SinverteS carro NrCarro PosX PosY o estrada parai PosX PosY 1 chegou a uma estrada sem sa da inverte o sentido accao NrCarro SinverteS carro NrCarro PosX PosY e estrada _ PosX PosY _ _ 1 chegou a uma estrada sem sa da inverte o sentido accao NrCarro SinverteS carro NrCarro PosX PosY n estrada y rar PosX PosY 1 chegou a uma estrada sem sa da inverte o sentido accao NrCarro SinverteS carro NrCarro PosX PosY s estrada r PosX PosY _ _ 1 accao NrCarro SdireitaS carro NrCarro _ _ O 1 accao NrCarro SesquerdaS carro NrCarro _ _ e 1 accao NrCarro cima carro NrCarro y cr 5 1 accao NrCarro baixo carro NrCarro _ _ n 1 o carro entra na cidade accao NrCarro entraCidade
25. valor l gico da flag stop Em contrapartida o m todo run utilizado para o processamento de ac es de um conjunto de sem foros Para que n o surjam problemas de sincroniza o na actualiza o da base de conhecimento Prolog este m todo teve que ser definido como sendo synchronized Em primeiro lugar verificado o tipo de funcionamento do sem foro fixo reactivo ou troca de mensagens No processamento do tipo fixo invocado o m todo mudaLuz definido na classe semaforo De seguida actualizado toda a base de conhecimento em Prolog atrav s da invoca o dos m todos RetractStr AssertaStr Neste momento ent o poss vel actualizar as luzes dos sem foros na interface gr fica De acordo com a vari vel tempo da classe Semaforo efectuada uma pausa Isto porque estamos perante um conjunto de sem foros de temporiza o fixa Finda esta pausa todo o processo referido se repete Num processamento do tipo reactivo o processo difere na medida em que o sem foro tem a vis o das quatro estradas que para ele convergem Assim o sem foro abre o verde naquela estrada que tem mais carros Se passarmos para o processamento do tipo transmiss o de mensagens a situa o torna se um pouco mais complexa A solu o implementada pode ser mais facilmente percebida se for analisada o esquema seguinte 10 Sistemas Periciais e Rob tica Relat rio Final Resposta 2 1 Z Pergunta situa o Fig 8 Funcionamento da
26. 0 g drawString new Integer nr nrCarro toString 300 600 Converte uma coordenada em pixeis para macro pixeis param coord A coordenada em pixeis a converter para macro pixeis public static int ConvertToMacroCoordinate int coord return int java lang Math ceil double coord MACRO_PIXEL 1 Converte uma coordenada em macro pixeis para pixeis param macroCoord A coordenada em macro pixeis a converter para pixeis 5 XA A public static int ConvertFromMacroCoordinate int macroCoord return macroCoord MACRO PIXEL Instala uma estrada na cidade param xIni A coordenada X inicial da estrutura a inserir na cidade param xFim A coordenada X final da estrutura a inserir na cidade param yIni A coordenada Y inicial da estrutura a inserir na cidade param yFim A coordenada Y final da estrutura a inserir na cidade return true se conseguiu inserir correctamente fals m caso contr rio E public boolean insereEstrutura int xIni int xFim int yIni int yFim int x0 y0 x1 yl xTmp yTmp boolean horizontal yIni yFim boolean inseriuCurva false Image road xImp x0 Math min xIni xFim xl Math max xIni xFim yImp y0 Math min yIni yFim yl Math max yIni yFim if horizontal estrada horizontal road ts roadHor else estrada vertical road ts roadVert if podeInserirEstrutura x0 x1 y0 yl
27. 13 Sistemas Periciais e Rob tica Relat rio Final Outro ponto relevante o facto de como os resultados s o mostrados Uma interface amig vel com uma composi o crom tica suave e constitu da por cores agrad veis sempre bem vinda Um algoritmo que ofere a um bom estudo estat stico seria o ideal Melhor ainda seria aquele que permitisse personalizar essa apresenta o para satisfazer os interesses de cada utilizador O realismo tamb m outro ponto a valorizar Ou seja numa cidade as ruas podem estar distribu das das mais variadas formas estradas horizontais estradas verticais cruzamentos entroncamentos curvas Uma simula o que contemple a inser o destas diversas formas dever ser valorizada RESULTADOS EXPERIMENTAIS Foram realizadas diversas experi ncias quer ao longo da elabora o do simulador quer ap s a sua conclus o Vamos salientar um teste modelo que foi realizado ap s todas as funcionalidades que nos propusemos terem sido implementadas Este teste foi realizado com o objectivo de analisar os tr s tipos de funcionamento dos sem foros quanto sua efici ncia Assim foram criadas tr s cidades id nticas com as mesmas ruas sem foros curvas e carros e foi dada ordem de iniciar a simula o Cinco minutos depois foi terminada a simula o e obtidos os resultados apresentados nas figuras seguintes ES Simula o do tr fego de uma cidade BEE SE T N de Viaturas E Ti
28. 15 290 120 15 btSim new ButtonGroup jrbFixo new JRadioButton Tempo Fixo true jrbFixo setFont new java awt Font dialog 1 12 jrbFixo setBounds 15 315 100 15 jrbReactivo new JRadioButton Reactivo false jrbReactivo setFont new java awt Font dialog 1 12 jrbReactivo setBounds 15 335 120 15 jrbMsg new JRadioButton Mensagens false jrbMsg setFont new java awt Font dialog 1 12 jrbMsg setBounds 15 355 120 15 btSim add jrbFixo btSim add jrbReactivo btSim add jrbMsg jtxtTempo new JTextField 10 jtxtTempo setHorizontalAlignment JTextField RIGHT jtxtTempo setFont new Java awt Font dialog 1 12 jtxtTempo setBounds 125 315 35 15 jlblTempo new JLabel Seg Jlb1Tempo setFont new Java awt Font dialog 1 12 jlbiTempo setBounds 165 315 35 15 panell add jbRoad panell add jbSimular panell add jlblCarros panell add jtxtCarros panell add J1b1Sim panell add jtxt Tempo panell add jlbliTempo panell add jrbFixo panell add jrbReactivo panell add jrbMsg mouse click Processa o evento click do rado param e Um evento do rato Ky private void mouse click MouseEvent e if e getSource cidade int coordX cidade ConvertToMacroCoordinate e getX int coordY cidade ConvertToMacroCoordinate e getY estrada if imageselec equals roadHor
29. SISTEMAS PERICIAIS E ROB TICA RELAT RIO FINAL SISTEMA MULI AGENTE SIMULANDO O TR FEGO DE UMA CIDADE Ant nio Manuel da Costa Delgado e197019Ofe up pt V nia Guiomar da Silva Gon alves e197011 Ofe up pt Sistemas Periciais e Rob tica Relat rio Final OB ECTIVOS Este projecto visa desenvolver uma interface que permita a simula o de tr nsito numa cidade baseada num sistema multi agente Os agentes s o independentes e representam um conjunto de sem foros colocados num cruzamento Pretende se com este projecto comparar tr s abordagens sem foros de tempo fixo em que ao fim de um certo tempo definido pelo utilizador o sem foro muda de luz agentes reactivos em que o gestor de sem foros reage a sensores tais como n mero de ve culos que passaram n mero de ve culos chegados ao cruzamento num certo intervalo de tempo entre outros sistemas multi agente em que os v rios gestores de sem foros comunicam entre si trocando informa es e sugest es Com estas abordagens pretende se realizar testes sobre os tempos de espera m ximo e m nimo e sobre a raz o do n mero de ve culos sa dos sobre os entrados no sistema MOTIVA O A simula o que foi implementada visa essencialmente avaliar o comportamento de agentes reactivos e de sistemas multi agente Consideramos que este projecto pode abranger as duas perspectivas acad mica e n o acad mica Em termos acad micos este projecto ex
30. Y 10 MACRO PIXEL MACRO PIXEL 62 Sistemas Periciais e Rob tica Relat rio Final avan a para a nova estrada synchronized this carro mudaEstrada estradaSeg desenha o carro na nova posic o if carro sentido n carro cidade getGraphics drawImage Image carro cidade ts carrolmg Carro posX 7 carro posY null else if carro sentido s carro cidade getGraphics drawImage Image carro cidade ts carrolmg carro posX 29 carro posY null else if carro sentido o carro cidade getGraphics drawImage Image carro cidade ts carroImg carro poskX carro posY 29 null else if carro sentido e carro cidade getGraphics drawImage Image carro cidade ts carrolmg carro posX carro posY 7 null synchronized this ls RetractStr carro numCarro _ _ _ ls AssertaStr carro numCarro carro cidade ConvertToMacroCoordinate carro posX 1 carro cidade ConvertToMacroCoordinate carro posY 1 carro sentido pequena pausa try sleep 400 catch java lang InterruptedException e catch Exception ee System out println EXCEPCAO ee Determina qual a proxima estrada a percorrer param estradas A lista de estradas poss veis retornada pelo prolog Ap private Estrada escolheEstradaSeg
31. al int MAX SEM 20 n mero m ximo de carros final int MAX CARROS 30 n mero m ximo de estradas final int MAX ESTRADAS 50 n mero m ximo de curvas final int MAX CURVAS 20 n mero de semaforos actualment xistentes na cidade int nrSemaforos n mero de carros actualment xistentes na cidade int nrCarro n mero de estradas actualment xistentes na cidade int nrEstradas n mero de curvas actualment xistentes na cidade int nrCurvas temporiza o dos semaforos s no modo de tempo fixo int tempo funcionamento dos sem foros Fixo Reactivo ou Mensagens char funcionamento F matriz das indica a estrutura que existe em cada ponto da cidade char estrutura as estradas que existem na cidade Estrada estrada as curvas que existem na cidade Curva curva os semaforos que existem na cidade Semaforo semaforo os carros que existem na cidade Carro carro Construtor Regista todas as informa es relativas s diferentes estruturas existentes na simula o a representa o de uma cidade real fparam ts Representa a simula o a que est associada esta cidade param dts As dimens es da janela A ARCA A A A CACA gt Cidade TrafficSim ts Dimension dts super cria um Canvas this ts ts this dts dts dpn1 ts panell getSize locX dpnl width locY 0 sizeX th
32. carro NrCarro PosX PosY _ curva _ PosX PosY 2 1 accao NrCarro curva3 carro NrCarro PosX PosY _ curva _ PosX PosY 3 1 accao NrCarro curva4 carro NrCarro PosX PosY _ curva _ PosX PosY 4 1 chegou a um cruzamento scolhe a nova estrada accao NrCarro NovaEstrada carro NrCarro PosX PosY o estrada NrEstrada _ _ PosX PosY estradasPossiveis NrEstrada o EstPoss quais as estradas poss veis neste cruzamento Xmais is PosX 1 semaforo NrSem Xmais PosY _ formata NrSem EstPoss EstradasStr strcat cruzamentoS EstradasStr NovaEstrada 1 chegou a um cruzamento scolhe a nova estrada accao NrCarro NovaEstrada x carro NrCarro PosX PosY e estrada NrEstrada PosX PosY estradasPossiveis NrEstrada e neste cruzamento Xmenos is PosX 1 semaforo NrSem Xmenos PosY _ formata NrSem EstPoss EstradasStr strcat cruzamentoS EstradasStr NovaEstrada 1 F r E EstPoss quais as estradas poss veis chegou a um cruzamento scolhe a nova estrada accao NrCarro NovaEstrada carro NrCarro PosX PosY s estrada NrEstrada PosX PosY estradasPossiveis NrEstrada s neste cruzamento Ymenos is PosY 1 semaforo NrSem PosX Ymenos _ formata NrSem EstPoss EstradasStr strcat cruzamento EstradasStr NovaEstrada 1 r
33. ce as estradas adjacentes estrada a sua localiza o posx e posY e o seu estado crom tico 1uz O construtor trata de inicializar as vari veis De referir que 1uz 0 toma o valor true o que significa que o sem foro zero est a verde Todos os restantes sem foros do cruzamento est o vermelhos ou seja luz 1 luz NR ESTRADAS 1 tomam o valor false Os m todos insereEstradas Estrada Estrada Estrada Estrada insereEstradas permitem adicionar ao array de estradas aquelas que s o adjacentes ao sem foro em quest o O m todo verde retorna um valor inteiro que indica qual o sem foro que se encontra verde num determinado momento Sistemas Periciais e Rob tica Relat rio Final O m todo mudaLuz int trata de alterar a indica o luminosa dos sem foros ou seja acende o verde no sem foro que passado como argumento ap s ter colocado todos os outros a vermelho O m todo mudaLuz trata de acender o verde no sem foro seguinte Este m todo pressup em que os sem foros acendem verde de uma forma rotativa e sempre pela mesma ordem Esta ordem coincide com o sentido dos ponteiros do rel gio Caso se pretenda acender um sem foro em particular necess rio recorrer ao m todo mudaLuz int que recebe como argumento o identificador do novo sem foro a acender a luz verde Para saber quais os sem foros que s o vizinhos a este sem foro foi escrito o m todo vizinhos Es
34. daComFimEm int int tem um funcionamento semelhante ao apresentado anteriormente A diferen a reside no ponto de compara o que neste caso interessa que seja o ponto final da estrada mudaEstrada Estrada invocado quando o carro passa a circular numa nova estrada por ter chegado a um cruzamento Por fim surge o m todo escolheEstradaSeguinte que retorna aleatoriamente uma estrada de entre todas as poss veis no momento para o carro em quest o e Curva java Esta classe utilizada para definir as quatro variantes de curvas que j foram explicadas ao pormenor aquando da explicac o da classe Cidade Existem tr s construtores diferentes para serem aplicados nas divesas situa es que podem ocorrer Um deles requere a cidade e as coordenadas da curva Neste caso o quadrante ainda n o foi determinado e considerado como sendo 1 O segundo construtor j pede adicionalmente o quadrante ficando desde j determinado Por ltimo est dispon vel um construtor que recebe como argumentos as duas estradas que convergem na curva Neste caso o quadrante determinado automaticamente de acordo com a informa o que as estradas t m associada Para esta classe n o se justificou a cria o de m todos Sistemas Periciais e Rob tica Relat rio Final e ThreadInterface java Esta classe gere todos os thread s que est o a correr na simula o As vari veis de classe s o cidade tipo Cidade Ct
35. dada orienta o horizontal ou vertical param x A coordenada X param y A coordenada Y param orientacao true significa que pretendemos uma estrada horizontal false se pretendemos uma estrada vertical return A estrada que tem o seu fim no ponto que passado como argumento Ef public Estrada estradaComFimEm int x int y boolean orientacao int 1 boolean flag false for i 0 i lt nrEstradas amp amp flag i flag estrada i xFim x amp amp estrada i yFim y amp amp estrada i orientacao orientacao System out println ECFE estrada i xFim x amp amp estrada i yFim y amp amp estrada i orientacao orientacao 4 4x y return estrada i 1 verifica se existe algum sem foro num determinado ponto param x A coordenada X param y A coordenada Y return o n mero do semaforo ou 1 se n o existir EJ public int existeSemaforo int x int y for int i 0 i lt nrSemaforos i 34 Sistemas Periciais e Rob tica Relat rio Final if semaforo i posX x amp amp semaforo i posY y return 1 return 1 determina a posic o relativa de dois semaforos param sem0 A identifica o de um semaforo param seml A identifica o do outro semaforo return um inteiro que representa a posi o relativa dos dois sem foros O o primeiro est direita do segundo 1 o primeiro est p
36. dade super id this cidade los cidade sitVizinhos new int 4 3 try cria o da tabela de endere os _addresses new BAddressTable endere o dummy _addresses addAddress new Address id null 1 BRecvThread Cliente a tabela de enderecos _addresses n o deve ser nula _security new KQMLSecurity addresses 64 Sistemas Periciais e Rob tica Relat rio Final Tabela de Liga es connections new BConnectionTable Fila de mensagens _queue new BMessageBuffer termina o de cada mensagem _endWith X004 1 significa que n o indica o tempo m ximo que o thread espera a recepc o da mensagem _durationTime 1 actualizac o dos enderecos _addresses addAddress new Address id localhost 5555 id BServThread id s Address if createServerThread id Thread NORM_PRIORITY null String args new String 1 args 0 id Do E BRecvThread processMessage InitializeFailed args cria o dos receptores for int i 0 i lt cidade nrSemaforos i Address addr new Address R i localhost 5555 N i s Address _addresses addAddress addr String type addr getType String name addr getID TEY createReceiverThread id name Thread NORM_PRIORITY corre E catch catch Exception e
37. e t 2 vertical carro cidade ConvertFromMacroCoordinate carro posY MACRO PIXEL MACRO PIXEL Lf carro estrada orientacao horizontal carro estrada nrCarros2 carro estrada estradaComInicioEm carro cidade ConvertToMacroCoordinate carro posX 1 ConvertToMacroCoordinate carro posY 1 false Ccarro posX ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posX carro posY ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posY carro sentido n carro estrada nrCarrosl else 57 carro cidade carro cidade carro cidade 2 carro cidade 1 carro posY Carro MACRO_PIXEL MACRO_PIXEL carro cidade carro cidade carro cidade 1 carro cidade DD vertical carro cidade carro cidade carro cidade 2 carro cidade 1 tSp Sistemas Periciais e Rob tica Relat rio Final carro estrada nrCarros2 carro estrada estradaComInicioEm carro cidade ConvertToMacroCoordinate carro posX 1 ConvertToMacroCoordinate carro posY 1 true Ccarro posX ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posX carro posY ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posY carro sentido o carro estrada nrCarrosl else if accao equals curva3 significa que avan ou
38. ead est associado param Is O servidor l gico deste thread 7 CarroThread int numCarro Carro c LogicServer ls this numCarro numCarro this carro c this ls ls MACRO PIXEL carro cidade MACRO PIXEL Permite terminar a execu o deste thread EJ public void terminate stop true In cio da execu o E public synchronized void run long termo 0 String accao try while stop synchronized this termo ls ExecStr accao numCarro Accao accao ls GetStrArg termo 2 System out println ACCAO accao X carro cidade ConvertToMacroCoordinate carro posX 1 y carro cidade ConvertToMacroCoordinate carro posY 1 SENTIDO carro sentido o carro entra por uma estrada na cidade if accao equals entraCidade actualiza as vari veis estat sticas e determina a estrada a percorrer carro entraCidade curva sem cruzamento semaforo else if accao equals curval significa que avan ou uma posi o carro distPercorrida apaga a posi o anterior carro cidade getGraphics clearRect carro posX carro posY 15 15 carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX 56 MACRO PIXEL MACRO PIXEL cidade 1 carro cidade 2 vertical carro carro carro DD carro 1 carro posY cidade c
39. eles utiliza os valores por omiss o da super classe KOMLAgentAction que est implementada no JATLite O outro construtor permite personalizar as vari veis Al m disso disponibiliza ainda uma matriz de inteiros que permite guardar a situa o dos sem foros vizinhos situa o essa quantificada em n mero de carros a circular nas ruas vizinhas Ap s a cria o da tabela de endere os preenchida a tabela de liga es e criada a fila de mensagens onde ser o guardadas todas as transmiss es entre os agentes O m todo processMessage String Object uma extens o de outro com o mesmo nome e permite processar uma mensagem de acordo como o seu tipo O m todo Act Object obtem o objecto existente em MessageQueue e converte o para um objecto KQML Depois executa a ac o apropriada de acordo com o comando recebido Para o envio de mensagens foi desenvolvido o m todo enviaMsg int String String String que envia uma mensagem para um sem foro 12 Sistemas Periciais e Rob tica Relat rio Final e Transito pro Este m dulo a parte central de todo o processamento E aqui que todas as decis es relativas ao movimento dos carros s o tomadas A representa o dos factos em Prolog feita como a seguir se exemplifica semaforo nrSem x y verde estrada nrEstrada x0 y0 x1 yl carro nrCarro x y sentido curva nrCurva x y quadrante Todo o c digo encontra se devidamente comentado e assim dispensa qualq
40. equipa de desenvolvimento serviu se de diversa documenta o sem a qual jamais poderiam ser atingidos os resultados que foram obtidos Segue se uma lista da bibliografia utilizada e Artificial Intelligence A Modern Approach Russel and Norvig Prentice Hall e Multiagent Systems a modern approach to Distributed Artificial Intelligence Ed G Weiss MIT Press 1999 e Documenta o do JATLite existente em http java stanford edu e Documenta o do Amzi dispon vel em http www amzi com CONCLUS O Em termos conclusivos resta referir que estamos perante um projecto que utiliza agentes para apoiar uma tarefa real e evidentemente necess ria no controlo do tr fego Importa salientar que a utiliza o de agentes como elemento chave na simula o verdadeiramente til a forma mais aproximada de como os sem foros na realidade funcionam ou deveriam funcionar Apesar de independentes na tomada de decis es ter uma imagem do que est a acontecer na vizinhan a importante Durante todo o presente projecto verificamos o qu o importante pode ser um sistema como este para o controlo do tr fego de uma cidade Todos sabemos a complexidade deste problema na nossa sociedade Como tal uma ferramenta de simula o como esta pode ajudar a detectar e resolver grande parte destes problemas Porto e Faculdade de Engenharia 21 de Dezembro de 2000 18 Sistemas Periciais e Rob tica Relat rio Final AP NDICES MANUAL DO
41. f carro sentido s carro cidade getGraphics clearRect carro posX 29 carro posY 15 15 carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX 15 carro cidade ConvertFromMacroCoordinate carro posY 10 MACRO PIXEL MACRO PIXEL else if carro sentido o carro cidade getGraphics clearRect carro posX carro posY 29 15 15 carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX 15 carro cidade ConvertFromMacroCoordinate carro posY 10 MACRO PIXEL MACRO PIXEL else if carro sentido e carro cidade getGraphics clearRect carro posX carro posY 7 15 15 carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX 15 carro cidade ConvertFromMacroCoordinate carro posY 10 MACRO PIXEL MACRO PIXEL carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX MACRO PIXEL carro cidade ConvertFromMacroCoordinate carro posY MACRO PIXEL MACRO PIXEL MACRO PIXEL inversao do sentido de marcha carro inverteSentido ex Cruzamento 3 indica que chegou ao cruzamento 3 61 Sistemas Periciais e Rob tica Relat rio Final else if accao startsWith cruzamento Estrada estradaSeg int semaforo indica o n mero do cruzamento semaforo a que chegou semaforo new Integer accao substring 10 accao index0f intValue
42. final return true se for poss vel inserir a estrutura false em caso contr rio E 32 Sistemas Periciais e Rob tica Relat rio Final private boolean podeInserirEstrutura int xIni int xFim int yIni int yFim if nrEstradas MAX ESTRADAS return false s poss vel criar uma estrada de cada vez if xIni xFim amp amp yIni yFim return false verifica se o local est vazio for int i xIni i lt xFim i for int J yIni J lt yFim j if estrutura i 3 s return false return true verifica se existe alguma estrada que inicie ou termine neste ponto param x A coordenada X param y A coordenada Y return true se existir alguma estrada que inicie ou termin m x y flase em caso contr rio Ef private boolean pontoTerminal int x int y boolean flag true for int i 0 i lt nrEstradas amp amp flag i flag estrada i xIni x amp amp estrada i yIni y estrada i xFim x amp amp estrada i yFim y r return flag determina a estrada cujo ponto inicial x y param x A coordenada X param y A coordenada Y return A estrada que tem o seu in cio no ponto que passado como argumento Ar public Estrada estradaComInicioEm int x int y Int boolean flag false for i 0 i lt nrEstradas amp amp flag i flag estrada i xIni x amp amp estrada i
43. foro cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redup else if semaforo estrada 3 nrCarros2 0 flag true semaforo mudaLuz 2 semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts greenup semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redleft semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts reddown semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redright actualiza o canvas semaforo cidade repaint semaforo cidade ConvertFromMacroCoordinate semaforo posX 1 semaforo cidade ConvertFromMacroCoordinate semaforo posY 1 semaforo cidade MACRO_PIXEL 3 semaforo cidade MACRO_PIXEL 3 try sleep 10000 catch java lang InterruptedException e else if this semaforo funcionamento M mensagens determina os sem foros com quem vai comunicar Semaforo semVizinhos semaforo vizinhos int novoVerde 0 total0 1 totall 1 total2 1 total3 1 while stop System out println MENSAGENS try synchronized this actualiza a base de conhecimento for int k 0 k lt this semaforo cidade nrCarro k ls k RetractStr semaforo semaforo nrSem _ ls k AssertaStr semaforo semaforo nrSem semaforo verde jca
44. guinte xIni lt Math abs cidade ConvertToMacroCoordinate posX estradaSeguinte xFim posX cidade ConvertFromMacroCoordinate estradaSeguinte xIni else posX cidade ConvertFromMacroCoordinate estradaSeguinte xFim if Math abs cidade ConvertToMacroCoordinate posY estradaSeguinte yIni lt Math abs cidade Convert ToMacroCoordinate posY estradaSeguinte yFim posY cidade ConvertFromMacroCoordinate estradaSeguinte yIni else posY cidade ConvertFromMacroCoordinate estradaSeguinte yFim 42 Sistemas Periciais e Rob tica Relat rio Final this sentido estradaSeguinte sentidoEstrada cidade ConvertToMacroCoordinate posX 1 cidade ConvertToMacroCoordinate posY 1 this estrada estradaSeguinte if sentido o sentido n this estrada nrCarrosl else this estrada nrCarros2 chegada a uma estrada sem sa da El public void inverteSentido if sentido o sentido n this estrada nrCarrosl else this estrada nrCarros2 if sentido n sentido s lse if sentido s sentido n lse if sentido e sentido o else if sentido 0 sentido e if sentido o sentido n this estrada nrCarrosl else this estrada nrCarros2 converte o sentido em que se desloca o carro para inteiro return O mapeamento em int do char que representa o sentido do movimento do carro
45. har que representa o sentido ES public char sentidoEstrada int x int y if orientacao estrada horizontal if x xIni return ot else return e else estrada vertical if y yIni return n else return s Verifica se um ponto petence a esta estrada return true se o ponto pertencer estrada false caso contr rio public boolean pertence int x int y return orientacao amp amp x gt xIni amp amp x lt xFim amp amp y yIni 40 Sistemas Periciais e Rob tica Relat rio Final lorientacao amp amp y gt yIni amp amp y lt yFim amp amp x xIni Altera a localiza o desta estrada return true se a altera o for bem sucedida false caso contr rio El public boolean alteraPosicao int x0 int x1 int y0 int yl boolean flag false if this xIni x0 this xIni x0 flag true if this xFim x1 this xFim x1 flag true if this yIni y0 this yIni y0 flag true if this yFim x0 this yFim yl flag true return flag e Carro java import java util public class Carro movimento do carro em pixeis final int INCREMENTO 10 cidade a que o carro pertence Cidade cidade a estrada onde se encontra o carro Estrada estrada coordenadas do carro int posX posY o sentido em que se movimenta o carro N
46. hread tipo CarroThread Sthread tipo SemThread 1s tipo LogicServer Devido ao facto de a distribui o do Amzi ser apenas de avalia o este apresenta uma janela que fecha automaticamente de seguida na primeira vez que chamado o Prolog Por este facto consideramos mais realista que esta janela fosse apresentada no momento em que o programa inicia e n o quando se ordena o in cio da simula o Assim existe adicionalmente a vari vel dummy do tipo Logicserver Da inicializa o faz parte tamb m o preeenchimento do array 1s com novos objectos do tipo Logicserver O m todo actualizaLs possibilita o assert das estradas curvas sem foros e carros no m dulo prolog O m todo connect liga os sem foros e p e os carros em movimento Caso o funcionamento escolhido pelo utilizador for por mensagens adicionalmente cria os mensageiros O funcionamento destes mensageiros ser o explicados com todo o pormenor mais frente neste relat rio Quando se pretende terminar a simula o necess rio invocar o m todo shutdown que p ra os carros e desliga os sem foros atrav s da chamada de terminate Mais uma vez apenas se estivermos perante uma simula o do tipo transmiss o de mensagens os mensageiros s o desligados e SemThread java Esta classe uma sub classe de Thread O seu papel gerir todas as tarefas de um cruzamento conjunto de sem foros O m todo terminate desliga o sem foro alterando o
47. ializa a matriz cityArray que guarda a estrutura que existe em cada macro pixel Esta matriz tem uma dimens o igual da grelha existente para edi o da cidade Adicionalmente criada uma matriz de caracteres estrutura onde fica registada a informa o relativa ao tipo de estrutura que existe em cada ponto da cidade Esta matriz preenchida com o caractere v que significa que inicialmente a cidade se encontra vazia O m todo paint faz o refresh do canvas percorrendo esta matriz e redesenhando toda a cidade Nesta classe est o registadas todas as estruturas que comp em a cidade estradas sem foros e carros Existem array s que registam as estruturas presentes na cidade Para cada tipo de estrutura existe informa o pormenorizada quer relativa ao n mero m ximo que poss vel de existir na cidade quer ao n mero que no momento presente existe O m todo aprEstatisticas chamado quando o utilizador d ordem para terminar a simula o Este m todo desenha um rect ngulo por cima da grelha que representava a cidade Neste rect ngulo v o ser apresentadas as diversas estat sticas relativas evolu o da simula o Os m todos ConvertToMacroCoordinate e ConvertFromMacroCoordinate convertem respectivamente coordenadas em pixels para macro pixels e macro pixels para coordenadas em pixels O m todo insereEstrutura int int int int permite inserir uma estrada cujas coordenadas de in cio e fim s o passadas
48. iciais e Rob tica Relat rio Final String msg String tipo gt ask OU resposta gt ans responde ao semaforo que efectuou o pedido tipo equals ans R emissor processa a resposta de um sem foro int e0 el e2 e3 StringTokenizer st new StringTo String str str String st nextElement O new Integer str substring str str String st nextElement 1 new Integer str substring str str String st nextElement new Integer str substring str str String st nextElement 3 new Integer str substring str switch cidade posicaoRelativa nrSem l intValue kenizer msg index0f 1 index0f 1 index0f 1 index0f 1 detSituacao ans intValue intValue intValue determina a posic o relativa entre este semaforo e quem Case 0 Case 1 Case 2 Case 3 break mensageiro sitVizinhos mensageiro sitVizinhos mensageiro sitVizinhos break emissor o emissor est direita deste semaforo mensageiro sitVizinhos emissor 0 mensageiro sitVizinhos emissor 1 mensageiro sitVizinhos emissor 2 o emissor mensageiro sitVizinhos mensageiro sitVizin mensageiro sitVizin break o emissor est mensageiro sitVizin mensageiro sitVizin break respondeu true el
49. idade cidade cidade cidade cidade 1 5 Sistemas Periciais e Rob tica Relat rio Final carro cidade ConvertFromMacroCoordinate carro posY MACRO PIXEL MACRO PIXEL If carro estrada orientacao horizontal carro estrada nrCarrosl carro estrada estradaComInicioEm carro cidade ConvertToMacroCoordinate carro posX 1 ConvertToMacroCoordinate carro posY 1 false Ccarro posX ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posX carro posY ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posY carro sentido n carro estrada nrCarrosl else carro estrada nrCarros2 carro estrada estradaComFimEm carro cidade ConvertToMacroCoordinate carro posX 1 ConvertToMacroCoordinate carro posY 1 true carro posX ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posX carro posY ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posY carro sentido Let carro estrada nrCarros2 else if accao equals curva2 significa que avan ou uma posi o carro distPercorrida apaga a posic o anterior carro cidade getGraphics clearRect carro posX 15 carro cidade repaint carro cidade ConvertFromMacroCoordinate carro posX MACRO_PIXEL MACRO_PIXEL carro cidade carro cidade carro cidade 1 carro cidad
50. is dts width dpnl width sizeY this dts height boxX sizeX 25 27 Sistemas Periciais e Rob tica Relat rio Final boxY sizeY 45 umMacroPixelsX ConvertToMacroCoordinate boxX umMacroPixelsY ConvertToMacroCoordinate boxY cityArray new Image NumMacroPixelsX 1 NumMacroPixelsY 1 this nrSemaforos 0 this nrCarro 0 this nrEstradas 0 this nrCurvas 0 this semaforo new Semaforo MAX SEM this estrada new Estrada MAX ESTRADAS this curva new Curva MAX CURVAS this carro new Carro MAX CARROS for int i 1 i lt NumMacroPixelsX i for int j 1 5 lt NumMacroPixelsY j cityArray il j null this estrutura new char NumMacroPixelsX 1 NumMacroPixelsY 1 cria uma cidade vazia sem estradas for int i 0 1 lt NumMacroPixelsX i for int j 0 5 lt NumMacroPixelsY j this estruturali 3 v Permite desenhar todas as estruturas da cidade Deve ser chamado todas as vezes que ocorre uma alterac o na cidade sta deve ser visualizada param g Os gr ficos que est o desenhados na cidade RA null public void paint Graphics g setLocation locXx locY setSize sizeX sizeY macroY boxY macroX boxX desenho das esctuturas existentes na cidade for int i 0 i lt NumMacroPixelsX i for int 3 0 3j lt NumMacroPixelsY j macroX ConvertFromMacroCoordinate i macroY C
51. l yIni y return estrada i l determina a estrada cujo ponto final x y param x A coordenada X param y A coordenada Y return A estrada que tem o seu fim no ponto que passado como argumento public Estrada estradaComFimEm int x int y int boolean flag false for i 0 i lt nrEstradas amp amp flag i 33 Sistemas Periciais e Rob tica Relat rio Final flag estrada il xFim x amp amp estrada il yFim y return estrada i 1 determina a estrada cujo ponto inicial x y e que possui uma dada orienta o horizontal ou vertical param x A coordenada X param y A coordenada Y param orientacao true significa que pretendemos uma estrada horizontal false se pretendemos uma estrada vertical return A estrada que tem o seu inicio no ponto que passado como argumento El public Estrada estradaComIniciol Em int x int y boolean orientacao inte 1 boolean flag false for i 0 i lt nrEstradas amp amp flag i flag estrada i xIni x amp amp estrada i ylni y amp amp estrada i orientacao orientacao System out println ECiF estrada i xIni x amp amp estrada i yIni y amp amp estrada i orientacao orientacao 4x y return estrada i 1 determina a estrada cujo ponto final x y e que possui uma
52. lInt 3 e Curva java public class Curva a cidade a que pertenc sta curva Cidade cidade coordenadas desta curva OC yo quadrante orientac o da curva int quadrante Construtor Representa a estrutura curva param cidade A cidade a que pertenc sta curva param x Coordenada x desta curva param y Coordenada y desta curva A public Curva Cidade c int x int y cidade c this x x this y y quadrante 1 quadrante n o determinado Construtor Representa a estrutura curva param cidade A cidade a que pertenc sta curva param x Coordenada x desta curva fparam y Coordenada y desta curva 45 Sistemas Periciais e Rob tica Relat rio Final param quadrante O quadrante desta curva ETA public Curva Cidade c int x int y int quadrante cidade c this x Xx this y Y this quadrante quadrante Construtor Representa a estrutura curva fparam cidade A cidade a que pertenc sta curva param el Uma estrada fparam e2 A outra estrada A ARA A A CACA public Curva Estrada el Estrada e2 cidade el cidade if el xFim e2 xIni amp amp el yFim e2 yIni quadrante 1 x el xFim y el yFim else if el xIni e2 xIni amp amp el yIni e2 yIni quadrante 2 x el xIni y el yIni else if el xFim e2 xIni amp amp el yFim e2 yIni quadrante 3 x el xFim y
53. nrSemaforos i desliga os semaforos Sthread i terminate desliga os mensageiros se for o caso if cidade funcionamento M cidade semaforo i mensageiro stop e SemThread java import Java lang ThreadLocal import java util import java awt import amzi ls import KQMLLayer public class SemThread extends Thread sem foro associado a este thread Semaforo semaforo vari vel de controlo boolean stop false array de servidores prolog public static LogicServer 1s Construtor param semaforo O sem foro que se encontra associado a este thread param 1s O array de servidores prolog ES public SemThread Semaforo semaforo LogicServer 1s this semaforo semaforo this ls Is desliga o sem foro E public void terminate stop L ue liga o sem foro public synchronized void run if this semaforo cidade funcionamento F tempo fixo while stop 49 Sistemas Periciais e Rob tica Relat rio Final try synchronized this int verde actualiza a base de conhecimento for int k 0 k lt this semaforo cidade nrCarro k ls k RetractsStr semaforo semaforo nrSem 9 ls k AssertaStr semaforo semaforo nrSem semaforo verde desenha a nova luz do sem foro verde semaforo verde if verde 0 semaforo cidade cityArray semaforo
54. o m tido sentido A entrada numa nova estrada feita com recurso invoca o do m todo entraEstrada Quando o carro se desloca numa estrada vertical ou horizontal necess rio determinar a nova posi o e actualizar as vari veis estat sticas A compet ncia destas tarefas fica a cargo dos m todos movex emovey Ao chegar a um cruzamento necess rio determinar quais as estradas para onde o carro pode seguir Para tal existe o m todo estradasPossiveis que retorna um Vector contendo as estradas em quest o Para o preenchimento deste vector determinado o sentido do movimento do carro Seguidamente e com recurso a m todos auxiliares de determina o de estradas com in cio e fim em determinado ponto que ser o explicadas em pormenor de seguida preenchido o vector Com muita frequ ncia necess rio verificar em que estrada se encontra o carro Por isso esta classe possui os m todos determinaEstrada int int determinaEstrada Estes m todos percorrem todas as estradas da cidade com o aux lio de um ciclo for que termina quando o ponto onde se encontra o carro se situar dentro do rect ngulo da estrada O m todo estradaComInicioEm int int retorna uma Estrada cujo ponto inicial o indicado nos argumentos Para tal o array que cont m as estradas todas da cidade percorrido at ser encontrada aquela cujo valor de xIni e yIni coincide com os valores passados como argumento O m todo estra
55. onvertFromMacroCoordinate j try g drawImage Image cityArray i 3 macroX 6 catch NullPointerException e g setColor Color white g fillRect macroX 6 macroY 6 39 39 g setColor Color black desenho dos carros for int i 0 i lt nrCarro i if carro i sentido n g drawImage Image ts carroImg carro i posX 7 carro i posY null else if carro i sentido s macroY 6 28 Sistemas Periciais e Rob tica Relat rio Final g drawImage Image ts carroImg carro i posX 29 carro il posY null else if carro i sentido o g drawImage Image ts carroImg carro i posxX carro i posY 29 null else if carro i sentido e g drawImage Image ts carroImg carro i posxX carro i posY 7 null if ts simular aprEstatisticas g Permite apresentar as estat sticas finais no final da apresentac o param g Os gr ficos private void aprEstatisticas Graphics 9 g setColor Color gray g fill3DRect 6 6 sizeX 6 sizeY 6 true g setColor Color white t tulo g setFont new Java awt Font dialog Font BOLD 20 g drawString Estat sticas da Simulac o 20 25 rubricas g setFont new Java awt Font dialog Font BOLD 14 g drawString Tipo de Simulac o 15 150 g drawString N de Sem foros 15 200 g drawString N de Estrada
56. or baixo do segundo 2 o primeiro est esquerda do segundo 3 o primeiro est em cima do segundo E public int posicaoRelativa int sem0 int seml if semaforo sem0 posX gt semaforo seml posX return 0 if semaforo sem0 posY gt semaforo seml posY return 1 if semaforo sem0 posX lt semaforo seml posX return 2 return 3 Semaforo java import java util StringTokenizer public class Semaforo AA AA A CA x n mero de estradas volta de cada cruzamento sem foro final int NR_ESTRADAS 4 o n mero deste sem foro int nrSem a cidade onde se situa este semaforo Cidade cidade as estradas que existem no cruzamento Estrada estrada as coordenadas do sem foro int posX posY tru gt verde fals gt vermelho boolean luz sistema de gest o de mensagens Mensageiro mensageiro flag que indica se a pergunta deste sem foro j foi respondida boolean respondeu Construtor Cria uma estrutura que permite representar um sem foro ou cruzamento fparam nr N mero identificatido deste semaforo fparam cidade A cidade a que pertenc ste sem foro fparam posX A coordenada X da posi o deste sem foro na grelha de macro pixeis fparam posY A coordenada Y da posi o deste sem foro na grelha de macro pixeis 35 Sistemas Periciais e Rob tica Relat rio Final 7 public Semaforo int nr Cidade cidade int posX int posY n
57. pande os nossos conhecimentos de Intelig ncia Artificial em particular uma das suas importantes abordagens Agentes No entanto esta concep o poder ter interesse n o acad mico pois poder ser a base de um projecto mais elaborado a ser utilizado por uma autarquia que pretenda melhorar o controlo de tr fego numa cidade Como todos sabemos o tr nsito e em particular os engarrafamentos um dos grandes problemas das grandes cidades Temos tamb m conhecimento que o estudo de formas para melhorar o tr nsito nas cidades tem recorrido a simula es em particular com o uso de Agentes Sistemas Periciais e Rob tica Relat rio Final e DESCRI O FUNCIONALIDADES Ao utilizador oferecida a possibilidade de construir as estradas de forma a simular uma cidade Atrav s de intercep o de duas estradas pode ser criado um cruzamento Para al m do mais existe ainda a poss bilidade de serem criadas curvas sem sem foros poss vel escolher o n mero de viaturas que se pretende que circulem na cidade Antes de iniciar a simula o poss vel escolher qual das abordagens se pretende analisar nomeadamente sem foros de tempo fixo com possibilidade de definir o n mero de segundos entre transi es de luz agentes reactivos e multi agentes poss vel interromper a simula o a qualquer momento e posteriormente analisar diversas estat sticas ESTRUTURA DO PROGRAMA O presente projecto encontra se dividido em m d
58. po de Simula o ca 8 Tempo Fixo 10 Seg O Reactivo O Mensagens ia E E cn Fig 10 Cidade exemplo 14 Sistemas Periciais e Rob tica Relat rio Final e Tempo fixo E Simula o do tr fego de uma cidade Estat sticas da Simula o Simular Tipo de Simula o Temporiza o fixa N de Sem foros 2 N de Viaturas N de Estradas L 5 Tipo de Simula o N de Curvas 8 TempoFixo 10 Seg Reactivo N de Carros gt Mensagens Dist ncia Total Percorrida Dist ncia M dia por carro N Total de Invers es de Marcha Tempo de Espera Total Tempo de Espera M dio Fig 11 Resultados da simula o com tempo fixo 15 Sistemas Periciais e Rob tica Relat rio Final e Reactivo Simula o do tr fego de uma cidade Estat sticas da Simula o s j Tipo de Simula o Sem roros reactivos N de Sem foros 2 N de Viaturas N de Estradas L 5 Tipo de Simula o N de Curvas TempoFixo _10 Seg Reactivo N de Carros gt Mensagens Dist ncia Total Percorrida Dist ncia M dia por carro N Total de Invers es de Marcha Tempo de Espera Total Tempo de Espera M dio Fig 12 Resultados da simula o com agentes reactivos 16 e Mensagens E Simula o do tr fego de uma cidade RE N de Viaturas 5 Tipo de Simulac o O Tempo Fixo 10 Seg Reactivo e
59. posX 1 semaforo posY 1 semaforo cidade ts greendown semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redright lse if verde 1 semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts greenleft semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts reddown lse if verde 2 semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts greenup semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redleft lse if verde 3 semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts greenright semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redup semaforo cidade repaint catch LSException lse pausa try sleep this semaforo cidade tempo 1000 catch java lang InterruptedException e semaforo mudaLuz 50 Sistemas Periciais e Rob tica Relat rio Final else if this semaforo cidade funcionamento R reactivo while stop System out println REACTIVO boolean flag false try synchronized this actualiza a base de conhecimento for int k 0 k lt this semaforo cidade nrCarro k ls k RetractsStr semaforo semaforo nrSem _ ls k AssertaStr semaforo
60. ption lse System out printin lse Construtor Define os componentes da interface gr fica public TrafficSim initComponents pack Sistemas Periciais e Rob tica Relat rio Final 23 Sistemas Periciais e Rob tica Relat rio Final inicioEstrada false Inicializa o dos componentes necess rios simula o Ez private void initComponents addWindowListener public void windowClosing setTitle setSize 87 new java awt event WindowAdapter java awt event WindowEvent evt System exit 0 Simula o do tr fego de uma cidade 0 730 setResizabl false panell n panell set panell set panell set getContent cidade n cidade set w JPanel Layout null Location 2 2 Size 200 700 Pane add panel1 ew Cidade this this getSize Location 20 60 cidade addMouseListener new MouseAdapter public voi mouse_clic DO d mouseClicked MouseEvent e k e getContentPane add cidade roadHor new Imagelcon roadhor Jpg getImage roadVert new Imagelcon roadvert Jpg getImage cross new Imagelcon cross gif getImage curva new Imagelcon curva gif getImage greenup new Imagelcon greenup gif getlmage greendown new Imagelcon greendown gif getImage
61. r um cruzamento ent o existem duas estradas que terminam e duas que se iniciam no mesmo ponto No entanto uma delas horizontal e a outra vertical Para tratar estas situa es foram definidos mais dois m todos estradaComInicioEm int int boolean estradaComFimEm int int boolean Nestes m todos o ltimo argumento indica se pretendemos uma estrada horizontal true ou vertical false Para verificar se existe algum sem foro num determinado ponto foi definido o m todo existeSemaforo int int Por fim surge o m todo posicaoRelativa int int que determina a posi o relativa de dois sem foros Os argumentos s o os identificadores de cada sem foro Os valores retornados por esta fun o s o os seguintes 0 o primeiro est direita do segundo 1 o primeiro est por baixo do segundo 2 o primeiro est esquerda do segundo 3 o primeiro est em cima do segundo Fig 4 Valores de retorno do m todo posicaoRelativa int int e Semaforo java Esta classe gere todas as poss veis opera es que podem ocorrer num cruzamento controlado por sem foros A vari vel tempo utilizada apenas quando o sem foro oferece tempo constante para todas as ruas Para saber o modo de funcionamento do sem foro tempo fixo reactivo ou troca de mensagens com os vizinhos op o escolhida pelo utilizador existe a vari vel funcionamento Al m desta informa o o sem foro sabe a cidade a que perten
62. rSem nr this posX posX this posY posY this estrada new Estrada NR ESTRADAS this luz new boolean NR ESTRADAS this cidade cidade luz 0 true for int i l i lt NR ESTRADAS i luz i false respondeu false preenche o array de estradas param e0 Uma estrada param el Uma estrada param e2 Uma estrada param e3 Uma estrada X public void insereEstradas Estrada e0 Estrada el Estrada e2 Estrada e3 estrada 0 e0 estrada 1 el estrada 2 e2 estrada 3 e3 preenche o array de estradas public void insereEstradas estrada 0 cidade estradaComFimEm posX 1 posY estrada 1 cidade estradaComFimEm posX posY 1 estrada 2 cidade estradaComInicioEm posX 1 posY estrada 3 cidade estradaComInicioEm posX posY 1 determina o sem foro que est verde return O sem foro que est verde e public int verde if luz 0 return 0 else if luz 1 return 1 else if luz 2 return 2 else if luz 3 return 3 Acende o verde noutro sem foro param novoVerde O n mero do pr ximo sem foro a acender verde public void mudaLuz int novoVerde 36 luz 0 luz 1 luz novoVerde true Acende o verde noutro sem foro El public void mudaLuz if luz 0 luz 0 luz 1 else if luz 1 luz 1 Luz 21 el
63. rutura semelhante apresentada na pen ltima figura Sistemas Periciais e Rob tica Relat rio Final e Estrada java As vari veis globais desta classe registam coordenadas dos extremos da estrada a orienta o da estrada vertical ou horizontal o n mero de carros que circulam em cada direc o e a cidade a que pertence a estrada Tal como nas classes j analisadas existe um construtor que inicializa as vari veis de classe de acordo com a informa o que surge nos argumentos recebidos O m todo limite utilizado para determinar se esta estrada tem in cio ou fim nos lados da cidade Esta valida o necess ria pois na cidade tem que existir pelo menos uma estrada nestas condi es para que os carros possam entrar Os m todos entradax entradaY retornam respectivamente a coordenada x e y de entrada na estrada Adicionalmente foi definido sentidoEntrada int int que permite determinar o sentido se entrarmos nesta estrada pelo lado da cidade O m todo sentidoEstrada int int foi desenvolvido para que seja poss vel obter facilmente o sentido de uma estrada Este sentido s tem significado quando a estrada se enconta ligada a um cruzamento O seguinte esquema mostra como se encontra codificado o sentido de uma estrada Como poss vel verificar o sentido corresponde ao ponto cardeal de onde o carro prov m 22 J0uU u oeste o e este Ins s Fig 7 Sentido das estradas num cruzamento
64. s 15 250 g drawString N de Curvas 15 300 g drawString N de Carros 15 350 g drawString Dist ncia Total Percorrida 15 400 g drawString Dist ncia M dia por carro 15 450 g drawString N Total de Invers es de Marcha 15 500 g drawString Tempo de Espera Total 15 550 g drawString Tempo de Espera M dio 15 600 resultados g setFont new java awt Font dialog Font PLAIN 12 String tipoSim switch funcionamento case F tipoSim Temporizac o fixa break case R tipoSim Sem roros reactivos break case M tipoSim Mensagens break drawString tipoSim 150 150 drawString new Integer nrSemaforos toString 150 200 drawString new Integer nrEstradas toString 150 250 drawString new Integer nrCurvas toString 150 300 drawString new Integer nrCarro toString 150 350 90000 int nr 0 29 Sistemas Periciais e Rob tica Relat rio Final for int i 0 i lt nrCarro i nr carro i distPercorrida g drawString new Integer nr toString 300 400 g drawString new Float nr nrCarro toString 300 450 nr 0 for int i 0 i lt nrCarro i nr carro i inversoes g drawString new Integer nr toString 300 500 nr 0 for int i 0 i lt nrCarro i nr carro i tempoEspera g drawString new Integer nr toString 300 55
65. s as curvas da cidade private void detQuadrante for int i 0 i lt nrCurvas i if curva i quadrante 1 int x curva i x int y curvalil y if estrutura x 1 y e amp amp estrutura x y 1 e curva i quadrante 1 else if estrutura x 1 y e amp amp estrutura x y 1 e curva i quadrante 2 else if estrutura x 1 y e amp amp estrutura x y 1 e curva i quadrante 3 else if estrutura x 1 y e estrutura x y 1 e curva i quadrante 4 divis o de uma estrada devido cria o de um cruzamento param x A coordenada X onde ser feita a divis o param y A coordenada Y onde ser feita a divis o E private void divideEstrada int x int y boolean flag true for int i 0 i lt nrEstradas amp amp flag i if estrada i orientacao amp amp estrada i pertence x y horizontal estrada nrEstradas new Estrada this x 2 y estrada i xFim y estrada i xFim x flag false else if estrada i pertence x y vertical estrada nrEstradas new Estrada this x y 2 x estrada i yFim estrada i yFim y flag false verifica se estes pontos podem conter uma estrada param xIni A coordenada X inicial param xFim A coordenada X final param yIni A coordenada Y inicial param yFim A coordenada Y
66. se if luz 2 luz 2 luz 3 else if luz 3 luz 3 luz 0 false true false true false true false true luz 2 luz 3 fal Sistemas Periciais e Rob tica Relat rio Final se o seguint no sentido dos ponteiros do rel gio Determina os semaforos que s o vizinhos a este semaforo return Um array contendo os semaforos vizinhos XX E x public Semaforo Semaforo int i 0 int nrSem sem vizinhos new Semaforo 4 1f nrSem cidad xisteSemaforo estr sem i cidade semaforo nrSem 1f nrSem cidad xisteSemaforo posX sem i cidade semaforo nrSem 1f nrSem cidad xisteSemaforo estr sem i cidade semaforo nrSem 1f nrSem cidad xisteSemaforo posX sem i cidade semaforo nrSem return sem ada 0 xIni l r posY estrada 1 yIni 1 r ada 2 xFim 1 r posY estrada 3 yFim 1 r Actualiza a base de dados deste semaforo de acordo com uma mensagem recebida param emissor A identifica o da origem da mensagem param msg A mensagem recebida 37 param tipo O tipo da mensagem de public void processaMsg int emissor 1 if else if str index0f enviou a mensagem mensageiro enviaMsg nrSem 1 pedido tipo equals ask Sistemas Per
67. strcat S Str2 strcat Str2 Stri Str 1 e TrafficSim java 22 import import import import import public pk java awt javax swing java awt event java util amzi ls class TrafficSim extends javax swing JFrame protected protected protected protected protected protected protected protected protected protected protected protected tatic TrafficSim ts tatic JPanel panell tatic Image roadHor tatic Image roadVert tatic Image cross tatic Image curva tatic Image greenup tatic Image greendown tatic Image greenleft tatic Image greenright tatic Image redup tatic Image reddown protected static Image redleft protected static Image redright protected Image imageselec private JLabel jlblCarros private JTextField jtxtCarros protected static JLabel jlblSim private ButtonGroup btSim private JRadioButton jrbFixo private JRadioButton jrbReactivo private JRadioButton jrbMsg private JTextField jtxtTempo private JLabel jlblTempo private JButton jbRoad private JButton jbSimular protected static Cidade cidade protected static ThreadInterface ti private boolean inicioEstrada private int estradaXini estradaYini boolean simular true 0 0 000000000000 public static void main String args ts new TrafficSim ts setSize 870 730 ts show try ti new ThreadInterface ti inicializa ts cidade catch LSExce
68. t cidade return v estradaComFim Em posX 1 posY 1 direita gt esquerda estradaComInicioEm posX 1 Em posXx 2 Em posX 1 estradaConmF im estradaComF im s baixo gt cima estradaComF im Em posX 1 estradaConmF im Verifica em que estrada se encontra o carro param x Coordenada x param y Coordenada y freturn A estrada onde se encontra El private Estrada determinaEstrada int x int y int boolean flag true Cidade c this estrada cidade for i 0 i lt c nrEstradas amp amp flag i posY 1 posY posY 1 posY 1 Em posX posY 2 estradaComInicioEm posX 1 posY 1 44 Sistemas Periciais e Rob tica Relat rio Final if c estrada i xIni lt x amp amp c estrada i xFim gt x amp amp c estrada il yIni y c estrada i yIni lt y amp amp c estrada i yFim gt y amp amp c estrada il xIni x flag false return c estradali Verifica em que estrada se encontra o carro return A estrada onde se encontra eL public Estrada determinaEstrada return determinaEstrada this estrada cidade this posX this posY Aleatoriamente decide por que estrada vai seguir return A estrada para onde ir circular El public Estrada escolheEstradaSeguinte return Estrada estradasPossiveis elementAt new Random next
69. tch LSException lse pergunta aos vizinhos qual a situac o deles 52 R semVizinhos i nrSem 1 Sistemas Periciais e Rob tica Relat rio Final for int i 0 i lt 4 i try semaforo mensageiro enviaMsg semaforo nrSem 1 ask catch NullPointerException npe esta excepc o ocorre quando o sem foro tem menos que 4 vizinhos semaforo semaforo semaforo semaforo semaforo semaforo semaforo semaforo semaforo semaforo semaforo semaforo semaforo semaforo semaforo mensageiro mensageiro mensageiro semaforo estrada 0 mensageiro mensageiro mensagelro nrCarrosl estrada 1 mensagelro mensageiro mensageiro nrCarros2 estrada 2 mensageiro mensageiro mensagelro nrCarros2 estrada 3 i 4 espera a resposta while semaforo respondeu try sleep 50 catch java lang InterruptedException semaforo respondeu false decide qual o semaforo try total0 sitVizinhos semVizinhos 3 nrSem 0 sitVizinhos semVizinhos 3 nrSem 1 sitVizinhos semVizinhos 3 nrSem 2 nrCarrosl catch NullPointerException npe a abrir total0 semaforo estrada 0 nrCarrosl try totall sitVizinhos semVizinhos 0 nrSem 0 sitVizinhos semVizinhos 0 nrSem 1 sitVizinhos semVizinhos 0 nrSem 2 catch NullPointerException npe
70. te m todo retorna um array contendo os sem foros vizinhos Quando estamos perante uma simula o baseada na troca de mensagens entre os sem foros vizinhos necess rio recorrer ao m todo processaMsg int String String Este m todo actualiza a base de dados deste sem foro de acordo com uma mensagem recebida Recebe como argumentos a identifica o da origem da mensagem a mensagem recebida e o tipo da mensagem pedido gt ask OU resposta gt ans Caso a mensagem a processar seja do tipo ask este m todo cria uma nova mensagem do tipo ans que a vai fazer encaminhar at ao sem foro que lhe enviou o pedido Se a mensagem recebida for do tipo ans ent o necess rio processar a mensagem Este processamento procede se descodificando a mensagem recebida Um exemplo de uma mensagem recebida apresentado de seguida 0 4 1 2 2 5 3 10 Fig 5 Exemplo de mensagem Esta mensagem indica que pela estrada O poder o circular 4 carros pela estrada 1 2 carros pela estrada 2 5 carros e pela estrada 3 10 Para uma melhor compreens o foi desenhado o esquema seguinte que mostra em que posi o se encontram as quatro estradas volta de um sem foro T epel113s gt estrada 0 estrada 2 epel113so Fig 6 Posi o das estradas volta de um sem foro O m todo detSituacao cria uma string contendo a informa o relativa situa o deste sem foro relativamente ao n mero de carros que a ele se dirigem Esta string tem uma est
71. this cidade cidade this xIni x0 this xFim x1 this yIni y0 this yFim yl this nrCarrosl this nrCarros2 0 orientacao x0 x1 Determina se esta estrada tem inicio ou fim nos lados da cidade return true caso a estrada tenha in cio ou fim num dos lados da cidade false caso contr rio public boolean limite return yIni 0 xIni 0 yFim cidade NumMacroPixelsY 1 xFim cidade NumMacroPixelsX 1 coordenada X da entrada na estrada return um valor inteiro que representa a coordenada X da entrada na estrada El public int entradaxX if orientacao return xIni else if xIni 0 return 0 39 Sistemas Periciais e Rob tica Relat rio Final else return xFim coordenada Y da entrada na estrada return um valor inteiro que representa a coordenada Y da entrada na estrada El public int entradaY if orientacao return yIni else if yIni 0 return O else estrada vertical return yFim O sentido se entrarmos nesta estrada pelo lado da cidade return um char que representa o sentido El public char sentidoEntrada int xEntrada int yEntrada if xEntrada 0 return o else if yEntrada 0 return n else if cidade ConvertToMacroCoordinate xEntrada cidade NumMacroPixelsX 2 return e else return Tst Determina o sentido de uma estrada return um c
72. ts reddown semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redright semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redup else if novoVerde 2 semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts greenup semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redleft semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts reddown semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redright else if novoVerde 3 semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts greenright semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redup semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts reddown semaforo cidade cityArray semaforo posX 1 semaforo posY 1 semaforo cidade ts redleft 54 1 semaforo cidade MACRO PIXEL 3 Sistemas Periciais e Rob tica Relat rio Final actualiza o canvas semaforo cidade repaint semaforo cidade ConvertFromMacroCoordinate semaforo posX try sleep 10000 semaforo cidade ConvertFromMacroCoordinate semaforo posY 1 semaforo cidade MACRO_PIXEL 3 catch java lang InterruptedException fim do m todo run JO Determina qual o sem foro
73. ue o m dulo referente representa o do conhecimento seria implementado em Prolog IMPLEMENTA O Ao longo do desenvolvimento deste projecto foi tida grande preocupa o em comentar correctamente todo o c digo produzido No entanto e com o intuito de um esclarecimento adicional apresentada de seguida uma descri o mais pormenorizada de todas as classes JAVA e c digo Prolog escritos e TrafficSim java A classe TrafficSim define os componentes da interface gr fica E no m todo initComponents que s o definidos os componentes do painel da esquerda tais como bot es radio buttons e caixas de texto Do lado direito est presente um canvas que permite a edi o do 4 Sistemas Periciais e Rob tica Relat rio Final mapa da cidade Este canvas vai permitir visualizar a simula o e quando for dada a ordem de terminar tamb m o local onde s o apresentadas as estat sticas Nesta classe s o tamb m definidos os eventos para os bot es que permitem construir estradas O m todo mouse click o m todo que processa os eventos originados no canvas Al m disso iniciliza o thread principal que vai supervisionar todas as opera es e Cidade java Nesta classe s o definidas as estruturas que guardam a informa o da localiza o dos sem foros e dos diversos tipos de estrada horizontal vertical curvas O canvas est dividido em macro pixels para facilitar a edi o das estradas O construtor desta classe inic
74. uer explica o adicional A estrutura dos diversos predicados semelhante e facilmente assimil vel O programa tenta sucessivamente efectuar determinadas ac es at conseguir uma delas AMBIENTE DE DESENVOLVIMENTO O presente projecto foi elaborado tendo por base o sistema operativo Windows NT e Windows 98 Como ferramentas foram utilizadas as que se apresentam de seguida e Amzi Prolog Logic Server 5 0 Interactive Development Environment http www amzi com e Java 2 SDK Standard Edition Version 1 2 2 http java sun com e JATLite http java stanford edu AVALIA O DO PROGRAMA Num projecto desta natureza interessa verificar se realmente os agentes cooperam na tarefa que comum Se existe algum agente que em algum momento rema contra a mar o projecto n o ter a efic cia pretendida No entanto todos eles devem ser independentes apesar de poderem comunicar com outros Isto significa que caso determinado agente conjunto de sem foros receba uma mensagem indicando que se est o a dirigir muitos ve culos por uma das ruas ele s deve alternar para o sinal verde se considerar que o deve fazer As mensagens recebidas servem apenas como meio de informa o e n o como ordens de atitude Outro ponto que deve ser valorizado o interface permitir a observa o da posi o dos carros em movimento Informa o gr fica relativa ao estado dos sem foros deve tamb m constituir ponto a valorizar
75. uinte String estradas int nrEstradas new int 3 estradas estradas substring estradas index0f 1 nrEstradas 0 new Integer estradas substring 0 estradas indexo0f 5 intValue estradas estradas substring estradas index0f 1 nrEstradas 1 new Integer estradas substring 0 estradas indexo0f 1 intValue 63 Sistemas Periciais e Rob tica Relat rio Final estradas estradas substring estradas index0f 1 nrEstradas 2 new Integer estradas substring 0 estradas index0Of 5 intValue return carro cidade estrada nrEstradas new Random nextInt 3 1 e Mensageiro java import Java lang import java io import java util import Abstract import Baselayer import KQMLLayer import java awt public class Mensageiro extends KOMLAgentAction a cidade a que pertenc ste mensageiro Cidade cidade matriz da situacao dos vizinhos int sitVizinhos Construtor com os valores por omiss o A public Mensageiro super Construtor L os endere os da AddressTable e tenta criar todas as liga es Se o ServerThread falhar invocada o processMessage para apresentar o erro respectivo param id Identifica o do semaforo a que pertenc ste mensageiro fparam cidade A cidade a que pertenc ste mensageiro public Mensageiro int id Cidade ci
76. ulos Para facilitar a sua an lise representam se de seguida em forma de esquema As setas significam transfer ncia de informa o M dulo J AVA JATLite Fig 1 Representa o esquem tica dos m dulos Sistemas Periciais e Rob tica Relat rio Final ESQUEMAS DE REPRESENTA O DE CONHECIMENTO As regras de decis o v o constituir o m dulo do Prolog Para tal cada carro est conectado a um LogicServer Deste modo poss vel definir quais as atitudes a tomar por parte de cada carro em cada momento Em contrapartida cada sem foro regista as suas altera es em todos os LogicServer Esta informa o encontra se registada no esquema que se segue Carro N Fig 2 Esquema de representa o do conhecimento Dentro de cada LogicServer s o tomadas diversas decis es que v o influenciar as ac es de cada carro presente na simula o Estas ac es passam por ordenar a entrada do carro na cidade movimentar se numa das quatro direc es poss veis ou a chegada a um cruzamento Esta ltima ac o pode ainda compreender v rias atitudes o carro p ra se estiver vermelho escolhe a nova estrada e avan a para ela se estiver verde As vantagens da representa o do conhecimento atrav s de um m dulo Prolog s o not rias Esta a linguagem utilizada nas grandes simula es e tem um funcionamento muito caracter stico que se distingue das restantes linguagens de programa o Da foi decidido q
77. uma posi o carro distPercorrida apaga a posic o anterior carro cidade getGraphics clearRect carro posX 5 cidade repaint carro cidade ConvertFromMacroCoordinate carro posX carro cidade ConvertFromMacroCoordinate carro posY MACRO PIXEL MACRO PIXEL TE 1 carro estrada orientacao horizontal carro estrada nrCarros2 carro estrada estradaComFimEm carro cidade ConvertToMacroCoordinate carro posX 1 Convert ToMacroCoordinate carro posY 1 false carro posX ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posX carro posY ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posY carro sentido Uso carro estrada nrCarros2 else carro estrada nrCarros2 carro estrada estradaComInicioEm carro cidade ConvertToMacroCoordinate carro posX 1 Convert ToMacroCoordinate carro posY 1 true carro posX ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posX carro posY ConvertFromMacroCoordinate carro cidade ConvertToMacroCoordinate carro posY carro sentido o carro estrada nrCarrosl else if accao equals curva4 significa que avan ou uma posi o carro distPercorrida 58 carro posY Carro MACRO_PIXEL MACRO_PIXEL carro cidade carro cidade carro cidade 1 carro cidade 10 vertical Carro Carro carro
78. ystem out println EXCEP O ao inserir os carros lse Permite arrancar os threads Ky public static void connect actualiza o logic server com as estradas semaforos e carros existentes actualizaLS determina as estradas vizinhas a cada sem foro for int i 0 i lt cidade nrSemaforos i cidade semaforo i insereEstradas try se o funcionamento for por mensagens cria os mensageiros if cidade funcionamento M for int i 0 i lt cidade nrSemaforos i cidade semaforo i mensageiro new Mensageiro i cidade cidade semaforo i mensageiro setPriority Thread NORM_PRIORITY cidade semaforo i mensageiro start liga os semaforos for int i 0 i lt cidade nrSemaforos i Sthread i new SemThread cidade semaforo il 1s Sthread i start p e os carros em movimento for int i 0 i lt cidade nrCarro i Cthread i new CarroThread i cidade carro i 1s 1 espera 1 segundo entre cada carro tryl java lang Thread sleep 1000 Jcatch java lang InterruptedException e Cthread il start catch Exception e System out println e Ax Termina a simula o EJ public static void shutdown p ra os carros for int i 0 i lt cidade nrCarro i 48 Sistemas Periciais e Rob tica Relat rio Final Cthread i terminate for int i 0 i lt cidade
79. zar lse insere as estradas for int k 0 k lt cidade nrEstradas k try ls i AssertaStr estrada k cidade estrada k xIni cidade estrada k yIni cidade estrada k xFim cidade estrada k yFim System out println estrada k cidade estrada k xIni cidade estrada k yIni cidade estrada k xFim cidade estrada k yFim Jcatch LSException lse System out println EXCEP O ao inserir as estradas lse insere as curvas for int k 0 k lt cidade nrCurvas k try 1ls i AssertaStr curva k cidade curvalk x cidade curva k y cidade curva k quadrante System out println curva k cidade curva k x cidade curva k y cidade curva k quadrante catch LSException lse System out println EXCEPCAO ao inserir as estradas lse insere os semaforos for int k 0 k lt cidade nrSemaforos k try 1ls i AssertaStr semaforo k cidade semaforo k posX cidade semaforo k posY cidade semaforo k verde catch LSException lse System out println EXCEPGAO ao inserir os sem foros l1se 47 Sistemas Periciais e Rob tica Relat rio Final insere os carros for int k 0 k lt cidade nrCarro k try cidade carro k new Carro cidade ls i AssertaStr carro k iy 1 PRA Jcatch LSException lse S

Download Pdf Manuals

image

Related Search

Related Contents

IP Camera  Klipsch Image S4 User's Manual  model: 30033, 30034 owners manual warning  Targus Slim Laser Case  KLab(3656)  Autofocus Webcam  ワークへのアプローチ作業の正確さを追及した、 高速域低衝撃性能が  CorkSport Mazda Protégé Skid Tray  IB WatchBP Office Central  Behringer EUROCOM AX6220 Catalog  

Copyright © All rights reserved.
Failed to retrieve file