Sunteți pe pagina 1din 131

SIMULADOR DE TRFICO VEHICULAR MOTOR DE FLUJO

JHON ALEXANDER ESTRADA

MARIO SAUCEDO GUAPI

UNIVERSIDAD SAN BUENAVENTURA


FACULTAD DE INGENIERA DE SISTEMAS
REA DE SISTEMAS E INFORMTICA
SANTIAGO DE CALI
2012

1
SIMULADOR DE TRFICO VEHICULAR MOTOR DE FLUJO

JHON ALEXANDER ESTRADA


MARIO SAUCEDO GUAPI

MONOGRAFA PARA OPTAR AL TTULO DE


INGENIERO DE SISTEMAS

DIRECTORES
CHRISTIAN ARIAS IRAGURI
INGENIERO DE SISTEMAS

UNIVERSIDAD SAN BUENAVENTURA


FACULTAD DE INGENIERA DE SISTEMAS
REA DE SISTEMAS E INFORMTICA
SANTIAGO DE CALI
2012

2
NOTA DE ACEPTACIN

-------------------------------------------------------------

-------------------------------------------------------------

-------------------------------------------------------------

--------------------------------------------------
Presidente del Jurado

--------------------------------------------------
Jurado

--------------------------------------------------
Jurado

Santiago de Cali, Octubre 08 de 2012

3
A mis padres por su
apoyo incondicional en
este proceso de mi vida.
A mis hermanos por estar
siempre en los momentos
importantes.
A todos mis profesores
que me brindaron da a
da sus conocimientos.
A mi novia por estar
siempre a mi lado.
A Dios por brindarme la
oportunidad de estar
donde estoy.
A todos mil gracias.

Jhon Alexander Estrada

4
A mis padres por su
apoyo incondicional.
A mis profesores que nos
brindaron sus
conocimientos en la
materia.
A mis amistades por estar
presente en todo
momento y brindarme
todo su apoyo.
A Dios por darme la
oportunidad de vivir esta
experiencia.
A mis compaeros y
amigos que hicieron de mi
paso estudiantil una
memorable experiencia.

Mario Saucedo Guapi

5
AGRADECIMIENTOS

Queremos dar gracias a la Universidad San Buenaventura por brindarnos


durante estos cinco (5) aos una educacin integral, formndonos como
profesionales y personas de bien, al Ingeniero Luis Merchn y al ingeniero
Felipe Echeverry, por permitirnos trabajar en este proyecto, a nuestro director
de proyecto Christian Arias al apoyarnos durante este proceso final.

Tambin queremos agradecerle a cada uno de nuestros profesores que a lo


largo de la carrera nos brindaron todos sus conocimientos en nuestra etapa
estudiantil, a nuestros padres por su apoyo incondicional y a nuestros amigos y
compaeros que nos acompaaron da a da para que este sueo fuera
alcanzable.

6
ABSTRACTO

El proyecto nace de la necesidad de mejorar la movilidad a travs de un


mayor flujo vehicular presentado en puntos estratgicos de la ciudad,
planteado como un problema comn que se vive a diario en las calles,
se busca desarrollar una herramienta que permite ver una simulacin por
medio de un componente llamado Motor de micro simulador, teniendo
como objetivo generar datos determinados sobre el comportamiento del
trfico con base en un modelo lgico, brindando una interfaz que se
conecte un sistema de visualizacin.

ABSTRACT

The project was born of the need to improve mobility through greater
vehicle flow presented in strategic points of the city, raised as a common
problem that is lived every day in the streets, aims to develop a tool that
allows you to view a simulation through a component called "Simulator
micro Motor", aiming to generate data on the behaviour of traffic based
on a logic model providing an interface for a display system is eventually
connected.

7
TABLA DE CONTENIDO

Revisiones ..................................................................................... Error! Marcador no definido.


AGRADECIMIENTOS ................................................................................................................... 6
1 RESUMEN ........................................................................................................................... 10
2 INTRODUCCIN ................................................................................................................. 11
3 OBJETIVO GENERAL ......................................................................................................... 12
3.1 OBJETIVOS ESPECFICOS........................................................................................ 12
4 DEFINICIN DEL PROBLEMA ........................................................................................... 13
5 REFERENTE TERICO ...................................................................................................... 14
5.1 TEORA DE GRAFOS ................................................................................................. 14
5.2 REDES DE TRANSPORTE ......................................................................................... 15
5.3 TEORIA DE COLAS .................................................................................................... 15
5.4 MODELOS DE COLAS ................................................................................................ 15
5.5 COLAS DE TRFICO .................................................................................................. 16
5.6 DEFINICIN DE SIMULADOR .................................................................................... 17
5.7 MODELO VISTA CONTROL ....................................................................................... 18
6 PLANTEAMIENTO ESTADSTICO ...................................................................................... 20
7.1 Caractersticas ............................................................................................................. 25
8 TECNOLOGAS MODERNAS ............................................................................................. 26
9 TIPOS DE ESTUDIOS ......................................................................................................... 26
9.1 Estudios de volumen .................................................................................................... 26
9.2 Estudios de velocidad .................................................................................................. 27
9.3 Tiempos de viaje .......................................................................................................... 27
9.4 Retrasar los estudios ................................................................................................... 27
9.5 Estudios de densidad ................................................................................................... 27
9.6 Estudios de accidente .................................................................................................. 27
10 ESTADO DEL ARTE .................................................................................................... 28
11 Modelos Macroscpicos .............................................................................................. 31
12 Modelos Mesoscpico ................................................................................................. 31
13 Modelos Microscpicos ................................................................................................ 31
14 DISEO Y METODOLOGA DEL PROYECTO ........................................................... 32
15 FRONTERAS DEL SISTEMA ...................................................................................... 33
16 ACTORES DEL SISTEMA ........................................................................................... 34
17 MATRIZ DE REQUERIMIENTOS ................................................................................ 35
17.1 LISTA DE REQUERIMIENTOS ................................................................................... 36
17.2 FORMATO DE MATRIZ DE REQUERIMIENTOS ....................................................... 38
18 CASOS DE USO DEL SISTEMA ................................................................................. 45
18.1 DIAGRAMA DE CASOS DE USO DEL SISTEMA ...................................................... 45
18.2 MODELO ENTIDAD RELACIN ................................................................................. 47
19 Persistencia de datos ................................................................................................... 48
19.1 PRINCIPALES GENERALIDADES DE LA SIMULACIN .......................................... 49
20 PRINCIPALES MTODOS DE LA INTERFAZ GRFICA PARA EL MODELO .......... 51
22 LISTADO DE CASOS DE USO ................................................................................... 58
23 ANLISIS DEL CDIGO MOTOR DE FLUJO .......................................................... 62
24 RESULTADOS DE LA SIMULACIN ........................................................................ 110
25 TRABAJO DE CAMPO .............................................................................................. 113
26 RECOLECCIN DE INFORMACIN ........................................................................ 121
27 FLUJO DE ENTRADA ............................................................................................... 121
28 TRABAJOS FUTUROS .............................................................................................. 122
29 TECNOLOGAS APLICADAS DEL PROYECTO ...................................................... 124
GLOSARIO DE TRMINOS...................................................................................................... 128
CONCLUSIONES ...................................................................................................................... 130
BIBLIOGRAFIA.......................................................................................................................... 131

8
TABLA DE IMAGENES

Ilustracin 1 Teora de Grafo ....................................................................................................... 14


Ilustracin 2 Modelo-Control-Vista .............................................................................................. 18
Ilustracin 3 Demanda de Vehculos en Colombia ..................................................................... 23
Ilustracin 4 Consumo aparente de Vehculos en Colombia ...................................................... 24
Ilustracin 5 Tec Intraf ............................................................................................................... 29
Ilustracin 6 Aimsun .................................................................................................................... 30
Ilustracin 7 "Barra de Herramientas" ....................................................................................... 110
Ilustracin 8 "Escenario Completo Aplicativo" .......................................................................... 111
Ilustracin 9 "Ejemplo de Captura de Datos" ............................................................................ 111
Ilustracin 10 "Escenario Final Simulado" ................................................................................ 112
Ilustracin 11 "Cruce Calle 36 con Cra 46" ............................................................................... 113
Ilustracin 12 "Estados de Semaforizacin Calle 36 con 46 ................................................... 114
Ilustracin 13 "Calle 5 con Guadalupe" ..................................................................................... 115
Ilustracin 14 "Calle 10 con Carrera 66" ................................................................................... 117
Ilustracin 15 "Estados De Semaforizacin Calle 10 con 66" ................................................... 118
Ilustracin 16 "Carrera 66 con Calle 9" ..................................................................................... 119
Ilustracin 17 "Estados De Semaforizacin Carrera 66 con Calle 9" ....................................... 120
Ilustracin 18 "Foto Carrera 66 con Calle 10" ........................................................................... 120
Ilustracin 19 "Reporte generado por JasperReports" .............................................................. 123

9
1 RESUMEN

El incremento del trfico vehicular es provocado en gran medida por el


rpido aumento poblacional, lo cual genera:

1) Mayor demanda de transporte entre ellos.


2) Deficiencia en la construccin de infraestructura vial.
3) Falta de educacin en los conductores.

Estos factores, ocasionan que cada da exista una mayor congestin,


largas filas de vehculos, y un mayor porcentaje de accidentalidad.

El proyecto consta de dos partes, Motor de flujo y visualizacin


grfica, en la realizacin de este trabajo se va a enfocar en desarrollar
un motor que de soporte un 1Micro Simulador de trfico vehicular que
mejore el trnsito en la ciudad de Cali. Con esto se busca realizar una
serie de observaciones en sitios crticos con base en un trabajo de
campo previamente obtenido con resultados reales, teniendo en cuenta
estos puntos, se analizan diferentes tipos de simuladores
(macroscpicos, microscpicos, mesoscpicos) que ayuden a plantear
los posibles problemas y soluciones referente al congestionamiento vial.

Lo que se quiere con este desarrollo es que la herramienta resultante


facilite la visualizacin de la simulacin de tal forma que permita evaluar
diversas alternativas de situaciones concretas, lo cual ayudar a las
autoridades de trnsito a mejorar las condiciones de trfico basados en
los datos obtenidos.

1
. Micro Simulador: es un modelo por lo general discreto que describe el comportamiento del flujo del
trfico vehicular de manera individual y detallada, mostrandolo en una escala ms pequea para un mejor
anlisis.

10
2 INTRODUCCIN

El sistema de trfico vehicular se describe como un sistema complejo y


difcil de modelar, ya que intervienen muchas variables y la dinmica
entre ellas es compleja, cabe destacar como principales problemas de
movilidad, la irregularidad en la infraestructura vial, cambio de sentido en
determinadas calles, accidentalidad, tiempos de semaforizacin entre
otras. Esto es a causa de la intervencin del factor humano, teniendo en
cuenta que l es el que responde a las condiciones del trfico de
diversas maneras ante la misma situacin, un ejemplo que se vive
diariamente es en la reaccin que se tiene cuando el vehculo delantero
frena, se puede decidir por adelantar o en tal caso detenerse y esperar
que avance. La mayora de las veces el congestionamiento vehicular en
una va es provocado por los malos hbitos de conduccin que tienen
las personas que van al volante.

Estos problemas mencionados han llevado a la sociedad a la bsqueda


de optimizacin, para lograr que el trfico vehicular fluya de una mejor
manera, teniendo en cuenta puntos importantes como lo son el
congestionamiento vial y la reduccin de tiempos de traslado.

En esta aplicacin se estudiaron varios tipos de simulacin con el fin de


implementar el adecuado basado en las caractersticas del problema y
as facilitar su proceso, se realiz un trabajo de campo para la
recoleccin de informacin en el flujo vehicular de entrada y salida en
varios tramos de las vas de la ciudad, el objetivo es tener mejor
comprensin del sistema, con una serie de valores de referencia para la
prueba del modelo. Con la informacin obtenida se realizan varias

11
pruebas que se logren ajustar al modelo resultante que ser utilizado
para alimentar la entrada de flujo vehicular a la simulacin.

3 OBJETIVO GENERAL

Desarrollar el motor de un micro simulador de trfico vehicular que


permita modelar diferentes escenarios que brinde una mejor
comprensin del trfico, facilitando el anlisis por parte del usuario.

3.1 OBJETIVOS ESPECFICOS

Simular el comportamiento vial teniendo en cuenta componentes


como por ejemplo: semaforizacin, cruces, horas pico y nmero
de autos que entran y salen de un determinado punto.

Definir caractersticas bsicas que influyen en el flujo de trfico


vehicular como espaciamiento promedio entre vehculos y tiempo
de reaccin entre ellos.

Definir los diferentes parmetros que se deben tener en cuenta al


momento de realizar la simulacin, teniendo en cuenta sus puntos
a favor y en contra.

12
4 DEFINICIN DEL PROBLEMA

Este trabajo consiste en que el usuario (cliente) por medio de una


simulacin planteada pueda encontrar soluciones para un problema
comn como lo es el trfico vehicular, los puntos que se deben tener en
cuenta para modelar son: la semaforizacin con sus tiempos y estados,
el trfico en horas denominadas pico, estado de las vas de la ciudad.

Con esta serie de factores lo que se busca, es darle un mejor manejo al


trfico que se vive a diario en las calles de Cali, teniendo en cuenta los
reportes estadsticos tomados en la simulacin desde varios puntos de
vista.

La medicin de las condiciones del trnsito, dan informacin que facilita


la toma de decisiones sobre la mejora del producto.

13
5 REFERENTE TERICO

5.1 TEORA DE GRAFOS

...En una reciente publicacin (Enciclopedia Libre Universal en Espaol).. ..En


matemticas y en ciencias de la computacin, la teora de grafos 2 (tambin
llamada teora de las grficas) estudia las propiedades de los grafos. Un grafo
es un conjunto, no vaco, de objetos llamados vrtices (o nodos) y una
seleccin de pares de vrtices, llamados aristas (edges) que pueden ser
orientados o no. Tpicamente, un grafo se representa mediante una serie de
puntos (vrtices) conectados por lneas (aristas).

Ilustracin 1 Teora de Grafo

Es de conocimiento que la teora de grafos representa situaciones que


comnmente se relacionan con la vida cotidiana de las personas, como por
ejemplo: redes de comunicacin y redes de transporte.

2
http://enciclopedia.us.es/index.php/Teor%25C3%25ADa_de_grafos

14
5.2 REDES DE TRANSPORTE

Es posible representar mediante un grafo orientado, los flujos que circulan a


travs de una red de transporte. En ciertas aplicaciones interesa determinar el
flujo mximo (de un fluido, datos, etc.) que fluye a travs de una red desde un
cierto nodo s (origen) hasta otro nodo t (destino), cuando los enlaces de la red
tienen una capacidad limitada de transmisin del flujo. Una red de transporte
deber tener uno o varios vrtices origen y uno o varios vrtices destino. El
resto de vrtices, con semigrados interior y exterior no nulos, sern vrtices de
transbordo.

5.3 TEORIA DE COLAS

...En el siguiente articulo (Teora de Colas, Enrique Gracin (2012))


comenta... ..Una cola es una lnea de espera. La Teora de Colas 3, establece
modelos matemticos para resolver el problema que plantean, buscando
encontrar la solucin adecuada entre los costes del sistema y los tiempos
medios de permanencia de la cola. Normalmente sta teora se basa en
situaciones en donde se forman turnos de espera para la prestacin de un
servicio o ejecucin de un trabajo.

5.4 MODELOS DE COLAS

Algunos modelos de colas son muy sencillos y otros requieren la aplicacin de


teoras matemticas sumamente complejas. Existen muchos modelos de colas,
pero se puede hacer una primera clasificacin en dos grandes grupos:

Cola determinista: aquella de la que se puede dar, a priori, una


descripcin detallada. Es el modelo ms simple y presupone conocidos
factores como los intervalos de tiempo de llegada y de espera. Es lo que
podramos llamar una cola sin sorpresas.

15
Cola estocstica: una cola que no puede ser descrita sin hacer intervenir
las probabilidades. Es un modelo ms realista que el anterior. En un da
lluvioso, por ejemplo, es ms probable que aumenten las colas de gente
en las paradas de taxis y que disminuyan en la entrada al zoo.

En la prctica, los modelos se mueven en un amplio abanico entre los extremos


descritos por los dos anteriores. En la mayora de las colas estocsticas se
hace necesaria la ayuda de un simulador, es decir de un programa informtico
capaz de recrear el modelo real, con todas sus componentes probabilsticas,
que permita el establecimiento de un modelo comparativo.

5.5 COLAS DE TRFICO

Las teoras matemticas que tratan el problema general de las colas se les han
resistido durante aos las colas formadas por el trfico de vehculos. Su
caracterstica aleatoria, dinmica de retenciones y aceleraciones no ha
acabado por ajustarse a ningn modelo conocido, por lo que se han requerido
de nuevos planteamientos, con sus correspondientes tcnicas matemticas. El
ms conocido es el modelo llamado autmata celular, conocido por ser un
sistema dinmico capaz de modelar sistemas naturales como por ejemplo, una
coleccin de objetos que logran interactuar unos con otros.

Este modelo se basa en programas informticos muy sencillos en los que se


introducen un nmero indeterminados de vehculos virtuales en la pantalla del
ordenador, capacitados para ciertas acciones simples, como girar a la derecha
o a la izquierda, detenerse o aplicar una velocidad, obteniendo con esto
estudiar el comportamiento de la simulacin. Este planteamiento ha

3
http://www.enriquegracian.com/articulos/teoria-de-colas

16
proporcionado resultados interesantes en el estudio del trfico, ya que los
vehculos, se dedican a formar colas...

5.6 DEFINICIN DE SIMULADOR

En una reciente publicacin (Enciclopedia libre Wikipedia)


..Un simulador4 es un aparato, por lo general informtico, que permite la
reproduccin de un sistema. Los simuladores reproducen sensaciones que en
realidad no estn sucediendo.

Un simulador pretende reproducir tanto las sensaciones fsicas


(velocidad, aceleracin, percepcin del entorno) como el comportamiento de
los equipos de la mquina que se pretende simular. Para simular las
sensaciones fsicas se puede recurrir a complejos mecanismos hidrulicos
comandados por potentes ordenadores que mediante modelos matemticos
consiguen reproducir sensaciones de velocidad y aceleracin. Para reproducir
el entorno exterior se emplean proyecciones de bases de datos de terreno. A
este entorno se le conoce como "Entorno Sinttico".

Para simular el comportamiento de los equipos de la mquina simulada se


pueden recurrir varias tcnicas. Se puede elaborar un modelo de cada equipo,
se puede utilizar el equipo real o bien se puede utilizar el mismo software que
corre en el equipo real pero hacindolo correr en un ordenador ms
convencional (y por lo tanto ms barato). A esta ltima opcin se la conoce
como "Software Rehosteado"..

4
http://es.wikipedia.org/wiki/Simulador

17
5.7 MODELO VISTA CONTROL

...En el siguiente articulo (Modelo Vista Controlador Definicin y


Caractersticas, Juan Sebastin, Ingeniero de Sistemas y Telecomunicaciones
de la Universidad de Manizales (Colombia)) define... ..Modelo Vista
Controlador5 (MVC) como un patrn de arquitectura de software que separa los
datos de una aplicacin, la interfaz de usuario, y la lgica de control en tres
componentes distintos. El patrn MVC se ve frecuentemente en
aplicaciones web, donde la vista es la pgina HTML y el cdigo que provee de
datos dinmicos a la pgina, el modelo es el Sistema de Gestin de Base de
Datos y la Lgica de negocio y el controlador es el responsable de recibir los
eventos de entrada desde la vista.

Modelo

Vista Control

Ilustracin 2 Modelo-Control-Vista

La finalidad del modelo es mejorar la reusabilidad por medio del desacople


entre la vista y el modelo. Los elementos del patrn son los siguientes:

El modelo es el responsable de:

1. Acceder a la capa de almacenamiento de datos. Lo ideal es que el


modelo sea independiente del sistema de almacenamiento.

5
http://www.comusoft.com/modelo-vista-controlador-definicion-y-caracteristicas

18
2. Define las reglas de negocio (la funcionalidad del sistema). Un
ejemplo de regla puede ser: Si la mercanca pedida no est en el
almacn, consultar el tiempo de entrega estndar del proveedor.

3. Lleva un registro de las vistas y controladores del sistema.

4. Si estamos ante un modelo activo, notificar a las vistas los


cambios que en los datos pueda producir un agente externo (por
ejemplo, un fichero bath que actualiza los datos, un temporizador
que desencadena una insercin, etc).

El controlador es el responsable de:

1. Recibe los eventos de entrada (un clic, un cambio en un campo de


texto, etc.).

2. Contiene reglas de gestin de eventos, del tipo SI Evento Z,


entonces Accin W. Estas acciones pueden suponer peticiones al
modelo o a las vistas. Una de estas peticiones a las vistas puede
ser una llamada al mtodo Actualizar(). Una peticin al modelo
puede ser Obtener_tiempo_de_entrega( nueva_orden_de_venta
).

Las vistas son responsables de:

1. Recibir datos del modelo y las muestras al usuario.

2. Tienen un registro de su controlador asociado (normalmente


porque adems lo instancia).

19
3. Pueden dar el servicio de Actualizacin (), para que sea invocado
por el controlador o por el modelo (cuando es un modelo activo
que informa de los cambios en los datos producidos por otros
agentes)...

6 PLANTEAMIENTO ESTADSTICO6

Proexport Colombia (2012, p.3-5), descubri que... ..Colombia es un


escenario ideal para generar una plataforma de fabricacin y ensamble de
vehculos, camiones, buses y autopartes destinados a abastecer el mercado
nacional y regional.

Colombia es el cuarto mayor productor de vehculos en Latinoamrica


empleando 2,5% del personal ocupado dentro de la industria manufacturera del
pas.

Esta industria en Colombia comprende la actividad de ensamblaje (vehculos


ligeros, camiones, buses y motocicletas) y la fabricacin de partes y piezas
utilizadas en el ensamblaje para OEM y mercado de reposicin, lo que
involucra a proveedores de insumos de otras industrias como metalmecnica,
petroqumicos (plsticos y cauchos) y textiles.

Actualmente, el pas tiene un parque automotor de alrededor de 3,8 millones de


unidades de vehculos, aproximadamente el 59,5% son vehculos importados..

6
http://www.inviertaencolombia.com.co/images/Perfil%20Automotriz_2012.pdf

20
6.1 PROBLEMA REFERENTE A LA INFRAESTRUCTURA DEL
PAS7

...En el siguiente articulo (Movilidad: una crisis sin solucin?, Cmara


Colombiana de la Infraestructura (2012) ) comenta... ..Colombia se urbaniz
repentinamente entre 1950 y 1960. Por recomendacin del economista
canadiense Lauchlin Currie, el pas tena que volcarse urgentemente del campo
a las ciudades, creando un modelo de una ciudad capital principal y varias
ciudades intermedias alrededor. Fue as como explotaron demogrficamente
ciudades como Bogot, Medelln, Cali, Barranquilla, Bucaramanga, Ccuta y
Pereira. Pero hubo un problema: no hubo planeacin urbanstica. Las ciudades
crecieron aceleradamente, pero su infraestructura de transporte no se
desarroll de la misma manera.

Hoy las administraciones locales de estas ciudades se han dado cuenta de


este fenmeno y estn intentando salirle al paso al problema, pero el inusitado
aumento del parque automotor y la necesaria construccin de obras viales que
descongestionen las ciudades, han provocado que haya una crisis de movilidad
en las principales ciudades de Colombia.

6.2 EL CASO DE CALI

Los problemas de Cali en materia de movilidad y transporte son serios. Ahora


es muy frecuente ver en las principales vas de la ciudad los embotellamientos
que dificultan el trnsito a travs de la capital del Valle.

Los estudios de la Secretara de Trnsito de Cali muestran que diariamente se


mueven por la ciudad ms de 500 mil automotores a travs de 2.000 kilmetros
de vas urbanas, la gran mayora en regular o mal estado. Cada ao se

7
http://www.infraestructura.org.co/historial/noticia9_052807.php

21
matriculan unos 38 mil vehculos en la ciudad, lo que eleva el parque actual de
carros particulares a 300 mil, lo mismo que unas 250 mil motocicletas. Adems,
el 59 por ciento de los cruces semaforizados presentan un estado de
saturacin que los tiene a punto de colapsar.

Otros problemas que agravan las dificultades para el desplazamiento en Cali


es la sobreoferta de transporte pblico, lo que agrava an ms los problemas
que atraviesa en estos momentos la ciudad en materia de movilidad. Teniendo
en cuenta el deterioro crtico de la malla vial..

6.3 PRODUCCIN Y COMPOSICIN DEL MERCADO EN


COLOMBIA

..La produccin de vehculos ligeros en Colombia comprende la operacin de


tres ensambladoras en la actualidad: General Motors, Renault y Mazda. En el
2011, el porcentaje de participacin nacional de vehculos ensamblados en el
pas asciende a 40,5% (alrededor de 131.510 unidades de las 324.570).

En el caso de vehculos comerciales de carga, la produccin nacional est a


cargo de General Motors e Hino. En el pas solo se produce camiones de
menos de 10 toneladas de carga, no se cuenta con produccin de tracto
camiones, estos son importados generalmente de Mxico.

En el segmento de buses de pasajeros, el pas cuenta con la presencia de dos


importantes ensambladoras brasileras Busscar (Busscarnibus S.A.) y
Superpolo (Marcopolo), empresas lderes en produccin de buses articulados,
intermunicipales y padrones, principalmente para los sistemas de transporte
masivo de las principales ciudades en Colombia.

22
El mercado de vehculos en Colombia est compuesto por una participacin de
produccin nacional del 43% y el 57% restante es importado principalmente por
Corea del Sur, Mxico, India, Japn, Ecuador, China y Estados Unidos.

Demanda de vehculos en Colombia 2007 2011

Ilustracin 3 Demanda de Vehculos en Colombia

La recuperacin de la industria en Colombia despus de la crisis econmica


mundial vislumbra al sector automotor como uno de sus pioneros. En el 2011,
el comportamiento de este sector mostr los ms altos resultados en ventas,
produccin y nivel de empleo en su historia. Las ventas tuvieron un ao record
en unidades nuevas, cerca de 324.570 representando un incremento del 28%
con respecto al ao anterior (253.869 unidades).

23
Ilustracin 4 Consumo aparente de Vehculos en Colombia

La demanda de vehculos en Colombia refleja un incremento en el consumo de


vehculos ligeros con un crecimiento del 30% en 2011. Sector que alcanz una
cifra histrica de 179.922 unidades vendidas..

7 PROBLEMAS MODERNOS EN EL TRFICO8

Roger P. Roess, (2004). TRAFFIC ENGINEERING. Upper Saddle River, New


Jersey: Pearson Prentice Hall. Cap 4, 5, 8. Describe ..La congestin urbana
ha sido una cuestin importante teniendo en cuenta el ciclo de demanda de
transporte, no siempre es posible resolver problemas de congestin a travs de
expansin de capacidad. Por lo tanto los Ingenieros de trfico estn
involucrados en el desarrollo de programas y estrategias para administrar la
demanda en tiempo y espacio y desalentar el crecimiento en caso necesario.

24
Una verdadera pregunta no es "Cmo cunta capacidad es necesaria para
manejar la demanda? " sino ms bien, "Cuntos vehculos o personas pueden
entrar en reas congestionadas en plazos de tiempo designado?'

7.1 Caractersticas

La introduccin a los estudios de trfico es el punto de partida para la mayora


de ingenieros ya que es fundamental tener una amplia variedad de datos e
informacin donde describe adecuadamente el estado actual de los sistemas,
instalaciones y trfico.

Los ingenieros de trfico recopilen datos por muchas razones y aplicaciones:

Administrar el sistema fsico. Los inventarios fsicos del sistema son siempre
elementos necesarios. Estos incluyen dispositivos de control de trfico,
accesorios de iluminacin y carreteras. Estos inventarios ayudan a evaluar los
elementos que deban ser reemplazados o reparados y en qu horario previsto.

Investigando las tendencias con el tiempo. Los ingenieros de trfico necesitan


datos de tendencia para las necesidades futuras del transporte. Estudios
paramtricos en los volmenes de trfico, velocidades y densidades ayudan a
cuantificar la demanda actual y evaluar la calidad del funcionamiento de las
instalaciones.

Comprender las necesidades y opciones del pblico y la industria. El Ingeniero


de trfico debe tener una buena medida de cmo y por qu la gente viaja con
fines de planificacin y desarrollo. Estudios de Cmo los viajeros tomar
decisiones de modo, tiempo de decisiones de viaje, y otros juicios es

8
Roger P. Roess, Elena S. Prassas, William R. McShane, TRAFFIC ENGINEERING. Pearson
Prentice Hall

25
fundamental para la comprensin en demanda de viajes, Relaciones bsicas o
parmetros de calibracin. Medidas fundamentales, como percepcin reaccin
de tiempo, avances y espacio en autopistas y otras instalaciones de flujo
ininterrumpido, relaciones y otros parmetros claves debe ser adecuadamente
cuantificados y calibrados.

8 TECNOLOGAS MODERNAS

El rpido avance de las tecnologas de la informacin en los ltimos aos ha


mejorado considerablemente el Ingeniero de trfico debe tener la capacidad de
recopilar, resumir y analizar la informacin. Tecnologas como la deteccin,
imagen de rea, procesos de identificacin, comunicaciones inalmbricas,
sistemas de localizacin satelital, asignacin de tecnologas, y similares
seguirn revolucionando tanto la cantidad y calidad de los datos que pueden
ser recogidos, almacenados y analizados.

9 TIPOS DE ESTUDIOS

Sera literalmente imposible enumerar todos los estudios en el que se


involucran ingenieros de trfico. Algunos de los ms comunes incluyen:

9.1 Estudios de volumen

Los conteos de trfico son los ms bsicos estos estudios se dan en principal
medida a la demanda; prcticamente todos los aspectos de Ingeniera de
trfico requieren volumen como entrada, incluyendo la planificacin de la
carretera y diseo, las decisiones en el control y operaciones.

26
9.2 Estudios de velocidad
Las caractersticas de velocidad son fuertemente relacionadas con cuestiones
de seguridad y se necesitan para evaluar la viabilidad de la normativa vigente
de la velocidad o establecer otras nuevas de forma racional.

9.3 Tiempos de viaje


Constituyen una importante medida de calidad de servicio a los automovilistas
y pasajeros; muchos modelos de previsin de la demanda tambin requieren
buena y precisas medidas de tiempo de viaje.

9.4 Retrasar los estudios


Retraso es un trmino que tiene muchos significados, en esencia, es la parte o
partes del tiempo de viaje que los usuarios encuentran, tales como parada en
un semforo o a causa de un accidente (obstruccin).

9.5 Estudios de densidad


La densidad se calcula a partir de mediciones de caudal y velocidad en lugares
importantes.

9.6 Estudios de accidente


Como la seguridad del trfico es la principal responsabilidad del Ingeniero, se
debe tener en cuenta las caractersticas del accidente, con factores causales y
en ubicaciones especficas..

27
10 ESTADO DEL ARTE

Dentro del entorno de simulacin de trfico existen varios tipos, Que fueron
objeto de estudio, para el anlisis objetivo al tema planteado con respecto a
nuestro aplicativo. Se dan a conocer los ms utilizados e implementados a nivel
de simuladores.

SUMO9 (Simulation of Urban MObility)


..Es una fuente abierta, altamente porttil, de simulacin microscpica de
trfico diseado para manejar grandes redes de carreteras.. (German
Aerospace Center, Institute of Transportation SystemsLayout based on "Three
Quarters" by "SimplyGold" 2011-2012).

TransModeler10
..Es un potente y verstil paquete de simulacin, aplicable a una amplia gama
de tareas de planeamiento y modelamiento de trfico. Este puede simular toda
clase de redes de viales, desde autopistas hasta calles de los centros de las
ciudades, y puede analizar redes multimodales de reas extensas con gran
detalle y fidelidad..Construido por ( caliper TransModeler Traffic Simulation
Software).

9
http://sumo.sourceforge.net/
10
http://www.caliper.com/transmodeler/descripcion.htm

28
TEC-INTRAF11

Ilustracin 5 Tec Intraf

..Es la herramienta lder en micro simulacin que permite evaluar de manera


precisa y confiable las situaciones actuales del trfico vehicular, as como
tambin proponer y validar las diversas propuestas para preparar soluciones
efectivas.

Se especializa en el desarrollo de sistemas de recoleccin, informacin,


planificacin, gestin y control de trfico vehicular, que permiten al cliente
ejercer influencia sobre las condiciones de la movilidad en tiempo real y
planificar ptimamente los cambios y acciones a implementar.. Construido por
( Grupo InTech Solutions)

11
http://www.grupointech.com/tec-intraf/

29
AIMSUN12: Simulador de trnsito vehicular

Ilustracin 6 Aimsun

..El programa de micro simulacin AIMSUN dentro de las mltiples ventajas


que ofrece algunas se enumeran a continuacin:

El software Permite el desarrollo de modelos a partir de archivos cuya


extensin es .dwg (levantamientos topogrficos en AUTOCAD), lo cual
facilita la elaboracin de modelos geomtricos de las vas.

La micro simulacin permite evaluar con mucho ms detalle la situacin


en una o varias redes viales, y permite proponer soluciones puntuales y
adecuadas al sitio.

El ambiente de trabajo del programa es amigable al usuario y permite


implementar las soluciones que el proyecto propone de una manera
sencilla. Tales soluciones abarcan semforos inteligentes, planes de
desviacin del trnsito, cambios de circulacin, planes de control de
trfico, planes de control para los sistemas de transporte pblico, sistema

12
http://www.einphos.com.ve/portal/index.php?option=com_content&view=article&id=56&Itemid=68

30
de enrutamiento exclusivo entre otros.. construido por (Einphos, CA -
2009 RIF J-31272969-4).

Para poder llevar a cabo la realizacin del simulador, y el control del mismo, fue
necesario, entender diferentes modelos de trfico vehicular, Roger P. Roess
(Traffic Engineering, 2004, Cap 5)13 sostuvo que Los modelos matemticos
que comnmente son utilizados en el fenmeno del flujo vehicular, han llevado
a que este punto sea requisito importante cuando hablamos de la teora del
control matemtico. Existen varios tipos de modelos que han ayudado a
construir este trabajo, y se separan en tres ramas, modelos Macroscpicos,
Modelos mesoscpicos y modelos microscpicos.

11 Modelos Macroscpicos

Se caracteriza por relacionar diferentes variables que son manejadas a lo largo


del proyecto como la velocidad de vehculos, densidad en el trfico y el flujo
vehicular. Es conocido por ser un modelo continuo.

12 Modelos Mesoscpico

Se basa en establecer por medio de mtodos estadsticos los eventos que


cumple un vehculo en un determinado momento teniendo en cuenta la
posicin y la velocidad de desplazamiento.

13 Modelos Microscpicos

...En una reciente publicacin (Enciclopedia libre Wikipedia).. ..Los modelos


microscpicos14 se enfocan en la descripcin del comportamiento del flujo del
trfico vehicular a travs de describir las entidades discretas individuales y

13
Roger P. Roess, Elena S. Prassas, William R. McShane, TRAFFIC ENGINEERING. Pearson
Prentice Hall
14
http://es.wikipedia.org/wiki/Tr%C3%A1nsito_vehicular

31
atmicas que interactan unas con otras (en este caso cada vehculo
individual). Son modelos por lo general discretos..

14 DISEO Y METODOLOGA DEL PROYECTO

Fase Nro. Iteraciones Duracin

Fase de inicio 5 3 meses

Fase de elaboracin 4 2 mes

Fase de construccin 5 2 meses

Fase de transicin 3 2 meses

Esta aplicacin se desarrollar en lenguaje de programacin java,


aplicando algunos conceptos como hilos, trabajando tambin con bases
de datos Oracle.

Por medio de nuestro director de proyecto, se busca iniciar desde una


aplicacin que ya se ha investigado con anterioridad, lo que se desea es
continuar con el proceso y as llevarlo a su etapa final.

Fase de inicio: se dar a conocer los objetivos del proyecto, su diseo,


y las diferentes estrategias que se plantearn en la elaboracin del
mismo, basndonos en los requerimientos que exige la aplicacin.

Fase de elaboracin: elaboracin de los requerimientos, as como los


casos de uso y desarrollo del cdigo de la aplicacin.

32
Fase de construccin: arquitectura y elaboracin de los diferentes
modelos que actan en la aplicacin.

Fase de transicin: diseo, pruebas y ajustes finales de la aplicacin.

15 FRONTERAS DEL SISTEMA

De acuerdo con los objetivos de la aplicacin, se han establecido las


siguientes fronteras.

En el alcance Fuera del alcance


Crear una aplicacin que permita
interactuar el usuario principal con la
mquina.
La aplicacin debe funcionar bajo los
sistemas operativo Linux y Windows.
Que funcione por el momento en el Que funcione en otros navegadores
navegador Internet Explorer 9.0 y (Ej. Safari, Chrome).
Mozilla Firefox 16.0.
Seguridad para cuentas de usuario, Seguridad especial contra hackers.
contraseas y permisos. Instalar o parchar agujeros de
seguridad en los componentes de
software utilizados.
Crear una aplicacin que utilice la base Crear una aplicacin que utilice la
de datos independiente de la empresa. informacin y base de datos de la
empresa.

33
16 ACTORES DEL SISTEMA

Listado de actores

Usuario Administrador del sistema

34
17 MATRIZ DE REQUERIMIENTOS

Los requerimientos funcionales nos ayudan a comprender ms a fondo


el comportamiento interno de la aplicacin (software), por medio de
diferentes recursos que ayudan a mostrar como la teora y formulacin
de problemas son llevados a la prctica. Interactuando con clculos
matemticos, manipulacin de datos y otras funcionalidades especficas.

Al momento de analizar una serie de requisitos funcionales luego de


diagramar los casos de uso, ya que algunas funcionalidades y requisitos
son previos al diseo, el analista puede llegar a tener cambios por medio
de excepciones, teniendo en cuenta que el desarrollo de software es un
proceso iterativo y algunas funcionalidades son previas al diseo
establecido en los casos de uso. Estos dos elementos (casos de uso y
requerimientos) se complementan en un proceso bidireccional.

35
17.1 LISTA DE REQUERIMIENTOS

El sistema debe validar la entrada del usuario al sistema por medio de


un login y un password.

El sistema debe manejar la gestin del usuario (Crear, modificar,


consultar y eliminar).

El sistema por medio de la simulacin debe almacenar las


configuraciones realizadas en el sistema.

El sistema debe asignar uno o varios usuarios para ingresar al sistema.

El sistema debe ser capaz de hacer una simulacin basado en las


configuraciones del sistema donde interactan las vas, los semforos,
edificios y flujo vehicular.

o Por medio de esta simulacin el sistema debe generar un punto


de partida de un vehculo y un punto de llegada partiendo desde
el tem edificio.

o El sistema debe permitir identificar qu tipo de vehculo est


circulando en la simulacin.

o El sistema debe permitir al usuario generar un nmero de


vehculos al azar teniendo en cuenta la configuracin de flujo
vehicular.

o El sistema debe establecer el nivel de detalle de la simulacin


(microscpico, mesoscpico, macroscpico).

36
o Por medio de la cantidad de vehculos introducidos en el sistema,
se debe identificar el espaciamiento promedio entre cada uno de
ellos.

o El sistema debe identificar por medio del trfico vehicular el


tiempo de los semforos (cuando realizan un cambio de rojo a
verde o viceversa).

o El sistema debe identificar el nmero de vehculos que entran a


hacer parte de la simulacin.

o El sistema debe identificar el nmero de vehculos que salen de la


simulacin, esto lo podemos constatar al momento de que un
vehculo llegue a su destino final (edificio).

o El sistema debe determinar la densidad del trfico, basndose en


las horas pico o transito normal.

37
17.2 FORMATO DE MATRIZ DE REQUERIMIENTOS

ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados


Req. Padre (DD-MMM-
YYYY)
1 Validar usuarios 1-media 08-10-2012 Caso de uso
Proceso.
El sistema debe solicitar al usuario un Login y un password para ingresar a la aplicacin y estos sern validados contra el
sistema de seguridad.
El sistema debe verificar la validez de la contrasea y de acuerdo al usuario el sistema debe establecer las opciones a
las cuales la persona tiene acceso.

ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados


Req. Padre (DD-MMM-
YYYY)
2 Gestin de usuarios 1-media 08-10-2012 Caso de uso

Proceso.
El sistema debe permitir al usuario la creacin, modificacin eliminacin y almacenamiento de datos.
Datos
Cdigo, Nombre, Apellido, Login, password y tipo de usuario.

38
ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados
Req. Padre (DD-MMM-
YYYY)
3 Configuraciones en el 1-Media 08-10-2012 Casos de Uso
Sistema
Proceso.
El sistema por medio de la simulacin debe permitir crear, modificar, eliminar y almacenar los datos pertinentes.
Datos
Id, simulacin, Tipo de vehculos, Usuarios.

ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados


Req. Padre (DD-MMM-
YYYY)
4 Asignacin de Usuarios 1-Alta 08-10-2012 Casos de Uso

Proceso.
El sistema debe permitir crear, modificar, eliminar y almacenar los datos de usuarios.

39
ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados
Req. Padre (DD-MMM-
YYYY)
5 Asignar Puntos de 1-Alta 08-10-2012 Casos de Uso
partida de un vehculo.
Proceso.
.
El sistema debe permitir la asignacin de una serie de puntos de partida destinados con el tem Edificio donde saldrn
los vehculos que van a interactuar en la simulacin.

ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados


Req. Padre (DD-MMM-
YYYY)
6 Asignar puntos de 1-Alta 08-10-2012 Casos de Uso
llegada de un vehculo
Proceso.

El sistema debe permitir la asignacin de una serie de puntos de llegada destinados con el tem Edificio donde saldrn
los vehculos que van a interactuar en la simulacin.

40
ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados
Req. Padre (DD-MMM-
YYYY)
7 Identificacin de tipo de 1-Alta 08-10-2012 Casos de Uso
vehculo.
Proceso.

El sistema debe permitir al usuario asignar un tipo de vehculo que ser transitado en la simulacin, con el fin de observar
las diferentes escenas que se presentan en el flujo vehicular.

ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados


Req. Padre (DD-MMM-
YYYY)
8 Generar vehculos. 1-Alta 08-10-2012 Casos de Uso

Proceso.
El sistema debe generar en la simulacin un nmero de vehculos que se desplazaran por las diferentes calles con unos
parmetros establecidos asignados por un usuario, este proceso se har al azar.

41
ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados
Req. Padre (DD-MMM-
YYYY)
9 Establecer nivel de 1-Alta 08-10-2012 Casos de Uso
detalle de la simulacin.
Proceso.
De acuerdo a la simulacin este proceso se encarga de establecer segn el nivel de detalle la forma con la cual ser
vista la aplicacin por medio de unas configuraciones en el sistema.

ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados


Req. Padre (DD-MMM-
YYYY)
10 Identificar espaciamiento 1-Alta 08-10-2012 Casos de Uso
entre vehculos
Proceso.
El sistema debe generar por medio de una serie de clculos el espacio q hay de distancia entre dos vehculos, esto con el
fin de provocar estrellones y congestin vehicular.

42
ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados
Req. Padre (DD-MMM-
YYYY)
11 Evaluar tiempo de 1-Alta 08-10-2012 Casos de Uso
semaforizacin.
Proceso.
El sistema debe generar en la simulacin el tiempo de cambio de semforo, de acuerdo al trfico vehicular que se
presente en el momento, por medio de la configuracin del sistema el usuario puede modificar los tiempos de cambio.

ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados


Req. Padre (DD-MMM-
YYYY)
12 Evaluar nmero de 1-Alta 08-10-2012 Casos de Uso
vehculos
Proceso.
El sistema debe evaluar la cantidad de vehculos promedio con se encuentran circulando en las calles, dependiendo la
configuracin del sistema.

43
ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados
Req. Padre (DD-MMM-
YYYY)
13 Generar nivel de trfico 1-Alta 08-10-2012 Casos de Uso

Proceso.
El sistema debe generar de acuerdo a las especificaciones dadas por el usuario el nivel de trfico que hay en la ciudad
teniendo en cuenta las horas pico y el trfico normal.

ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados


Req. Padre (DD-MMM-
YYYY)
14 Generar reporte de 1-Alta 08-10-2012 Casos de Uso
movimientos realizados
en la simulacin.
Proceso.
El sistema debe generar un reporte en un log que muestre cada una de los movimientos realizados en la simulacin.

44
18 CASOS DE USO DEL SISTEMA

18.1 DIAGRAMA DE CASOS DE USO DEL SISTEMA

45
46
18.2 MODELO ENTIDAD RELACIN

47
19 Persistencia de datos

Si bien es cierto, Java permite el manejo desde cero y directamente para la


manipulacin de bases de datos, lo cual se logra mediante JDBC , que permite
la manipulacin directa de tablas como si de lenguaje SQL se tratara, en este
caso , por ser un aplicativo con muchas tablas y mucho ms robusto se utilizar
el mapeo de la base de datos, lo cual se logra hacer automticamente
mediante un aplicativo. Las clases que utilizar la modelacin han sido
generadas a partir de un modelo relacional de base de datos ya implementado
(Figura 1).

En trminos utilizados cuando se usa persistencia, dichas clases se denominan


Entidades. El IDE para su desarrollo ser MyEclipse 10.0 y el Plug-in ORM
(Object-Relational Mapping) utilizado para la generacin de las Entidades ser
Hibernate. Con el mapeo generado por este aplicativo se garantiza el CRUD
(crate, retrieve, update and delete) para el modelo. As por ejemplo, cada vez
que se cree un objeto vehculo, el mismo con todos sus atributos ser
guardado en una base de datos, en su respectiva tabla. Este proceso, debido al
mapeo realizado, se hace de manera transparente y automtica. Igualmente en
cualquier momento, con el fin de analizar la informacin, el objeto podr ser
cargado. Diferentes consultas podrn tambin ser realizadas al mejor estilo de
SQL. Todo esto se hace mediante mtodos especficos del ORM como save,
load y find, que ahorran tiempo de programacin, disminuyen la posibilidad de
cometer errores y evitan la constante escritura de cdigo SQL para lograr los
mismos resultados.

48
19.1 PRINCIPALES GENERALIDADES DE LA SIMULACIN

Para modelar el trfico vehicular en la ciudad de Cali, es necesario conocer el


funcionamiento que cumple cada una de sus variables, teniendo como clases
principales los siguientes objetos.

Vehculo
ruta
semforo
calle
Edificio

El objeto vehculo ser el actor principal en la simulacin. Uno de sus atributos


ser la velocidad mxima y mnima que pueda tener. Esta velocidad y el
nmero de carros presentes en determinado momento en el circuito de calles a
modelar, ser los que determinen la congestin vehicular en una determinada
calle. As, si el vehculo se est desplazando demasiado lento, tendr detrs de
s mismo una cola de vehculos esperando que aumente la velocidad o que
llegue a un cruce de calle. Podr tomar la decisin o no de aumentar la
velocidad en caso de que detrs de s mismo halla demasiados vehculos.
Tambin podr aumentar la velocidad o disminuirla si detecta o no otro
vehculo delante de l. El objeto vehculo tendr tambin dentro de sus
atributos un objeto ruta, que determinar por que calles se desplazar el
vehculo. Si un vehculo se detiene, los dems vehculos detrs de l tambin
lo harn. Las colisiones sern mnimas en el modelo, pero si sucedern. Esto
se lograr, lanzando una colisin aleatoria cada determinado tiempo. Una
colisin podr ser lanzada en cualquier calle o en cualquier cruce. Un vehculo
podr detenerse o no en mitad de un cruce, generando as una congestin
vehicular.

49
El objeto ruta, ser un grafo dirigido y actuar como parmetro en la
asignacin de la ruta que deber seguir un determinado vehculo. Cada cruce
de calle ser un vrtice del grafo y cada calle comprender dos aristas dirigidas
en sentido contrario, para modelar una doble va. Las calles con una sola va,
constarn solamente de una arista dirigida en el grafo. La ruta en s ser
generada aleatoriamente mediante cualquiera de los algoritmos conocidos para
el recorrido de grafos. Un objeto ruta tendr como atributo un tiempo Total
Promedio que guardar el tiempo total promedio de recorrido para una ruta en
particular.

El objeto semforo controlar el flujo de trfico vehicular en los cruces. Tendr


tres estados, rojo, amarillo y verde. El estado verde, le dir al objeto vehculo
que puede continuar su trayectoria, mientras que el estado rojo le dir que
debe detenerse. El objeto semforo guardar dentro de sus atributos una
variable que permita ir contando el nmero de vehculos que pasan por
determinado cruce, as como la hora en que pasan esos vehculos. Por lo
dems, el comportamiento de semforo ser igual al de un semforo tradicional
en las vas.

El objeto calle ser uno de los componentes que formarn la ruta por donde se
desplazar el objeto vehculo. Tendr como atributos un cruce inicial, un cruce
final y un largo, parmetro que ayudar en el clculo del tiempo Total Promedio
de una ruta. Uno de sus atributos ser tambin el nmero de accidentes
ocurridos en su trayectoria, as como el nmero de vehculos que por ella
pasan. Una calle ser una arista dirigida dentro del grafo que modela el mapa
de calles.

Un objeto edificio podr servir como punto de partida y llegada para un


vehculo. Sin embargo, no necesariamente ser as. Un vehculo podr partir
desde cualquier lugar donde se le indique y podr terminar su ruta tambin en

50
cualquier lugar que se le indique. Estos parmetros de partida y llegada sern
introducidos por el usuario.

Todo lo anterior se manejar utilizando la funcionalidad multi-hilos presente en


el lenguaje Java. As, cada actor dentro de la simulacin actuar por cuenta
propia, como un proceso independiente, siendo acorde con la realidad, pues
cada vehculo deber seguir su propia ruta y tomar sus propias decisiones de
como desplazarse por el mapa de carreteras. Cada edificio actuar tambin por
s solo, generando o no vehculos que salgan a desplazarse por el mapa.

Igualmente, todo lo anterior, junto con los aspectos secundarios, garantiza el


CRUD para el modelo, pues cada instancia de cada clase creada junto con sus
eventos y actualizaciones de estado se guardar en una base de datos y dicha
informacin podr luego ser recuperada para un anlisis estadstico, en un
proyecto futuro.

20 PRINCIPALES MTODOS DE LA INTERFAZ GRFICA PARA EL


MODELO

El modelo correr en un Frame que se dividir en dos partes. En una parte se


visualizar la ejecucin grfica de la simulacin y en la otra parte se colocarn
las principales opciones de ejecucin del modelo as como la insercin de
parmetros. Esta ser la parte aplicativa del modelo. Esta parte constar de
dos mdulos, los cuales se podrn acceder a travs de dos pestaas o
elementos de men diferentes. Un Mdulo1 contendr las siguientes opciones
de ejecucin:

Ejecutar simulacin.

Detener simulacin.

51
Pausar simulacin.

Generar ruta.

Como opciones de insercin de parmetros para el mismo Mdulo1 se tendrn


los siguientes:

Tasa de entrada de vehculos, la cual se simular utilizando una


distribucin de probabilidad apropiada.

Velocidad mxima para los vehculos.

Velocidad mnima para los vehculos.

Permitir colisiones.

Tiempo de corrida (Segn escala de tiempo para el modelo).

Ruta ms corta o Ruta aleatoria.

Para el Mdulo2 de la parte aplicativa se tendr las siguientes opciones de


consulta a la base de datos:

Nmero de colisiones por calle y/o cruce de calle.


Nmero de vehculos que pasan por un determinado semforo.
Tiempo promedio por ruta.

52
Velocidad promedio de los vehculos en una calle determinada o por
ruta.
Nmero de vehculos promedio que pasan por una determinada calle.
Nmero de vehculos promedio en el circuito para un lapso determinado.

El men se complementara con estas diferentes opciones.

21 LISTA DE REPORTES EN TRABAJOS FUTUROS

Porcentaje de accidentalidad en una determinada calle.

Porcentaje nmero de accidentes por hora.

Porcentaje de tiempo recorrido en una ruta.

Porcentaje de nmero de vehculos que transitan en horas pico.

Promedio de vehculos en esperan cuando el semforo esta en rojo.

Porcentaje del Flujo total de salida de un semforo.

Porcentaje de vehculos que cruzan cuando el semforo est en


verde.

CONFIGURACIN MAPA (INFRAESTRUCTURA)

Capacidad mxima de vehculos en una calle.

53
Obstruir un carril.

Nmero de carriles en una determinada calle.

Configurar nmero de semforos en una calle.

Niveles de trfico en diferentes horas.

Configurar ubicacin de los semforos.

Crear mapas.

Eliminar mapas.

Crear cruces.

Modificar cruces.

Eliminar cruces.

Consultar cruces por nombre.

Crear calle.

Modificar calle.

Eliminar calle.

Consultar calle por nombre.

54
Crear semforo.

Consultar un determinado semforo.

Eliminar semforo en un caso especial (corte de luz, dao por


robo) etc.

Crear edificio.

Modificar edificio.

Eliminar edificio.

Consultar todas las simulaciones.

Bloquear calle.

Saber cmo actuar cuando hay un accidente con respecto a una


interseccin.

Configurar cantidad de retardadores (polica acostado) en un


carril.

Cuantos vehculos estn almacenados en un determinado


segmento. (llegado estacionado).

55
COMPORTAMIENTO EN LA SIMULACIN

Configuracin de accidentes en horas pico.

Determinar carriles lentos, y carriles rpidos.

Ruta ms rpida y corta.

Configurar tiempos de cambio en un semforo.

Determinar tipo de desplazamiento.

Configurar tiempos de semforo en caso de accidentes.

Configurar Velocidad con que un vehculo da una curva.

Tiempo que tarde el vehculo en cruzar el semforo.

Saber la velocidad mnima en una curva.

Configurar tiempo que tarda un vehculo en detenerse.

Observar las frecuencias de llegada y salida de los vehculos.

Tiempo de estado en verde (libre circulacin del flujo vehicular).

Cambio de orientacin en un carril.

56
Detener carro en algn punto del camino.

Configurar distancia mnima entre dos vehculos.

57
22 LISTADO DE CASOS DE USO

1 Crear Mapas.

2 Consultar mapas por Cdigo.

3 Modificar mapa (Todos los campos con excepcin del Cdigo).

4 Eliminar mapa.

5 Consultar todos los Mapas.

6 Consultar mapa por nombre.

7 Crear Cruces.

8 Consultar Cruces por Cdigo.

9 Modificar Cruces (Todos los campos con excepcin del Cdigo).

10 Eliminar Cruces.

11 Consultar todos los Cruces.

12 Consultar Cruces por nombre.

13 Crear Calle.

14 Consultar Calle por Cdigo.

15 Modificar Calle (Todos los campos con excepcin del Cdigo).

16 Eliminar Calle.

17 Consultar todos los Calle.

18 Consultar Calle por nombre.

19 Crear Semforo.

20 Consultar Semforo por Cdigo.

21 Modificar Semforo (Todos los campos con excepcin del Cdigo).

22 Eliminar Semforo.

58
23 Consultar todos los Semforo.

24 Consultar Semforo por nombre.

25 Crear Edificio.

26 Consultar Edificio por Cdigo.

27 Modificar Edificio (Todos los campos con excepcin del Cdigo).

28 Eliminar Edificio.

29 Consultar todos Edificio.

30 Consultar Edificio por nombre.

31 Crear Simulacin.

32 Consultar Simulacin por Cdigo.

33 Modificar Simulacin (Todos los campos con excepcin del Cdigo).

34 Eliminar Simulacin.

35 Consultar todos los Simulacin.

36 Consultar Simulacin por nombre.

37 Crear Configuracin Vial.

38 Consultar Configuracin Vial por Cdigo.

39 Modificar Configuracin Vial (Todos los campos con excepcin del


Cdigo).

40 Eliminar Configuracin Vial.

41 Consultar todos los Configuracin Vial.

42 Consultar Configuracin Vial.

43 Crear Parmetros de Configuracin Vial.

44 Consultar Parmetros de Configuracin Vial.

45 Modificar Parmetros de Configuracin Vial (Todos los campos con


excepcin del cdigo).

59
46 Eliminar Parmetros de Configuracin Vial.

47 Consultar todos los Parmetros de Configuracin Vial.

48 Consultar Parmetros de Configuracin Vial por nombre.

49 Crear Configuracin Semafrica.

50 Consultar Configuracin Semafrica por Cdigo.

51 Modificar Configuracin Semafrica (Todos los campos con


excepcin del Cdigo).

52 Eliminar Configuracin Semafrica.

53 Consultar todos las Configuracin Semafrica.

54 Consultar Configuracin Semafrica por nombre.

55 Crear Parmetros Configuracin Semafrica.

56 Consultar Parmetros Configuracin Semafrica por Cdigo.

57 Modificar Parmetros Configuracin Semafrica (Todos los campos


con excepcin del Cdigo).

58 Eliminar Parmetros Configuracin Semafrica.

59 Consultar todos los Parmetros Configuracin Semafrica.

60 Consultar Parmetros Configuracin Semafrica por nombre.

61 Crear Configuracin Edificio.

62 Consultar Configuracin Edificio por Cdigo.

63 Modificar Configuracin Edificio (Todos los campos con excepcin


del Cdigo).

64 Eliminar Configuracin Edificio.

65 Consultar toda la Configuracin Edificio.

66 Consultar Configuracin Edificio por nombre.

67 Crear Configuracin Edificio.

60
68 Consultar Configuracin Edificio por Cdigo.

69 Modificar Configuracin Edificio (Todos los campos con excepcin


del Cdigo).

70 Eliminar Configuracin Edificio.

71 Consultar toda la Configuracin Edificio.

72 Consultar Configuracin Edificio por nombre.

73 Crear Parmetros Configuracin Edificio.

74 Consultar Parmetros Configuracin Edificio por Cdigo.

75 Modificar Parmetros Configuracin Edificio (Todos los campos con


excepcin del Cdigo).

76 Eliminar Parmetros Configuracin Edificio.

77 Consultar todos los Parmetros Configuracin Edificio.

78 Consultar Parmetros Configuracin Edificio por nombre.

61
23 ANLISIS DEL CDIGO MOTOR DE FLUJO

A continuacin se va a mostrar por medio de los paquetes desarrollados, las


diferentes clases que interactan para el funcionamiento del aplicativo,
desplegndose en los siguientes paquetes:

Actores.
Dialogos.
Digrafos Grafos Dirigidos.
Guis.
Panel Digrafo.
Pojos.
Utilidades.
o Cola.
o Lista.
o Nodo.
Mapping.

Actores: son los agentes que interactan en la simulacin, los cuales


tienen como clases, cruces, rutas, vehculos y grafos dirigidos.

Esta es la clase Vehculos

package Actors;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.util.ArrayList;

import Utilitary.DibujaFiguras;

public class Vehiculo implements DibujaFiguras, Runnable {

private double z; //posicin y

62
private double z0; //posicin y inicial
private double vz0; //velocidad y inicial;
private double x;// posicin x;
private double x0; //posicion x inicial;
private double vx0; //velocidad x inicial ;
private double velocidadInicial;
private double tiempo;
private boolean puedoMoverme = true; //indica si el vehiculo puede moverse
private double aceleracion=0;
public ArrayList<Point> ListaPuntos=new ArrayList<Point>();
public int indice=0;
private double[] vectorDirector;
private boolean simular=false; //indica si se corre la simulacion
private boolean trazarRuta=false; //indica si se habilita el trazado de una ruta
private Point punto1, punto2;

public Vehiculo(){

public void dibujar(Graphics g) {


//se verifica que no se halla alcanzado el vertice final de la ruta
if((ListaPuntos!=null)&&(indice<ListaPuntos.size()+1)){
g.setColor(Color.ORANGE);
for(int i=0;i<ListaPuntos.size()-1;i++){
g.drawLine(ListaPuntos.get(i).x,ListaPuntos.get(i).y,

ListaPuntos.get(i+1).x,ListaPuntos.get(i+1).y);
}
if(ListaPuntos!=null){
g.fillOval(((int) x)-4, ((int) z)-4, 8, 8);}
}

//g.setColor(Color.DARK_GRAY);
//g.fillRect(0, 0, 1000, 1000);
//g.setColor(Color.RED);
//g.fillOval(ListaPuntos.get(indice).x,ListaPuntos.get(indice).y, 15, 15);
//g.setColor(Color.BLUE);
//g.fillOval(ListaPuntos.get(indice+1).x,ListaPuntos.get(indice+1).y, 15, 15);

//verifica si se ha presionado en un punto adicional para dibujar la arista que


conecta
if((punto2!=null)){

63
g.setColor(Color.ORANGE);
g.drawLine(punto1.x,punto1.y,punto2.x,punto2.y);
punto1=punto2;// el punto1 es ahora el punto2 final que se ha trazado
punto2=null; //punto2 se habilita para asignarle unas nuevas
coordenadas
}
//g.drawLine(0, 300, 400, 300);

public void iniciarVariables(){

// evalua puntos de la ruta de par en par.

z0 = ListaPuntos.get(indice).y; // z0 = valor del punto inicial en la ruta.


z=z0;
//JOptionPane.showMessageDialog(null, "Z= "+z);
x0 = ListaPuntos.get(indice).x; //x0 = valor x del punto final en la ruta
x=x0;
tiempo = 0;
vectorDirector=calcularVectorDirector();
calcularVelocidad();
}

private double[] calcularVectorDirector() {

// calcula el vector unitario que dara direccion de velocidad y posicion.

int direccionX=ListaPuntos.get(indice+1).x-ListaPuntos.get(indice).x;
//JOptionPane.showMessageDialog(null, "Vx = "+direccionX);
int direccionY=ListaPuntos.get(indice+1).y-ListaPuntos.get(indice).y;
//JOptionPane.showMessageDialog(null, "Vy = "+direccionY);
double norma=Math.sqrt(Math.pow(direccionX,2)+Math.pow(direccionY,
2));
//JOptionPane.showMessageDialog(null, "norma = "+norma);
double[] vectorDir = new double[2];
vectorDir[0]=direccionX/norma;
vectorDir[1]=direccionY/norma;
return vectorDir;

public void calcularVelocidad(){

// calcula las componentes de la velocidad en cada direccion

64
vz0 = velocidadInicial * vectorDirector[1];
//JOptionPane.showMessageDialog(null,"Vy> = "+vectorDirector[1]+"Vz0
= "+vz0);
vx0 = velocidadInicial * vectorDirector[0];
//JOptionPane.showMessageDialog(null," Vx> = "+vectorDirector[0]+"Vxo
= "+vx0);

public void moverse() {

// si puede moverse el mismo lanza su proceso run()


if (puedoMoverme) {
new Thread(this).start();
}

public void run() {


puedoMoverme = false;

// Determina si la coordenada y del punto inicial es menor que la coordenada Y


// del punto final. "Linea inclinada hacia abajo"

if(ListaPuntos.get(indice).y<ListaPuntos.get(indice+1).y){
while (z < ListaPuntos.get(indice+1).y) {
try {
update();
Thread.sleep(60);

//JOptionPane.showMessageDialog(null, "Posicion Y
= "+z);
//JOptionPane.showMessageDialog(null, "Posicion X
= "+x);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
//Reinicia las varibles y activa el movimiento

puedoMoverme = true;

65
indice++;
//JOptionPane.showMessageDialog(null,"nuevo indice = "+indice);
if((indice+1)<ListaPuntos.size()+1){
iniciarVariables();
z=ListaPuntos.get(indice).y;
moverse();
}

}
else{
// la linea esta inclinada hacia arriba. En este caso el valor Y del
punto inicial
// es mayor que el valor Y del punto final

while (z > ListaPuntos.get(indice+1).y) {


try {
update();
Thread.sleep(60);

//JOptionPane.showMessageDialog(null, "Posicion Y
= "+z);
//JOptionPane.showMessageDialog(null, "Posicion X
= "+x);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
//Reinicia las varibles y activa el movimiento

puedoMoverme = true;
indice++;
if((indice+1)<ListaPuntos.size()+1){
iniciarVariables();
z=ListaPuntos.get(indice).y;

moverse();
}

}
}

66
// actualiza las posiciones X y Y de la particula para cada intervalo de tiempo,
para
// cada repaint()

public void update() {


//actualizar el tiempo y la nueva posicion.
double incrementoTiempo = 0.05;
tiempo += incrementoTiempo;
//se aplica la frmula x= v0.cos.t
x = x0+vx0* tiempo+0.5 * aceleracion *
Math.pow(tiempo, 2);
z = z0+vz0 * tiempo + 0.5 * aceleracion *
Math.pow(tiempo, 2);
//posicionamos el proyectil respecto a sus coordenadas iniciales.
//z = 1000 - z;

//JOptionPane.showMessageDialog(null,"HOLA");
velocidadInicial = 60;
//JOptionPane.showMessageDialog(null, "Velocidad = "+velocidadInicial);
//angulo = Integer.valueOf(textFieldAngulo.getText());
iniciarVariables();
//VehiculoDAO vehiculoDAO = new VehiculoDAO();
//vehiculoDAO.guardaVehiculo(this);
moverse();

@Override
public void transladar(int tx, int ty) {
// TODO Auto-generated method stub

}
}

Daos: Se encarga de manejar los escenarios de la simulacin para la


captura de datos, las clases son callelogicadaos y crucelogicadaos.

67
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;

import Actors.HibernateUtil;
import POJOS.Callelogica;

public class calleLogicaDAO


{
private Session sesion;
//private Transaction tx;

public String guardacalleLogica(Callelogica calle) throws


HibernateException
{
String id = "0";

try
{
iniciaOperacion();
id = (String) sesion.save(calle);
sesion.getTransaction().commit();
//tx.commit();
} catch (HibernateException he)
{
manejaExcepcion(he);
throw he;
} finally
{
sesion.close();
}

return id;
}

public void actualizacalleLogica(Callelogica calle) throws


HibernateException
{
try
{
iniciaOperacion();
sesion.update(calle);

68
sesion.getTransaction().commit();
//tx.commit();
} catch (HibernateException he)
{
manejaExcepcion(he);
throw he;
} finally
{
sesion.close();
}
}

public void eliminaCalleLogica(Callelogica calle) throws


HibernateException
{
try
{
iniciaOperacion();
sesion.delete(calle);
sesion.getTransaction().commit();
//tx.commit();

} catch (HibernateException he)


{
manejaExcepcion(he);
throw he;
} finally
{
sesion.close();
}
}

public Callelogica obtenCallelogica(String codCalle) throws


HibernateException
{
Callelogica calle = null;
try
{
iniciaOperacion();
calle = (Callelogica) sesion.get(Callelogica.class, codCalle);
} finally
{
sesion.close();
}

69
return calle;
}

public List<Callelogica> obtenListaCalleLogica() throws HibernateException


{
List<Callelogica> listaCalles = null;

try
{
iniciaOperacion();
listaCalles = sesion.createQuery("from CalleLogica").list();
} finally
{
sesion.close();
}

return listaCalles;
}

private void iniciaOperacion() throws HibernateException


{
sesion = HibernateUtil.getSessionFactory().openSession();
sesion.beginTransaction();
//tx = sesion.beginTransaction();
}

private void manejaExcepcion(HibernateException he) throws


HibernateException
{
sesion.getTransaction().rollback();
//tx.rollback();
throw new HibernateException("Ocurri un error en la capa de acceso a
datos", he);
}
}

Dgrafos(Grafos Dirigidos): son las clases que ayudan a construir los


grafos, se muestran diferentes clases como, arcos, grafos dirigidos, lista
de arcos, recorrido mnimo y recorrido de un grafo dirigido.

70
Clase De Diagrafo

import static java.awt.RenderingHints.KEY_ANTIALIASING;


import static java.awt.RenderingHints.VALUE_ANTIALIAS_ON;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.io.Serializable;
import java.util.Vector;

import javax.swing.JOptionPane;

import Actors.Cruce;
import Actors.Semaforos;
import Utilitary.CirculoDibujable;
import Utilitary.DibujaFiguras;

/**
*
* @author ADMIN
*/
public class Digrafo implements Serializable, DibujaFiguras
{
/**
*
*/
private static final long serialVersionUID = 1L;
public Vector vertices;
public Vector cruces;
public Vector semaforos;
public ListaArcos[] ListAdyaciencia;
public boolean ponderado;

//public static Color colorVert=new Color(250,100,55);


public static Color colorArc=Color.RED;
/** Creates a new instance of Digrafo */
public Digrafo()
{
this(50);//numero de verices por defecto
}

public Digrafo(int numMaxVertice)

71
{
vertices=new Vector(numMaxVertice);
cruces=new Vector(numMaxVertice);
semaforos=new Vector();
ListAdyaciencia=new ListaArcos[300];// arcos como maximo
ponderado=false;
}

public boolean setVertice(CirculoDibujable vert)


{// cada vez que ingresa un vertice aumenta los dos vectores
ListAdyaciencia[vertices.size ()]=new ListaArcos();
return vertices.add (vert);
}

public boolean setCruce(Cruce cruce)


{
return cruces.add(cruce);
}

public int getNumVertice()


{
return vertices.size();

public Cruce getCruce(int index )


{
return (Cruce)cruces.get(index);
}

public CirculoDibujable getVertice(int index)


{
return (CirculoDibujable)vertices.get(index);
}

public boolean setCentroVertice(Point centro,int nVert)


{
CirculoDibujable vert=null;
if(nVert< 0 && nVert >= vertices.size ())
{
return false;
}
else

72
{
vert=(CirculoDibujable)vertices.get (nVert);
vert.setCentro (centro);
vertices.set (nVert,vert);
}
return true;
}

public CirculoDibujable[] getVertices()


{
return (CirculoDibujable[]) vertices.toArray ();
}

public Vector copiarVertices()


{
Vector retorno=new Vector(vertices.size ());
for(int i=0;i<vertices.size ();i++)
{//constructor copia
retorno.add (new CirculoDibujable((CirculoDibujable)vertices.get (i)));
}
return retorno;
}

public String VerticesACadena ()


{
String cad="{ ";
for(int i=0;i<vertices.size()-1;i++)
{
cad+="["+ vertices.get(i) + "], ";
if((i+1)%5==0)
cad+="\n ";
}
if(vertices.isEmpty()==false)
{
cad+="["+ vertices.get(vertices.size()-1)+"] ";
}
cad+="}";
return cad;
}

public int buscarPuntoEnVertices(Point punto)


{
int pos=-1,i=0;
CirculoDibujable vert=null;
while(i<vertices.size () && pos==-1)

73
{
vert=(CirculoDibujable)vertices.get (i);
if(vert.puntoEstaEnRegion (punto)==true)
{
pos=i;
}
i++;
}
return pos;
}

public int buscarPuntoEnCruces(Point punto)


{
int pos = -1, i=0;
CirculoDibujable cruce=null;
while(i<cruces.size() && pos==-1)
{
cruce=(CirculoDibujable)cruces.get(i);
if(cruce.puntoEstaEnRegion(punto)==true)
{
pos=i;
}
i++;
}
return pos;
}

public boolean eliminarCruce(int nCruce)


{
cruces.remove(nCruce);
return true;
}

public boolean eliminarVertice(int nVert)


{
if(nVert< 0 && nVert >= vertices.size ())
{
return false;
}

/* eliminar los vertices de todas las aristas */

74
for(int i=0;i<vertices.size();i++)
{
ListAdyaciencia[i].eliminarArcoConHijo (i,nVert);// eliminamos los vert de
la lista
}

for(int i=nVert;i<vertices.size()-1;i++)
{
ListAdyaciencia[i]=ListAdyaciencia[i+1];// eliminamos la lista de hijos
}
ListAdyaciencia[vertices.size()-1]=null;//

for(int i=0;i<vertices.size()-1;i++)
{
ListAdyaciencia[i].actualizarIndices(nVert);//reduce en una unidad cada
//indice mayor al eliminado
}
/* eliminar el vertice*/
vertices.remove (nVert); // eliminar el vertice
return true;
}

/**
* Operaciones con Arcos
* */

public void setArco(Arco ar)


{
int padre,hijo;
padre=ar.getPadre (); // devuelve el indice
hijo=ar.getHijo (); // devuelve el indice
if(padre>=0 && padre <vertices.size () && hijo>=0 && hijo <vertices.size ())
{
if(ListAdyaciencia[padre].buscarArco(padre,hijo)==null)
{//si el arco no esta en la lista insertar al final
ListAdyaciencia[padre].insertarFinal (ar);
}
}
}
public Arco getArco(int padre,int hijo)
{
int pos=ListAdyaciencia[padre].getIndexPadreHijo(padre,hijo);
if(pos==-1)

75
return null;
else
return new Arco(ListAdyaciencia[padre].getDato(pos));
}
public String arcosACadena()
{
String cad="{ ";
for(int i=0;i<vertices.size();i++)
{
if(ListAdyaciencia[i].esVacia()==false)
{
cad+=ListAdyaciencia[i].toString();
cad+=" \n";
}

}
cad+=" }";
return cad;
}

public int[] buscarPuntoEnArcos(Point punto)


{
int[] datos=null;
Arco ar=null;
for(int i=0;i<vertices.size();i++)
{
if(ListAdyaciencia[i]!=null)
{
for(int j=0;j<ListAdyaciencia[i].getNumElem();j++)
{
ar=(Arco)ListAdyaciencia[i].getDato(j);
if(puntoEstaArco(ar,punto)==true)
{
datos=new int[2];
datos[0]=i;datos[1]=j;
//JOptionPane.showMessageDialog(null, "Datos[0] vale
:"+datos[0]+"Datos[1] vale:"+datos[1]);
break;
}
}
}
}
return datos;
}

76
private boolean puntoEstaArco(Arco ar, Point punto)
{
double m=0.0;
boolean hecho=false;
Point v1=null,v2=null;
CirculoDibujable vert=null;
vert=(CirculoDibujable)(vertices.get (ar.getPadre ()));
v1=vert.getCentro ();
vert=(CirculoDibujable)(vertices.get (ar.getHijo()));
v2=vert.getCentro ();//obtengo los puntos

int pos=-1,i=0;
double b=0,y0=0,x0=0;
boolean ladox=false,ladoy=false;

if((v2.x-v1.x)==0)
m=punto.y-v2.y;
else m=(double)((v2.y-v1.y)/((v2.x-v1.x)*1.0));// calculo la pendiente
b=(double)(v2.y-m*v2.x);
if((punto.x>v1.x && punto.x<v2.x)||(punto.x>v2.x && punto.x<v1.x))
{
y0=m*punto.x+b;
if(Math.abs(y0-punto.y)<5)
ladox=true;
}
if((punto.y>v1.y && punto.y<v2.y)||(punto.y>v2.y && punto.y<v1.y))
{
x0=(punto.y-b)/(m*1.0);
if(Math.abs(x0-punto.x)<5)
ladoy=true;
}
if(ladox || ladoy) hecho=true;

return hecho;
}

public void setPesoCodigo(int peso, String codigo, int[] datos)


{// datos[0] padre y datos[1] hijo
if(datos==null || datos.length!=2 ) return;
ListAdyaciencia[datos[0]].setPesoCodigoArco(peso, codigo,datos[1]);

ponderado=true;
}

77
public int getPeso(int padre,int hijo)
{
return ListAdyaciencia[padre].getPesoArco(padre,hijo);
}

public void eliminarArco(int[] datos)


{ // datos[0] padre y datos[1] hijo, ambos en indices en listas
if(datos==null || datos.length!=2 ) return;
ListAdyaciencia[datos[0]].sacarDato(datos[1]);
}

public ListaArcos[] copiarArcos()


{
ListaArcos[] arcos=new ListaArcos[vertices.size()];
for(int i=0;i<vertices.size();i++)
{
arcos[i]=new ListaArcos();
if(ListAdyaciencia[i]!=null)
{
for(int j=0;j<ListAdyaciencia[i].getNumElem();j++)
{
arcos[i].insertarFinal(new Arco(ListAdyaciencia[i].getDato(j)));
}
}
}
return arcos;
}

public void dibujarFlecha(Arco ar,Graphics g)


{
double ang=0.0;
double tx,ty;
int radio=0,dist=8;

Point punto1=null,punto2=null;// recuepro los datos de ambos vertices

if(ar.getPadre()==-1 || ar.getHijo()==-1) return;// no existe arco;

punto1=((CirculoDibujable)vertices.get(ar.getPadre())).getCentro();
punto2=((CirculoDibujable)vertices.get(ar.getHijo())).getCentro();
radio=((CirculoDibujable)vertices.get(ar.getHijo())).getRadio();
ty=-(punto1.y-punto2.y)*1.0;//la coordenadas de la ventana es al revez
tx=(punto1.x-punto2.x)*1.0;
ang=Math.atan (ty/tx);
if(tx<0)

78
{// si tx es negativo aumentar 180 grados
ang+=Math.PI;
}

Point p1=new Point(),p2=new Point(),punto=new Point();


// puntos para las flechas
punto.x=(int)(punto2.x+radio*Math.cos (ang));
punto.y=(int)(punto2.y-radio*Math.sin (ang));

p1.x=(int)(punto.x+dist*Math.cos (ang-Math.toRadians (25)));


p1.y=(int)(punto.y-dist*Math.sin (ang-Math.toRadians (25.0)));
p2.x=(int)(punto.x+dist*Math.cos (ang+Math.toRadians (25.0)));
p2.y=(int)(punto.y-dist*Math.sin (ang+Math.toRadians (25.0)));

Graphics2D g2D=(Graphics2D)g;
// g2D.setStroke (new BasicStroke(1.2f));// grosor de la linea
g.setColor (colorArc);
g.drawLine (punto1.x,punto1.y,punto.x,punto.y);
g.drawLine (p1.x,p1.y,punto.x,punto.y);
g.drawLine (p2.x,p2.y,punto.x,punto.y);
// g2D.setStroke (new BasicStroke(1.0f));// grosor de la linea
if(ponderado==true)
{
g2D.setPaint (new Color(0,0,0,250));
g2D.drawString (String.valueOf (ar.getPeso
()),(punto1.x+punto2.x)/2.0f,(punto1.y+punto2.y)/2.0f);
}
}

public int getNumArcos()


{
int numArcos=0;
for(int i=0;i<vertices.size();i++)
{// recorro todos los padres
if(ListAdyaciencia[i]!=null)
{
numArcos+=ListAdyaciencia[i].getNumElem();
}
}
return numArcos;
}

public void dibujarArcos(Graphics g)


{
if(ListAdyaciencia==null) return;

79
for(int i=0;i<vertices.size();i++)
{// recorro todos los padres
if(ListAdyaciencia[i]!=null)
{
for(int j=0;j<ListAdyaciencia[i].getNumElem();j++)

{// recorro todos los hijos


//JOptionPane.showMessageDialog(null, "El numero de elementos
es: "+ListAdyaciencia[i].getNumElem());
dibujarFlecha(ListAdyaciencia[i].getDato(j),g);
}
}
}
}

public void dibujar(Graphics g)


{
CirculoDibujable vert=null;
CirculoDibujable cruce=null;
CirculoDibujable sema=null;
CirculoDibujable edificio=null;
String cad="";
Graphics2D g2=(Graphics2D)g; //alisar curvas
g2.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);

dibujarArcos(g);
for(int i=0;i<vertices.size ();i++)
{
vert=(CirculoDibujable)(vertices.get(i));
cad=String.valueOf (i);
vert.setNombre (cad);
//vert.setColor(colorVert);
vert.dibujar (g);
// vert.rotular (g,i);
}
for(int i=0;i<cruces.size();i++)
{
cruce=(CirculoDibujable)(cruces.get(i));
cruce.setColor(Color.BLUE);
cruce.dibujar(g);
}

for(int i=0;i<semaforos.size();i++)
{
sema=(CirculoDibujable)(semaforos.get(i));

80
sema.setColor(Color.BLUE);
sema.dibujar(g);
}

/**
* Operacionescon digrafo
**/
public String getProfundidad(Digrafo recProf)
{
Vector solEnIndices=new Vector();
recProf.vertices=this.copiarVertices ();
recProf.ListAdyaciencia=
RecorridoDigrafo.getRecorrido
(this,RecorridoDigrafo.REC_PROFUNDIDAD,solEnIndices);
recProf.ponderado=this.ponderado;
String cad="Recorrido:"+solEnIndices.toString();
return cad;
}

public String getAnchura(Digrafo recAnch)


{
Vector solEnIndices=new Vector();
recAnch.vertices=this.copiarVertices ();
recAnch.ListAdyaciencia=
RecorridoDigrafo.getRecorrido
(this,RecorridoDigrafo.REC_ANCHURA,solEnIndices);
recAnch.ponderado=this.ponderado;
String cad="Recorrido:"+solEnIndices.toString();
return cad;
}

public String getDijkstra(Digrafo dijkstra)


{
String cad="";
if(this.ponderado==false)
{
JOptionPane.showMessageDialog(null,"El Grafo no es
ponderado","Error",0);
return null;
}
cad=JOptionPane.showInputDialog(null,"Ingrese vertice Origen:");
int nOrigen=Integer.valueOf(cad);

81
if(nOrigen<0|| nOrigen>=vertices.size())
{
JOptionPane.showMessageDialog(null,"Vertice no pertenece","Error",0);
return null;
}
dijkstra.vertices=this.copiarVertices ();
dijkstra.ListAdyaciencia=RecMinimo.getDijkstra(this,nOrigen);
dijkstra.ponderado=this.ponderado;
cad="Desde el vertice "+nOrigen+" hasta todos los demas";
return cad;
}

public String getCaminoCorto(Digrafo minimo)


{
String cad="";
int nOrigen=0,nDestino=0;
if(this.ponderado==false)
{
JOptionPane.showMessageDialog(null,"El Grafo no es
ponderado","Error",0);
return null;
}
cad=JOptionPane.showInputDialog(null,"Ingrese vertice Origen:");
nOrigen=Integer.valueOf(cad);
if(nOrigen<0|| nOrigen>=vertices.size())
{
JOptionPane.showMessageDialog(null,"Vertice no pertenece","Error",0);
return null;
}

cad=JOptionPane.showInputDialog(null,"Ingrese vertice Destino:");


nDestino=Integer.valueOf(cad);

if(nDestino<0|| nDestino>=vertices.size())
{
JOptionPane.showMessageDialog(null,"Vertice no pertenece","Error",0);
return null;
}
minimo.vertices=this.copiarVertices ();

minimo.ListAdyaciencia=RecMinimo.getCaminoCorto(this,nOrigen,nDestino);
minimo.ponderado=this.ponderado;
if(minimo.ListAdyaciencia==null)
cad="No se encontro un camino";

82
else cad="ESTE es el camino mas corto desde "+nOrigen+" hasta
"+nDestino+this.desplegarAdyacencia(minimo);
return cad;
}

public String toString()


{
String cad="";
cad+="V="+this.VerticesACadena();
cad+="\nE="+this.arcosACadena();
return cad;
}

public void transladar(int tx, int ty)


{
}

public String getFlujoMaximo(Digrafo digrafoAux)


{
return null;

public String desplegarAdyacencia( Digrafo grafo)


{
String cad="";
grafo.vertices=this.copiarVertices();
for(int i=0;i<grafo.vertices.size();i++)
{
for (int j=0;j<grafo.ListAdyaciencia[i].getNumElem();j++)
{
Arco arc=grafo.ListAdyaciencia[i].getDato(j);
JOptionPane.showMessageDialog(null, ""+arc.getPadre()+"
"+arc.getPeso());
}

}
return cad;
}

public Vector verticesRutaMasCorta(Digrafo grafo, int nOrigen, int


nDestino){

if(this.ponderado==false)
{

83
JOptionPane.showMessageDialog(null,"El Grafo no es
ponderado","Error",0);
return null;
}
else
{
grafo.vertices=this.copiarVertices ();

grafo.ListAdyaciencia=RecMinimo.getCaminoCorto(this,nOrigen,nDestino);
grafo.ponderado=this.ponderado;
}
String cad="";
Vector<Integer> verticesRuta=new Vector<Integer>();
//grafo.vertices=this.copiarVertices();
for(int i=0;i<grafo.vertices.size();i++)
{
for (int j=0;j<grafo.ListAdyaciencia[i].getNumElem();j++)
{
Arco arc=grafo.ListAdyaciencia[i].getDato(j);
verticesRuta.add(arc.getPadre());
cad+=""+arc.getPadre()+"-";
}
if(verticesRuta.isEmpty()){
return null;
}else{
//verticesRuta.add((CirculoDibujable)vertices.get(nDestino));
//JOptionPane.showMessageDialog(null, "La ruta de vertices mas
corta es = "+cad);
}
}
return verticesRuta;
}

public int getNumCruces() {


// TODO Auto-generated method stub
return this.cruces.size();
}

public boolean setSemaforo(CirculoDibujable sem) {

if(sem==null){//JOptionPane.showMessageDialog(null,"es null en
el metodo");

84
}

return semaforos.add(sem);
// TODO Auto-generated method stub

public Semaforos getSemaforo(int index) {


// TODO Auto-generated method stub
return (Semaforos)semaforos.get(index);
}

public int buscarPuntoEnSemaforos(Point point) {


// TODO Auto-generated method stub
int pos = -1, i=0;
CirculoDibujable semaforo=null;
while(i<semaforos.size() && pos==-1)
{
semaforo=(CirculoDibujable)semaforos.get(i);
if(semaforo.puntoEstaEnRegion(point)==true)
{
pos=i;
}
i++;
}
return pos;
}

Dilogos: es el encargado de la captura de datos, en ste proceso se


implementaron ventanas de visualizacin para facilitar su ejecucin, ste
maneja las clases de actualizar calle y actualizar cruces.

public class DialogUpdateCalle extends JDialog {

private JPanel contentPanel = new JPanel();


public JTextField CruceOrigen;
public JTextField CruceDestino;
public JTextField CodigoCalle;
public JTextField Nombre;
public JTextField Capacidad;

85
public String cruceOrigen, cruceDestino,codigoCalle,
calleNombre,calleObser;
public int NodoInicio,NotoFin,CalleCapacidad, Longitud;

public JButton cancelButton,okButton;


public boolean puedesalir;
public JTextField Observaciones;
public JTextField NodoInicial;
public JTextField NodoFinal;
public JTextField LongitudCalle;

/**
* Launch the application.
*/
/*public static void main(String[] args) {
try {
DialogUpdateCalle dialog = new DialogUpdateCalle();

dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}*/

/**
* Create the dialog.
*/
public DialogUpdateCalle(JFrame parent, String title, boolean modal) {
super(parent, title, modal);
setBounds(100, 100, 450, 350);
getContentPane().setLayout(new BorderLayout());
contentPanel.setBorder(new TitledBorder(new TitledBorder(new
LineBorder(new Color(184, 207, 229)), "Informacin de Cruce",
TitledBorder.LEFT, TitledBorder.TOP, null, new Color(0, 0, 255)), "Informacion
de Cruce", TitledBorder.LEFT, TitledBorder.TOP, null, Color.BLACK));
getContentPane().add(contentPanel, BorderLayout.CENTER);
contentPanel.setLayout(new GridLayout(1, 2, 0, 0));
{
JPanel panel = new JPanel();

panel.setBorder(UIManager.getBorder("DesktopIcon.border"));
contentPanel.add(panel);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0};

86
gbl_panel.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0};
gbl_panel.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0,
1.0, 1.0, Double.MIN_VALUE};
gbl_panel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
panel.setLayout(gbl_panel);
{
JLabel LongCalle = new JLabel("Longitud :");
GridBagConstraints gbc_LongCalle = new
GridBagConstraints();
gbc_LongCalle.anchor = GridBagConstraints.EAST;
gbc_LongCalle.insets = new Insets(0, 0, 5, 5);
gbc_LongCalle.gridx = 3;
gbc_LongCalle.gridy = 2;
panel.add(LongCalle, gbc_LongCalle);
}
{
LongitudCalle = new JTextField();
GridBagConstraints gbc_LongitudCalle = new
GridBagConstraints();
gbc_LongitudCalle.insets = new Insets(0, 0, 5, 5);
gbc_LongitudCalle.fill =
GridBagConstraints.HORIZONTAL;
gbc_LongitudCalle.gridx = 4;
gbc_LongitudCalle.gridy = 2;
panel.add(LongitudCalle, gbc_LongitudCalle);
LongitudCalle.setColumns(10);
}
{
JLabel lblCodigoDeMapa = new JLabel("Cruce
Origen :");

lblCodigoDeMapa.setHorizontalAlignment(SwingConstants.RIGHT);
GridBagConstraints gbc_lblCodigoDeMapa = new
GridBagConstraints();
gbc_lblCodigoDeMapa.insets = new Insets(0, 0, 5,
5);
gbc_lblCodigoDeMapa.gridx = 3;
gbc_lblCodigoDeMapa.gridy = 3;
panel.add(lblCodigoDeMapa,
gbc_lblCodigoDeMapa);
}
{
CruceOrigen = new JTextField();

87
GridBagConstraints gbc_CruceOrigen = new
GridBagConstraints();
gbc_CruceOrigen.insets = new Insets(0, 0, 5, 5);
gbc_CruceOrigen.fill =
GridBagConstraints.HORIZONTAL;
gbc_CruceOrigen.gridx = 4;
gbc_CruceOrigen.gridy = 3;
panel.add(CruceOrigen, gbc_CruceOrigen);
CruceOrigen.setColumns(10);
}
{
JLabel lblCodigoCruce = new JLabel("Cruce Destino
:");
GridBagConstraints gbc_lblCodigoCruce = new
GridBagConstraints();
gbc_lblCodigoCruce.anchor =
GridBagConstraints.EAST;
gbc_lblCodigoCruce.insets = new Insets(0, 0, 5, 5);
gbc_lblCodigoCruce.gridx = 3;
gbc_lblCodigoCruce.gridy = 4;
panel.add(lblCodigoCruce, gbc_lblCodigoCruce);
}
{
CruceDestino = new JTextField();
GridBagConstraints gbc_CruceDestino = new
GridBagConstraints();
gbc_CruceDestino.insets = new Insets(0, 0, 5, 5);
gbc_CruceDestino.fill =
GridBagConstraints.HORIZONTAL;
gbc_CruceDestino.gridx = 4;
gbc_CruceDestino.gridy = 4;
panel.add(CruceDestino, gbc_CruceDestino);
CruceDestino.setColumns(10);
}
{
JLabel lblNombre = new JLabel("Codigo Calle :");
GridBagConstraints gbc_lblNombre = new
GridBagConstraints();
gbc_lblNombre.anchor = GridBagConstraints.EAST;
gbc_lblNombre.insets = new Insets(0, 0, 5, 5);
gbc_lblNombre.gridx = 3;
gbc_lblNombre.gridy = 5;
panel.add(lblNombre, gbc_lblNombre);
}
{

88
CodigoCalle = new JTextField();
GridBagConstraints gbc_CodigoCalle = new
GridBagConstraints();
gbc_CodigoCalle.insets = new Insets(0, 0, 5, 5);
gbc_CodigoCalle.fill =
GridBagConstraints.HORIZONTAL;
gbc_CodigoCalle.gridx = 4;
gbc_CodigoCalle.gridy = 5;
panel.add(CodigoCalle, gbc_CodigoCalle);
CodigoCalle.setColumns(10);
}
{
JLabel lblCapacidadMaxima = new JLabel("Nombre
:");
GridBagConstraints gbc_lblCapacidadMaxima = new
GridBagConstraints();
gbc_lblCapacidadMaxima.anchor =
GridBagConstraints.EAST;
gbc_lblCapacidadMaxima.insets = new Insets(0, 0,
5, 5);
gbc_lblCapacidadMaxima.gridx = 3;
gbc_lblCapacidadMaxima.gridy = 6;
panel.add(lblCapacidadMaxima,
gbc_lblCapacidadMaxima);
}
{
Nombre = new JTextField();
GridBagConstraints gbc_Nombre = new
GridBagConstraints();
gbc_Nombre.anchor = GridBagConstraints.NORTH;
gbc_Nombre.insets = new Insets(0, 0, 5, 5);
gbc_Nombre.fill =
GridBagConstraints.HORIZONTAL;
gbc_Nombre.gridx = 4;
gbc_Nombre.gridy = 6;
panel.add(Nombre, gbc_Nombre);
Nombre.setColumns(10);
}
{
JLabel lblNoDeCarriles = new JLabel("Capacidad :");
GridBagConstraints gbc_lblNoDeCarriles = new
GridBagConstraints();
gbc_lblNoDeCarriles.anchor =
GridBagConstraints.EAST;
gbc_lblNoDeCarriles.insets = new Insets(0, 0, 5, 5);

89
gbc_lblNoDeCarriles.gridx = 3;
gbc_lblNoDeCarriles.gridy = 7;
panel.add(lblNoDeCarriles, gbc_lblNoDeCarriles);
}
{
Capacidad = new JTextField();
GridBagConstraints gbc_Capacidad = new
GridBagConstraints();
gbc_Capacidad.insets = new Insets(0, 0, 5, 5);
gbc_Capacidad.fill =
GridBagConstraints.HORIZONTAL;
gbc_Capacidad.gridx = 4;
gbc_Capacidad.gridy = 7;
panel.add(Capacidad, gbc_Capacidad);
Capacidad.setColumns(10);
}
{
JLabel lblObservaciones = new
JLabel("Observaciones :");
GridBagConstraints gbc_lblObservaciones = new
GridBagConstraints();
gbc_lblObservaciones.anchor =
GridBagConstraints.EAST;
gbc_lblObservaciones.insets = new Insets(0, 0, 5, 5);
gbc_lblObservaciones.gridx = 3;
gbc_lblObservaciones.gridy = 8;
panel.add(lblObservaciones, gbc_lblObservaciones);
}
{
Observaciones = new JTextField();
GridBagConstraints gbc_Observaciones = new
GridBagConstraints();
gbc_Observaciones.insets = new Insets(0, 0, 5, 5);
gbc_Observaciones.fill =
GridBagConstraints.HORIZONTAL;
gbc_Observaciones.gridx = 4;
gbc_Observaciones.gridy = 8;
panel.add(Observaciones, gbc_Observaciones);
Observaciones.setColumns(10);
}
{
JLabel lblNodoInicial = new JLabel("Nodo Inicial :");
GridBagConstraints gbc_lblNodoInicial = new
GridBagConstraints();

90
gbc_lblNodoInicial.anchor =
GridBagConstraints.EAST;
gbc_lblNodoInicial.insets = new Insets(0, 0, 5, 5);
gbc_lblNodoInicial.gridx = 3;
gbc_lblNodoInicial.gridy = 9;
panel.add(lblNodoInicial, gbc_lblNodoInicial);
}
{
NodoInicial = new JTextField();
GridBagConstraints gbc_NodoInicial = new
GridBagConstraints();
gbc_NodoInicial.insets = new Insets(0, 0, 5, 5);
gbc_NodoInicial.fill =
GridBagConstraints.HORIZONTAL;
gbc_NodoInicial.gridx = 4;
gbc_NodoInicial.gridy = 9;
panel.add(NodoInicial, gbc_NodoInicial);
NodoInicial.setColumns(10);
}
{
JLabel lblNodoFinal = new JLabel("Nodo Final :");
GridBagConstraints gbc_lblNodoFinal = new
GridBagConstraints();
gbc_lblNodoFinal.anchor =
GridBagConstraints.EAST;
gbc_lblNodoFinal.insets = new Insets(0, 0, 5, 5);
gbc_lblNodoFinal.gridx = 3;
gbc_lblNodoFinal.gridy = 10;
panel.add(lblNodoFinal, gbc_lblNodoFinal);
}
{
NodoFinal = new JTextField();
GridBagConstraints gbc_NodoFinal = new
GridBagConstraints();
gbc_NodoFinal.insets = new Insets(0, 0, 5, 5);
gbc_NodoFinal.fill =
GridBagConstraints.HORIZONTAL;
gbc_NodoFinal.gridx = 4;
gbc_NodoFinal.gridy = 10;
panel.add(NodoFinal, gbc_NodoFinal);
NodoFinal.setColumns(10);
}
}
{
JPanel buttonPane = new JPanel();

91
buttonPane.setLayout(new
FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
{
okButton = new JButton("OK");
//okButton.setAction(action);
//okButton.setActionCommand("OK");
//okButton.addActionListener(this);
buttonPane.add(okButton);
//getRootPane().setDefaultButton(okButton);
}
{
cancelButton = new JButton("Cancel");
//cancelButton.setActionCommand("Cancel");
//cancelButton.addActionListener(this);
buttonPane.add(cancelButton);

}
}
}

public void limpiarCampos() {


this.Nombre.setText(null);
this.Capacidad.setText(null);
this.CruceDestino.setText(null);
this.CruceOrigen.setText(null);
this.CodigoCalle.setText(null);

}
}

Guis: Estos manejan las clases aplicativo, escritorio, panel de dibujo,


programa, simulacin, ventana inicio, ventana principal.

public class Programa


{
private JLabel splashLabel;
private JProgressBar progreso;
private JWindow splashScreen;

private Timer tiempo;


private int pos=0;

92
private VentPrincipal ventana;

/** Creates a new instance of TeoriaGrafos */


public Programa()
{
crearSplashScreen();
splashScreen.setVisible(true);// arrancar con el splash

hiloProgreso hilo=new hiloProgreso();


hilo.start();

ventana=new VentPrincipal();// correr el programa


ventana.setVisible(true);// mostrar cuando el progreso acabe

splashScreen.setVisible(false);

splashScreen=null;
hilo=null;
}

public void crearSplashScreen()


{
Dimension screenRect =Toolkit.getDefaultToolkit().getScreenSize();
splashLabel=new JLabel(new ImageIcon("images/splash2.JPG"));
progreso=new JProgressBar();
progreso.setBorderPainted(true);
progreso.setForeground(new Color(50,50,153,100));
progreso.setStringPainted(true);// estado numero
splashScreen = new JWindow();

splashScreen.setLocation(screenRect.width/4+30, screenRect.height/4);
splashScreen.setLayout(new BorderLayout());
splashScreen.add(splashLabel,BorderLayout.CENTER);
splashScreen.add(progreso,BorderLayout.SOUTH);

splashScreen.pack();
}

public void pausa(int mlSeg)


{
try{// pausa para el splash
Thread.sleep(mlSeg);
}catch(Exception error){}
}

93
public void progreso()
{
progreso.setValue(++pos);
if(pos==101)
{
tiempo.stop();
}
}

class hiloProgreso extends Thread


{
public hiloProgreso()
{
super();
}
public void run()
{
for(int i=1;i<=100;i++)
{
progreso.setValue(i);
pausa(15);
}
}

public static void main(String[] args)


{
//JFrame.setDefaultLookAndFeelDecorated(false);
final Logger logger = Logger.getLogger(Programa.class);
BasicConfigurator.configure();
logger.info("Entering application.");
Programa aplicativo=new Programa();
logger.info("Exiting application.");
}
}

Pojos: son las clases de persistencia que contienen los getter y los
setter, capaces de capturar la asignacin de los atributos principales.
Permitiendo una comunicacin con la base de datos. Las clases
manejadas son; Callelogica, callesemaforo,configuracin vial entre otras.

94
Clase mapa

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
* Mapa generated by hbm2java
*/
@Entity
@Table(name = "mapa", catalog = "tesis10")
public class Mapa implements java.io.Serializable {

private String mapaCodigo;


private String mapaName;
private String mapaDescripcion;
private Integer mapaLargo;
private Integer mapaAncho;
private Set crucelogicas = new HashSet(0);

public Mapa() {
}

public Mapa(String mapaCodigo) {


this.mapaCodigo = mapaCodigo;
}

public Mapa(String mapaCodigo, String mapaName, String


mapaDescripcion,
Integer mapaLargo, Integer mapaAncho, Set crucelogicas) {
this.mapaCodigo = mapaCodigo;
this.mapaName = mapaName;
this.mapaDescripcion = mapaDescripcion;
this.mapaLargo = mapaLargo;
this.mapaAncho = mapaAncho;
this.crucelogicas = crucelogicas;
}

@Id

95
@Column(name = "mapa_Codigo", unique = true, nullable = false,
length = 20)
public String getMapaCodigo() {
return this.mapaCodigo;
}

public void setMapaCodigo(String mapaCodigo) {


this.mapaCodigo = mapaCodigo;
}

@Column(name = "mapa_Name", length = 20)


public String getMapaName() {
return this.mapaName;
}

public void setMapaName(String mapaName) {


this.mapaName = mapaName;
}

@Column(name = "mapa_Descripcion", length = 200)


public String getMapaDescripcion() {
return this.mapaDescripcion;
}

public void setMapaDescripcion(String mapaDescripcion) {


this.mapaDescripcion = mapaDescripcion;
}

@Column(name = "mapa_Largo")
public Integer getMapaLargo() {
return this.mapaLargo;
}

public void setMapaLargo(Integer mapaLargo) {


this.mapaLargo = mapaLargo;
}

@Column(name = "mapa_Ancho")
public Integer getMapaAncho() {
return this.mapaAncho;
}

public void setMapaAncho(Integer mapaAncho) {


this.mapaAncho = mapaAncho;
}

96
@OneToMany(fetch = FetchType.LAZY, mappedBy = "mapa")
public Set getCrucelogicas() {
return this.crucelogicas;
}

public void setCrucelogicas(Set crucelogicas) {


this.crucelogicas = crucelogicas;
}

Utilidades: manejan las clases de circulo dibujante, cola, dibuja figuras,


listas, entre otras.

Clase Cola

public class Cola extends Lista implements Serializable


{

/** Creates a new instance of Cola */


public Cola ()
{
super();
}

public void acolar(Object dato)


{
super.insertarFinal (dato);
}

public Object desacolar()


{
return super.sacarPrimero ();
}

Mapping: contiene los archives de configuracin, manejando hibernate,


hibernate revenge.

97
Hibernate reveng
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate
Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-
reverse-engineering-3.0.dtd" >

<hibernate-reverse-engineering>
<table-filter match-catalog="tesis10" match-name="callelogica"/>
<table-filter match-catalog="tesis10" match-name="callesemaforo"/>
<table-filter match-catalog="tesis10" match-name="configuaracionvial"/>
<table-filter match-catalog="tesis10" match-name="configuracionedificio"/>
<table-filter match-catalog="tesis10" match-name="configuracionsemaforial"/>
<table-filter match-catalog="tesis10" match-name="crucelogica"/>
<table-filter match-catalog="tesis10" match-name="edificio"/>
<table-filter match-catalog="tesis10" match-name="mapa"/>
<table-filter match-catalog="tesis10" match-name="parametrocedificio"/>
<table-filter match-catalog="tesis10" match-name="parametrocsemaforial"/>
<table-filter match-catalog="tesis10" match-name="parametrocvial"/>
<table-filter match-catalog="tesis10" match-name="semaforo"/>
<table-filter match-catalog="tesis10" match-name="simulacion"/>
<table-filter match-catalog="tesis10" match-name="tipvehiculo"/>
<table-filter match-catalog="tesis10" match-name="vehiculocalle"/>
<table name="CruceLogica" catalog="TESIS10">
<column name="cruce_Codigo"/>
<column name="mapa_Codigo"/>
<column name="cruce_Name"/>
<column name="cruce_Capacidad"/>
<column name="cruce_NumCarriles"/>
<column name="cruce_Estado"/>
</table>
</hibernate-reverse-engineering>

Las siguientes clases, fueron tomadas como apoyo al desarrollo


aplicado. Tomadas del proyecto de simulacion1, desarrollado por el
docente y director de tesis Christian Arias, Ingeniero De Sistemas del
LIDIS.

import java.awt.Point;

98
public class PositionHelper {

/**
* Calcula la distancia que se debe recorrer en el eje Y para estar a la
izquierda del punto sx,sy en
* Relacin a la lnea que forma con dx,dy a una distancia distance
* @param sx
* @param sy
* @param dx
* @param dy
* @param distance
* @return
*/
public static int getSourceDistanceLeftYPoint (int sx, int sy, int dx, int dy,
double distance) {
int x=dx-sx;
System.out.println ("x:"+x);
int y=dy-sy;
System.out.println("y:"+y);
double h=Math.sqrt(x*x+y*y);
System.out.println ("h:"+h);
int y2=(int) Math.round(distance*(x/h));
y2*=-1;
return y2;
}

La frmula de distancia entre dos puntos:

Utilizamos una serie de datos para probar

x1 5
y1 7
x2 2
y2 3
distancias 3,162
d = (x1 x2) + (y1 y2)
d = (5 2) + (7 3)
d=5

x= distancias*(5-2/d)
x= (3,162*(3/5))

99
x= 2

t=y*(-1)
t=2*(-1)
t= -2

public static int getSourceLeftYPoint(int sx,int sy,int dx,int dy,double distance){


int y2=getSourceDistanceLeftYPoint(sx, sy, dx, dy, distance);
return sy+y2;
}

z=y2+t
z=3+ (-2)
z=1

Tenemos en este grfico los datos de la tabla

Este es el tringulo que debe formar

100
public static int getSourceDistanceLeftXPoint(int sx,int sy,int dx,int dy,double
distance){
int x=dx-sx;
System.out.println("x:"+x);
int y=dy-sy;
System.out.println("y:"+y);
double h=Math.sqrt(x*x+y*y);
System.out.println("h:"+h);
int x2=(int) Math.round(distance*(y/h));
System.out.println("x2:"+x2);
return x2;
}

Le colocamos uno datos para probar

x1 5
y1 7
x2 2
y2 3
distancias 3,162

d = (x1 x2) + (y1 y2)


d = (5 2) + (7 3)
d=5

y= distancias*(7-3/d)
y= (3,162*(4/5))
y= 3

public static int getSourceLeftXPoint(int sx,int sy,int dx,int dy,double distance){


int x2=getSourceDistanceLeftXPoint(sx, sy, dx, dy, distance);
return sx+x2;
}
z=2+ 3
z=5

Tenemos este grfico los datos de la tabla

101
Este es el tringulo que debe formar

public static Point getSourceDistanceLeftPoint(Point source,Point target, double


distance){
double x=target.getX()-source.getX();
double y=target.getY()-source.getY();
double h=Math.sqrt(x*x+y*y);
int x2=(int) Math.round(distance*(y/h));
int y2=-1*((int) Math.round(distance*(x/h)));
return new Point(x2,y2);
}

public static int getSourceDistanceRightYPoint(int sx,int sy,int dx,int dy,double


distance){
return -1*getSourceDistanceLeftYPoint(sx, sy, dx, dy, distance);
}

z= getSourceLeftXPoint t *(-1)

102
z=t*(-1)
z=-2*(-1)
z=2

public static int getSourceDistanceRightXPoint(int sx,int sy,int dx,int dy,double


distance){
return -1*getSourceDistanceLeftXPoint(sx, sy, dx, dy, distance);
}

z= getSourceLeftXPoint y *(-1)
z=y*(-1)
z=-3

public static Point getSourceDistanceRightPoint(Point source,Point target,


double distance){
Point point=getSourceDistanceLeftPoint(source, target, distance);
point.setLocation(point.getX()*-1, point.getY()*-1);
return point;
}

public static Point getSourceLeftPoint(Point source,Point target, double


distance){
Point point=new Point();
Point vector=getSourceDistanceLeftPoint(source, target,
distance);
point.setLocation(source.getX()+vector.getX(),
source.getY()+vector.getY());
return point;
}

public static int getSourceRightYPoint(int sx,int sy,int dx,int dy,double distance){


int y2=getSourceDistanceRightYPoint(sx, sy, dx, dy, distance);
// y2*=-1;
return sy+y2;
}
C= getSourceDistanceRightYPoint z +y2
C= 2+3
C= 5

public static int getSourceRightXPoint(int sx,int sy,int dx,int dy,double distance){

103
int x2=getSourceDistanceRightXPoint(sx, sy, dx, dy, distance);
return sx+x2;
}

S= getSourceDistanceRightXPoint z +x2
S= -3 +2
S= -1

public static Point getSourceRightPoint(Point source,Point target, double


distance){
Point point=new Point();
Point vector=getSourceDistanceRightPoint(source, target,
distance);
point.setLocation(source.getX()+vector.getX(),
source.getY()+vector.getY());
return point;
}

public static double getSquareHypo(int sx,int sy,int dx,int dy){


int x=dx-sx;
System.out.println("x:"+x);
int y=dy-sy;
System.out.println("y:"+y);
double h=Math.sqrt(x*x+y*y);
return h;
}

x1 5
y1 7
x2 2
y2 3
distancias 3,162

d = (x1 x2) + (y1 y2)


d = (5 2) + (7 3)
d=5

Tenemos este grfico los datos de la tabla

104
Este es el tringulo que debe formar

public static double getPendiente(int sx,int sy,int dx,int dy){


int x=dx-sx;
System.out.println("x:"+x);
int y=dy-sy;
System.out.println("y:"+y);
double p=(double)y/(double)x;
return p;
}

p = (x1 x2) / (y1 y2)


p = (5 2) / (7 3)
p = 0,75

public static double getPendiente(Point source,Point target){


double x=target.getX()-source.getX();
double y=target.getY()-source.getY();
double p=y/x;

105
return p;
}

public static double getConstant(int px,int py,double pendiente){


double constant=py-pendiente*px;
return constant;
}

C= py-pendiente*px
C= 6-4*3
C= -6

public static double getConstant(Point xy,double pendiente){


double constant=xy.getY()-pendiente*xy.getX();
return constant;
}

/**
* Calcula la coordenada x del punto donde es cortada la lnea formada
* Por los puntos s (sx, sy) y d (dx, dy) por la lnea perpendicular
* Que pasa por el punto p (px, py)
* @param sx
* @param sy
* @param dx
* @param dy
* @param px
* @param py
* @return
*/
public static double getX(int sx,int sy,int dx,int dy, int px,int py){
double p=getPendiente(sx, sy, dx, dy);
double pp=-1/p;
double b=getConstant(sx, sy, p);
double bp=getConstant(px, py, pp);
double nx=(bp-b)/(p-pp);
return nx;
}

/**
* Calcula la coordenada x del punto donde es cortada la lnea formada
* Por los puntos s (sx, sy) y d (dx, dy) por la lnea perpendicular
* Que pasa por el punto p (px, py)
* @param sx
* @param sy
* @param dx
* @param dy

106
* @param px
* @param py
* @return
*/
public static double getY(int sx,int sy,int dx,int dy, int px,int py){
double p=getPendiente(sx, sy, dx, dy);
double pp=-1/p;
double b=getConstant(sx, sy, p);
double bp=getConstant(px, py, pp);
double nx=(bp-b)/(p-pp);
double ny=nx*p+b;
return ny;
}

public static Point getClosestPoint(Point source,Point target, Point reference){


double p=getPendiente(source, target);
double pp=-1/p;
if(pp==0){
return new Point((int)source.getX(),(int)reference.getY());
}
if(pp==Double.NEGATIVE_INFINITY){
return new Point((int)reference.getX(),(int)source.getY());

}
if(pp==Double.POSITIVE_INFINITY){
return new Point((int)reference.getX(),(int)source.getY());

}
double b=getConstant((int)source.getX(), (int)source.getY(), p);
double bp=getConstant((int)reference.getX(),(int)reference.getY(),
pp);
double nx=(bp-b)/(p-pp);
double ny=nx*p+b;
Point point=new Point();
point.setLocation(nx, ny);
return point;
}

public static double getY(int sx,int sy,int dx,int dy, int distance){
double p=getPendiente(sx, sy, dx, dy);
double ang=Math.atan(p);
double dely=Math.abs(distance*Math.sin(ang));
double ny;
if(sy>dy){
ny=sy-dely;

107
}else{
ny=sy+dely;
}
return ny;
}
public static double getX(int sx,int sy,int dx,int dy, int distance){
double p=getPendiente(sx, sy, dx, dy);
double b=getConstant(sx, sy, p);
double ang=Math.atan(p);
double dely=Math.abs(distance*Math.sin(ang));
double ny;
if(sy>dy){
ny=sy-dely;
}else{
ny=sy+dely;
}
double nx=(ny-b)/p;
return nx;
}

/**
* Retorna el punto sobre la recta partiendo de source dirigindose a target
* y avanzando distance
* @param sx
* @param sy
* @param dx
* @param dy
* @param distance
* @return
*/
public static Point getNextPoint(Point source,Point target, int distance){
double p=getPendiente(source, target);
if (p==Double.POSITIVE_INFINITY){
return new Point(source.x,source.y+distance);
}
if (p==Double.NEGATIVE_INFINITY){
return new Point(source.x,source.y-distance);
}
if (source.y==target.y){
if (source.x<target.x){
return new Point(source.x+distance,source.y);
}else{
return new Point(source.x-distance,source.y);
}
}

108
double ang=Math.atan(p);
double b=getConstant(source, p);
double dely=Math.abs(distance*Math.sin(ang));
double ny;
if(source.getY()>target.getY()){
ny=source.getY()-dely;
}else{
ny=source.getY()+dely;
}
double nx=(ny-b)/p;
Point ret=new Point();
ret.setLocation(nx, ny);
return ret;
}
public static void main(String[] args) {
/*System.out.println(getSourceLeftYPoint(5, 5, 11, 7, 3.162));
System.out.println(getSourceLeftYPoint(5, 5, 11, 3, 3.162));
System.out.println(getSourceLeftXPoint(20, 20, 24, 17, 10));
System.out.println(getSourceLeftYPoint(20, 20, 24, 17, 10));
System.out.println(getSourceLeftXPoint(20, 20, 16, 17, 10));
System.out.println(getSourceLeftYPoint(20, 20, 16, 17, 10));
System.out.println(getSourceLeftXPoint(20, 20, 24, 23, 10));
System.out.println(getSourceLeftYPoint(20, 20, 24, 23, 10));
System.out.println(getSourceLeftXPoint(20, 20, 16, 23, 10));
System.out.println(getSourceLeftYPoint(20, 20, 16, 23, 10));
*/
double x=getX(12, 9, 4, 17, 5,10);
double y=getY(12, 9, 4, 17, 5,10);
System.out.println(x);
System.out.println(y);

double xx=getX(40, 20, 32, 26, 5);


double yy=getY(40, 20, 32, 26, 5);
System.out.println(xx);
System.out.println(yy);

109
24 RESULTADOS DE LA SIMULACIN

De acuerdo al diseo implementado en la aplicacin se puede observar una


barra de herramientas con diferentes caractersticas, que ayuda el fcil
manejo entre en usuario y el sistema. La barra de herramientas, permite
crear parmetros como: calles, semforos, grafos dirigidos, generacin de
rutas. Ver(ilustracin 7).

Ilustracin 7 "Barra de Herramientas"

Ya implementados los componentes de la barra de herramientas se puede


observar un escenario completo,

110
Ilustracin 8 "Escenario Completo Aplicativo"

Mediante el proceso de capturar informacin, se recolecta informacin


referente a los objetos estudiados, como por ejemplo: informacin de Calle,
Semforos, Cruces, entre otros. Ver (Ilustracin 9).

Ilustracin 9 "Ejemplo de Captura de Datos"

111
A continuacin se muestra en ejecucin la simulacin final con todos los
parmetros asignados

Ilustracin 10 "Escenario Final Simulado"

112
25 TRABAJO DE CAMPO

Este trabajo simula algunas caractersticas del trfico vehicular partiendo


desde una base de datos de entrada, en el que se realiza una serie de
observaciones de diferentes calles de la ciudad que presentan
complejidad por la cantidad de vehculos que circulan diariamente.
Estudiamos diferentes escenarios con una serie de problemas comunes
como, la autopista sur oriental con carrera 66, calle36 con carrera 46
cruce popularmente llamado puerto rellena y calle 5 con Guadalupe. Se
pudo observar que en muchos de estos cruces se presentan diferentes
sentidos de vas, sealizacin y cambio de los semforos.

CRUCE AUTOPISTA SIMN BOLVAR ENTRE CALLES 36 CON CRA 46

Foto tomada de Google Maps.

Ilustracin 11 "Cruce Calle 36 con Cra 46"

En los cruces de la autopista Simn Bolvar ubicada entre la Calle 36


con Cra 46 se presenta una relacin de nodos, donde se despliegan
determinados cruces. En cada uno de los ellos se observan riesgos de
accidentalidad, por el ancho de la va y por el largo de la calle, cuando

113
un semforo cambia su estado a verde hay ocasiones en que los
semforos restantes aun no cambian a rojo, no se tiene un control
exacto por el ancho de la calle. Provocando dificultades de movilidad.

A continuacin se observa una grfica donde entra a jugar un papel muy


importante la semaforizacin en esta importante va de la ciudad, donde
se muestra cada una de las opciones de cambio de los semforos. Ver
(Ilustracin 8).

Ilustracin 12 "Estados de Semaforizacin Calle 36 con 46

114
CRUCE CALLE 5 CON CARRERA 56

Ilustracin 13 "Calle 5 con Guadalupe"

SEMFOROS ESTUDIADOS CALLE 5 CON GUADALUPE

Semforo 1 (verde) S4 verde, S3 rojo, S2 verde,

Semaforo1a (verde opcin 2) S1a verde, todos los dems en rojo

Semforo 2 (verde) S1 verde, S1a rojo, S3 rojo, S4 verde

Semforo 2 (verde) S1 verde, S3 rojo, S4 rojo

Semforo 3 (verde) todos los dems en rojo

Semforo 4 S1 verde, S2 verde, S3 rojo

115
Observaciones

Configuracin semaforial: de acuerdo al trabajo de campo realizado en la


calle 5 con Guadalupe algunos de los semforos repiten estado de
acuerdo a unos tiempos. Lo cual no se ve estipulado en el modelo
(tiempos en estados repetidos)

Al realizar el anlisis en la base de datos nos damos cuenta que en el


ejemplo tomado (calle 5 con Guadalupe) se presenta una pequea
incongruencia con el modelo, teniendo en cuenta que no asociamos el
objeto cruce con el objeto semforo, por tal motivo en este punto de la
ciudad se presenta un cruce complicado entre los carriles del sistema
masivo y los vehculos particulares, ocasionado por los tiempos de
estado en la semaforizacin all ubicada.

En el modelo ya estructurado, nos encontramos con otro inconveniente,


al introducir datos en el modelo, nos dimos cuenta que muchos de los
objetos relacionados tienen la misma llave fornea, por tal motivo no
dejaba continuar con el proceso, lo cual tocaba saltar el paso, ya que
exista o estaba siendo usado ese atributo.

En el anlisis realizado con el ejemplo tomado (calle 5 con Guadalupe)


segn nuestro concepto se relacionaron los siguientes objetos: Mapa,
Semforo, Cruce, Calle, CalleSemforo.

Se tiene como objetivo del trabajo de campo, recolectar informacin bsica


y algunas caractersticas que influyen en el trfico vehicular, teniendo en
cuenta una serie de factores y puntos importantes como las que veremos a
continuacin:

116
Tamao de la calle.

Nmero de autos que entran.

Nmero de autos que salen.

Tamao promedio de la cola.

Espaciamiento promedio entre vehculos.

Tiempo y cambio de semforo en verde y rojo.

Tiempo de reaccin de los automviles.

AUTOPISTA SUR ORIENTAL CON CALLE 66

Calzada principal de la autopista sur oriental, este sector es conocido por ser
una zona muy comercial y al mismo tiempo transitado de manera intensiva,
esto ocasiona gran congestin vehicular provocada en muchas ocasiones por
el corto tiempo de cambios de estado en la semaforizacin.

Este sitio crtico de la ciudad presenta un problema comn que se vive a diario
en algunas calles, y es el ancho del cruce principal, ocasionando accidentes
por el paso de vehculos lentos al pasar el semforo.

Ilustracin 14 "Calle 10 con Carrera 66"

117
AUTOPISTA SUR ORIENTAL CON CALLE66 ESTADOS DE SEMAFOROS

Ilustracin 15 "Estados De Semaforizacin Calle 10 con 66"

TIEMPOS

De Rojo a Verde

A) 1 59 seg

B) 1 35 seg

C) 2 44 seg

D) 1 19 seg

De Verde a Rojo

A) 24 seg

B) 42 seg

C) 27 seg

D) 1 28 seg

118
Segn el estudio realizado a los estados de semaforizacin, en ste sector de
la ciudad se puede observar que los tiempos no son continuos, teniendo en
cuenta que son manipulados en diferentes horas crticas por parte del
organismo de transito. Aunque este proceso es intervenido por el factor
humano, se puede apreciar que los tiempos en estado verde, son demasiado
cortos para el flujo de entrada vehicular que all se presenta, ocasionando con
esto embotellamiento y largas colas, provocando trfico en la va.

Ilustracin 16 "Carrera 66 con Calle 9"

119
Ilustracin 17 "Estados De Semaforizacin Carrera 66 con Calle 9"

TIEMPOS

De Rojo a Verde

A) 46 seg
B) 1 18 seg

De Verde a Rojo

A) 1 11 seg
B) 35 seg

Ilustracin 18 "Foto Carrera 66 con Calle 10"

120
26 RECOLECCIN DE INFORMACIN

Esta trabajo se realiz con el objetivo de que la simulacin a realizar


est basada en datos reales, se recolect informacin bsica en cada
una de las calles, realizando varias pruebas donde cada uno de los
tems formo parte importante de la informacin. Como por ejemplo:

El largo y ancho de la calle


Nmero de cruces
Cambio de semforo
Nmero de vehculos en circulacin en hora pico
Nivel de accidentalidad

Por medio de un reloj cronometrado, se tom cada uno de los tiempos


de cada semforo, y se determin problemas frecuentes como lo son los
cambios repentinos de los semforos, ocasionando con esto, mayor
dificultad en el trfico, se observ mala sealizacin en algunas de las
vas, y en ocasiones irrespeto y violacin al cdigo de transito por medio
de los conductores, se tomo una fotografa, que verifica la informacin
recolectada.

27 FLUJO DE ENTRADA

Esta informacin juega un papel muy importante ya que se desea


conocer la cantidad de vehculos que ingresan a una va, los resultados
obtenidos se usarn para alimentar nuestro sistema, obteniendo
resultados reales. En primera medida se define por medio de un periodo
de conteo (1 minuto) el nmero de vehculos que entran, haciendo sta

121
operacin de forma manual, almacenando los datos en una tabla para
llevar un mejor control y anlisis de la simulacin.

De acuerdo a varias pruebas realizadas, vistas en el trabajo de campo,


se puede constatar que la variacin de autos que ingresan es muy alta,
debido a esto se decidi tomar como tiempo de partida el tiempo que
tarda el semforo de cambiar de rojo a verde o de verde a rojo
incluyendo el tiempo de semforo en amarillo ya que muchos
conductores toman este tiempo como verde.

Durante el da se presentan varios cambios en los tiempos de semforo,


como lo son en las horas pico, por tal motivo se decidi tomar un
promedio de estos tiempos. De igual forma se hacen las pruebas y el
anlisis para el flujo de salida.

28 TRABAJOS FUTUROS

La implementacin de la simulacin en su primera versin maneja lo que


es el motor de la aplicacin, donde se muestran las diferentes formulas
matemticas que nos permite realizar el movimiento de los vehculos,
velocidades, tiempo de respuesta, aceleracin, etc. Esta informacin es
fundamental para futuros trabajos, porque de aqu parte toda la lgica de
movimiento de la simulacin.

De acuerdo a esta informacin en futuros trabajos se puede


implementar a:

122
1) Mapas o diagramas de sitios estratgicos de la ciudad para ayudar a
solucionar los problemas comunes, obteniendo informacin de
manera visual detallada.

2) Medir la tasa de accidentalidad causadas por problemas como:

Dao en los semforos


Deterioro en el sistema vial.
Falta de civismo en los conductores
Mala sealizacin

3) Control de tiempo de semaforizacin en horas pico para disminuir el


trfico vehicular.

4) Llevar a cabo la implementacin de cada una de las


recomendaciones como solucin, desde el organismo de transito y
transportes de la ciudad.

5) Llevar un control de reportes estadsticos, con base en los datos


analizados y arrojados por el sistema. En el aplicativo se manejo una
herramienta para facilitar el proceso de reportes. Ver (Ilustracin 18).

Ilustracin 19 "Reporte generado por JasperReports"

123
29 TECNOLOGAS APLICADAS DEL PROYECTO

JEE15 (Java Enterprise Edition): ..es una plataforma de


programacin, parte de la Plataforma Java para desarrollar y
ejecutar software de aplicaciones en Lenguaje de programacin
Java con arquitectura de N capas distribuidas y que se apoya
ampliamente en componentes de software modulares
ejecutndose sobre un servidor de aplicaciones.

La plataforma Java EE est definida por una especificacin.


Similar a otras especificaciones del Java Community Process,
Java EE es tambin considerada informalmente como un
estndar debido a que los proveedores deben cumplir ciertos
requisitos de conformidad para declarar que sus productos son
conformes a Java EE; estandarizado por The Java Community
Process / JCP..

EJB16 (Enterprise JavaBeans): ..Un "Java Bean" es un


componente utilizado en Java que permite agrupar
funcionalidades para formar parte de una aplicacin, esto puede
ser: un "Java Bean" agrupando informacin personal, datos
sobre un pedimento, requerimientos de ordenes, etc.

Un "Enterprise Java Bean" tambin agrupa funcionalidades para


una aplicacin, sin embargo, a diferencia de un "Java Bean" un
"Enterprise Java Bean" es un "deployable component", el
trmino "deployable component" implica que existe un ambiente
de ejecucin, ste ambiente es precisamente un "EJB

15
http://es.wikipedia.org/wiki/Java_EE
16
http://www.osmosislatina.com/java/ejb.htm

124
(Enterprise Java Bean) Container" parte de un java application
server.

Un "Java Bean" requiere ser integrado con otros componentes


para que ste sea funcional, mientras un "Enterprise Java Bean"
a travs de un "EJB Container" puede ser activado
("deployed")..

JPA17 (Java Persistence API): ..Ms conocida por sus siglas


JPA, es la API de persistencia desarrollada para la plataforma
Java EE e La Java Persistence API, a veces referida como JPA,
es un framework del lenguaje de programacin Java que maneja
datos relacionales en aplicaciones usando la Plataforma Java en
sus ediciones Standard (Java SE) y Enterprise (Java EE).

La JPA fue originada a partir del trabajo del JSR 220 Expert
Group. Ha sido incluida en el estndar EJB3..

HIBERNATE18: ..Es una herramienta de Mapeo objeto-relacional


(ORM) para la plataforma Java (y disponible tambin para .Net
con el nombre de NHibernate) que facilita el mapeo de atributos
entre una base de datos relacional tradicional y el modelo de
objetos de una aplicacin, mediante archivos declarativos (XML) o
anotaciones en los beans de las entidades que permiten
establecer estas relaciones..

ICE-Faces19: ..Creado y administrado por ICEsoft Technologies


Inc., ICEfaces es una herramienta lder de cdigo abierto de Ajax,

17
http://es.wikipedia.org/wiki/Java_Persistence_API
18
http://www.clickmatica.com/?page_id=348
19
http://tuforo.org/icefaces-y-icemobile-ee-listos-para-websphere-app-server-websphere-portal-y-
rational/

125
ICEfaces es ms que un componente de la librera JSF Ajax, es
un framework J2EE Ajax para desarrollar y el desplegar
aplicaciones empresariales ricas (AER). Con ICEfaces, los
desarrolladores empresariales Java pueden desarrollar fcilmente
aplicaciones empresariales ricas en Java, no JavaScript..

ORACLE20: ..Oracle es un sistema de gestin de base de


datos relacional (o RDBMS por el acrnimo en ingls de
Relational Data Base Management System), desarrollado
por Oracle Corporation.
Se considera a Oracle como uno de los sistemas de bases de
datos ms completos, destacando:
o Soporte de transacciones,
o Estabilidad,
o Escalabilidad
o Soporte multiplataforma.
o Escogimos la versin gratuita de este gestor de base de
datos debido a su buen desempeo manejando y
almacenando datos, adems de la gran experiencia de la
empresa creadora de este.

Su dominio en el mercado de servidores empresariales ha sido


casi total hasta hace poco, recientemente sufre la competencia
del Microsoft SQL Server de Microsoft y de la oferta de otros
RDBMS con licencia libre como PostgreSQL, MySql o Firebird.
Las ltimas versiones de Oracle han sido certificadas para poder
trabajar bajo GNU/Linux..

20
http://www.orasite.com/administracion-de-oracle/conceptos-basicos-oracle-10g-introduccion

126
MySQL21: ..El sistema de base de datos operacional MySQL es
hoy en da uno de los ms importantes en lo que hace al diseo y
programacin de base de datos de tipo relacional. Cuenta con
millones de aplicaciones y aparece en el mundo informtico como
una de las ms utilizadas por usuarios del medio. El programa
MySQL se usa como servidor a travs del cual pueden conectarse
mltiples usuarios y utilizarlo al mismo tiempo..

21
http://www.definicionabc.com/tecnologia/mysql.php

127
GLOSARIO DE TRMINOS

Trmino Descripcin

Trfico Es el fenmeno causado por el flujo de vehculos


en una va, calle o autopista.

Vehculo Medio de transporte que permite el traslado de un


lugar a otro. Cuando traslada a personas u
objetos es llamado vehculo de transporte.

Modelo Se enfocan en captar las relaciones globales del


Macroscpico. flujo de trfico, tales como velocidad de los
vehculos, flujo vehicular y densidad de trfico.
(hace referencia al pie de pgina 10)
Modelo
Microscpico Se enfocan en la descripcin del
comportamiento del flujo del trfico vehicular a
travs de describir las entidades discretas
individuales y atmicas que interactan unas con
otras. (hace referencia al pie de pgina 10)

Simulador Un simulador es un aparato, por lo general


informtico, que permite la reproduccin de un
sistema. (hace referencia al pie de pgina 3)

128
Semforo22 Un semforo es una estructura diseada para
sincronizar dos o ms threads o procesos, de
modo que su ejecucin se realice de forma
ordenada y sin conflictos entre ellos..

Calle o Ruta Espacio por lo general lineal que facilita la


movilidad de vehculos o personas.

Interseccin Espacio vial donde se cruzan dos o ms


caminos.

Usuario Persona encargada de manipular los tiempos y


recursos de la herramienta simulada

Administrador del Es la persona encargada de iniciar el sistema,


sistema regularmente estas personas tienen su login y
password de acceso.

22
http://www.rastersoft.com/OS2/CURSO/SEMAFORO.HTM

129
CONCLUSIONES

1. Modelar el trfico en la ciudad vindolo desde una simulacin


microscpica es un desafo para las personas que investigan y estudian
el tema, teniendo en cuenta que es un modelo muy complejo y que
puede representar con veracidad y exactitud el trfico actual, pero esto
implica un costo computacional muy alto si se proyecta en una
simulacin. Por tal motivo, con un conjunto de reglas bsicas se puede
conseguir una buena aproximacin, con la cual es viable concretar un
simulador, logrando simular sistemas medianamente complejos para
suministrar valiosa informacin y solucionar problemas ya existentes.

2. Todo el procedimiento aplicado en este desarrollo est basado en


informacin y resultados verdicos analizados previamente como
estrategia de trabajo para llevar un concepto de movilidad vehicular que
se vive a diario en las calles de la ciudad.

3. No exista informacin detallada a cerca de la usabilidad del aplicativo,


todo se genero mediante un proceso de investigacin, basndonos en
las necesidades del usuario.

4. Teniendo en cuenta lo complejo que es el modelo de simulacin se


desarroll una interfaz grfica, con el fin de hacer ms fcil y amigable al
usuario el funcionamiento del sistema.

130
BIBLIOGRAFIA

ROGER P. ROESS, (2004). TRAFFIC ENGINEERING.

ADALFE, Rodolfo; Los semforos y el control dinmico del


trnsito. Editorial: Representaciones y servicios de
Ingeniera,1976.

CAL, Rafael; CRDENAS, James. Ingeniera de trnsito,


fundamentos y aplicaciones. Mxico: Universidad del Valle, 2003.
527p.

CLANDER R., HERMAN E. y MONTROLL E. Traffic Dynamics:


Studies in car Following. En: Operational Research. S.l. no.2
(1958) ; p.41-43.

ERLANDSSON, Lennart; BAUNER, David. Clean Air Workshop


2003. [On line] Rio de Janeiro: Clean air net, 2005.

(MATEMTICAS DISCRETAS, Carlos Garcia , Editorial Prentice


Hall)

131

S-ar putea să vă placă și