MIT OpenCourseWare


ggg

Página principal
¿Qué es OCW?
Ayuda
Feedback
Preguntas frecuentes
Glosario
 
 
Página principal del curso
Programa
Calendario
  Material de clase
  Clases de repaso
Trabajos
  Exámenes
  Avisos
  Lecturas obligatorias
  Otras fuentes

   MIT

   
 

Boletín de problemas 6

Todos los cádigos y las imágenes se han elaborado con software Java™

Fecha de entrega: viernes 5 de abril de 2002

Problema 1. Sistemas de autobuses (última vez, lo prometemos) 100 puntos

Descripción del problema

Las ecuaciones analíticas que hemos utilizado para hallar los sistemas óptimos de autobuses en los boletines de problemas 1 y 5 son soluciones aproximadas de un sistema de ecuaciones no lineales.  En este ejercicio obtendremos las soluciones numéricas de estas ecuaciones. 

Utilizamos un conjunto de ecuaciones más sencillo, basado en coordinadas cartesianas en lugar de polares. Tenemos un conjunto de rutas de autobuses paralelas que prestan servicio en una región de densidad uniforme. Todos los viajes se dirigen o se originan desde un punto fuera de la región (por lo general, en una zona del centro de la ciudad) a la que sirven los autobuses. Las rutas de los autobuses están separadas por una distancia g, funcionan con un intervalo h y el precio de un billete es f. Los usuarios están uniformemente distribuidos en el área de dimensión X por Y, y andan en dirección perpendicular hasta la ruta más cercana. Ignoramos el espaciado de las paradas en las rutas, las dimensiones de las calles, etc. Todo esto se podría incluir pero complicaría el modelo. Se trata básicamente del mismo modelo que el de los boletines 1 y 5 salvo que las rutas son locales, no express; el usuario va andando a la parada en lugar de conduciendo; y se utilizan coordenadas cartesianas; todo esto simplifica el modelo.

Para minimizar el déficit (o maximizar el beneficio), maximizamos la diferencia de ingresos menos costes. Los ingresos son:

Ingresos= TpXYf(a0-a2(kh +g/(4j))-a4f)

Costes= 2XTcY/(ghv)

donde

Nombre de la variable

Valor

Definición

Unidades

p

3.59

Densidad del viaje

Viajes/millas cuadradas/día

j

0.05

Velocidad a pie

Millas/minutos

k

0.4

Coeficiente de espera/intervalo

 

c

50

Coste de explotación de autobús

Centavoss/minuto

T

1050

Duración del día

Minutos

V

0.167

Velocidad del autobús

Millas/minuto

a0

0.41

Cuota de mercado del autobús si presta el mismo servicio que el automóvil

 

a2

0.0081

Coeficiente de tiempo de espera del autobús

 

a4

0.0014

Coeficiente del precio del billete de autobús

 

X

4.0

Anchura del área de análisis

Millas

Y

6.0

Longitud del área de análisis

Millas

Observe que los valores de la mayoría de los parámetros son distintos a los ejercicios previos. 

El número total de viajes en todos los modos de transporte (bus, auto, etc.) es TpXY, o la densidad del viaje multiplicada por el área y el periodo temporal. El número de viajes de autobús es la cuota de mercado del autobús multiplicada por el total de viajes; la cuota de mercado del autobús es a0-a2(kh +g/(4j))-a4f). Esta es una aproximación lineal que calcula la cuota de mercado en función del intervalo h, el espaciado de ruta g (lo que determina la distancia promedio a pie a la ruta de autobús), y el precio del billete f. Los ingresos son el número de viajes de autobús multiplicado por el precio del billete f.

El coste del servicio de autobús se deriva del modo siguiente: hay X/g rutas, en cada una se realizan T/h viajes, y dura cada una Y/v, multiplicada por un factor de viaje de ida y vuelta (2) y el coste de explotación por minuto c.

El precio del billete f es en centavos. El intervalo h es en minutos entre salidas de autobús. El espaciado en la ruta g es en millas entre rutas.

En este ejercicio hallaremos los valores óptimos del espaciado de ruta g, del intervalo h y del precio del billete f. Para ello, tomamos la derivada de la función del beneficio (déficit) Q con respecto a g, h y f. (Son derivadas parciales pero utilizamos el símbolo ‘d’ porque el lenguaje html no es compatible con el símbolo de la derivada parcial.)

Q = TpXYf(a0-a2(kh +g/(4j))-a4f) - 2XTcY/(ghv)
dQ/dg= -TpXYfa2/(4j) + 2XTcY/(vhg2) = 0 
(1)
dQ/dh= -TpXYfa2k + 2XTcY/(vgh2) = 0
(2)
dQ/df= TpXY(a0-a2(kh +g/(4j))-2a4f) = 0
(3)

Observe que T, X y Y se desprenden de todas las ecuaciones. Vea también que las ecuaciones (1) y (2) son muy similarse y arrojan como resultado una relación lineal entre el espaciado de ruta g y el intervalo h:

h= g/(4jk)
(4)
Utilice (4) para eliminar h de (1):
dQ/dg= -pfa2/(4j) + 8jkc/(vg3) = 0
(5)
Utilice (4) para eliminar h de (3):
dQ/df= a0-a2g/(2j)-2a4f = 0
(6)
Podemos resolver (5) y (6) analíticamente, aproximadamente para obtener:
g= (64j2ka4c/ (pva0a2))1/3 
(7)
f= a0/(2a4) – (kca22)/(ja42pva0))1/3
(8)
Utilizando (4) también podemos hallar una solución aproximada para el intervalo h:
h= (a4c/ (pa0a2k2jv))1/3
(9)

Las soluciones aproximadas (7)-(9) tienen errores. Se pueden utilizar para un análisis inicial, pero si se necesitan respuestas exactas, debemos resolver numéricamente las ecuaciones (1)-(3). Como (2) y (3) son linealmente dependientes, sólo hemos de resolver las ecuaciones (5) y (6) y, a continuación, utilizar (4) para obtener el intervalo óptimo h.

Examinemos el sistema de dos ecuaciones no lineales que debemos resolver:

-pfa2/(4j) + 8jkc/(vg3) = 0
(0’)
a0-a2g/(2j)-2a4f = 0
(1’)

Numeremos las ecuaciones como 0 y 1: necesitaremos un array y será conveniente numerarlo empezando por 0. Hagamos que la variableg sea x0 y la variable f sea x1, a fin de que encajen en el método general para resolver este sistema. Reescriba (0) y (1) utilizando x0 y x1, y simplifique coeficientes:

f0(x0 ,x1)= -0.25pa2x1/j + 8jkc/(vx03) = 0
(0’’)
f1(x0 ,x1)=  a0 - 0.5a2x0/j - 2a4x1 = 0
(1’’)

Utilizaremos el método de Newton de dos dimensiones para resolver este sistema. Este método necesita las derivadas de cada ecuación con respecto a cada variable. De nuevo, se trata de derivadas parciales, pero utilizamos el símbolo ‘d’:

df0/dx0 = -24jkc/(vx04)
(a)
df0/dx1 = -0.25pa2/j
(b)
df1/dx0 = -0.5a2/j
(c)
df1/dx1 = -2a4
(d)

Las ecuaciones (0’’) y (1’’) se pueden resolver con una versión bidimensional del método de Newton, utilizando las derivadas (a)-(d).

Método de Newton en dos dimensiones

Tenemos dos funciones f0(x0 ,x1) y f1(x0 ,x1) y queremos aproximar una solución del sistema f0= 0 y f1= 0. En la vecindad de xi cada función fi se puede expandir utilizando una serie Taylor:

f0(x0+ dx0, x1+ dx1)= f0(x0 ,x1) + (df0/dx0) dx0 + (df0/dx1) dx1        + …  
(e)
f1(x0+ dx0, x1+ dx1)= f1(x0 ,x1) + (df1/dx0) dx0 + (df1/dx1) dx1        + …
(f)

Si definimos f0(x0+ dx0, x1+ dx1)= 0 y f1(x0+ dx0, x1+ dx1)=0, obtenemos, en notación matricial:

(g)

Puede ver que ésta es la extensión bidimensional del Método de Newton vista en clase.

Ahora tenemos que resolver la ecuación matricial (g) para dx0 y dx1, los tamaños de pasos para aproximarse a las soluciones de las dos ecuaciones.

Mientras vemos esta semana en clase métodos para resolver sistemas lineales generales, para esta tarea podemos usar un método sencillo que recordará de algebra llamada la regla de Cramer. En dos dimensiones es especialmente sencillo. Para un sistema:

(j)

x0 = (a11 b0 - a01 b1)/ (a00 a11 - a01 a10)
(k)
x1 = (- a10 b0 + a00 b1)/ (a00 a11 - a01 a10)
(l)

Como las derivadas parciales dfi/dxj y los valores de función fi(x0 ,x1) son conocidos, podemos resolver para los tamaños de paso dx0 y dx1 utilizando (k) y (l). 

Trabajo

Escriba un programa que resuelva las ecuaciones (0’’) y (1’’) numéricamente para hallar los valores óptimos del espaciado de ruta g y del precio del billete f. Utilice la ecuación (4) para hallar el intervalo h. Detalles:

1.      Escriba una clase y un método Newton en 2D similar al método Newton en 1D visto en clase:

  • Defina una interfaz que contenga los métodos apropiados que el método de Newton necesita.  A continuación, se muestra una posible interfaz, pero usted puede utilizar la que quiera.

    En la función siguiente, tenga en cuenta los argumentos jj y kk. Los argumentos extra jj y kk adoptan los valores 0 y 1, correspondientes a las dos dimensiones de nuestras entradas.

    Necesitamos un argumento extra 1 en el método f() para elegir qué dimensión de la función estamos evaluando.

    Necesitamos 2 argumentos extra en df() para elegir la dimensión que estamos diferenciando parcialmente (jj), y la dimensión que diferenciamos parcialmente con respecto a (kk).

    public interface MathFunction2D
    {
    // Function value for function j
    public double f(int jj, double[] x);

    // Partial derivative, function j, variable k
    public double df(int jj, int kk, double[] x);
    }

  • Fije en 50 las iteraciones máximas y la tolerancia en 10-15. La tolerancia es ridícula para este problema, pero en general es una buena práctica fijarla baja.
  • El código es bastante corto para el método: calcula los valores derivativos y de función e invoca la regla de Cramer para hallar el tamaño del paso dx, hasta que el valor absoluto de ambas funciones es menor que la tolerancia.
  • Observe que la regla de Cramer resuelve el paso dx, no el nuevo x; ha de añadir el paso al cálculo actual de x para obtener el siguiente cálculo. Tenga cuidado con las convenciones de los signos; tenga en cuenta que los valores de la función en la ecuación (g) son negativos, por ejemplo. Compruebe que el denominador en las ecuaciones (k) y (l) no sea demasiado pequeño (o cero).
  • Como el método de Newton de 2D es tan sencillo, usted puede aplicar la regla Cramer dentro del mismo cuerpo del método. En un método de Newton n-dimensional más general, se utilizaría un método de eliminación gaussiano para resolver el sistema lineal. 
  • No utilice contadores de bucles de valores enteros con los nombres j o k; entrarán en conflicto con las variables dobles j y k.

2.      Escriba una clase para generar las funciones, derivadas y las suposiciones iniciales.  Convendrá que las ponga todas en una clase ya que comparten muchos parámetros. La clase debería:

  • Implementar la interfaz MathFunction2D (o la que usted haya creado).
  • Implementar los métodos para calcular las soluciones analíticas aproximadas utilizando (7), (8) y (9). Utilice las soluciones aproximadas de (7) y (8) como suposiciones iniciales para su método de Newton en 2D.
  • Escriba los métodos setXXX() y getXXX() necesarios (véase a continuación)

3.      Escriba una clase test con un método main() (o incluya el main() en otra clase):

  • Permita que el usuario introduzca una variedad de densidades p para obtener el espaciado de ruta, el intervalo y el precio del billete óptimos. Puede asumir un incremento de 0.5 unidades en densidad. Un intervalo de densidad típico sería 2.0 a 4.0.
  • Para cada densidad, muestre las soluciones numéricas y aproximadas del espaciado de ruta, el intervalo y el precio del billete. Muestre también las suposiciones iniciales, el número de iteraciones y el valor de las dos funciones al final de los métodos numéricos.
  • Del mismo modo, compruebe el método de Newton con suposiciones iniciales para las variables de:
      1. 0
      2. 0.0001
      3. 10
  • No es necesario que escriba un método main() separado para ejecutar estas pruebas de las peticiones iniciales: podría simplemente modificar temporalmente el main() existente.  Aunque no es necesario que entregue esta versión del código, debe incluir un breve comentario al final del método main() ordinario, describiendo lo que sucede y por qué.

Puntuación extra (solución IGU) 40 puntos

En los boletines de problemas 6 a 10, tiene la posibilidad de implementar una interfaz gráfica de usuario en Swing para obtener 40 puntos extra de nota. Esta solución se aplicará unica y exclusivamente a uno de los boletines; le rogamos que incluya un comentario en la parte superior del método main() en el que indique la puesta en práctica de esta solución.

Para la parte de nota extra del boletín de problemas 6, ponga en marcha una interfaz gráfica de usuario (IGU) para que el usuario pueda elegir una densidad (usando un control deslizante, que oscile entre los valores 2.0 y 4.0), y luego muestre los resultados numéricos del programa en formato texto en la IGU. Muestre las mismas cantidades especificadas en el enunciado del problema. Si lo desea, puede dibujar las rutas y su espaciado tal y como se muestra en la figura del boletín de problemas, pero no es obligatorio.

La interfaz debería tener aproximadamente el siguiente aspecto:

Entrega del trabajo

Requisitos

  • Problema 1: solamente por correo electrónico. No es necesario entregarlo en papel.
  • Problemas 2 y 3: copia en papel y copia electrónica de TODOS los códigos fuente (todos los archivos con la extensión .java).
  • Incluya en TODOS los archivos que presente su nombre, el nombre de usuario, la sección, el nombre del profesor ayudante, el número de trabajo y una relación de las personas con las que haya comentado el boletín de problemas. 
  • NO entregue copias electrónicas o en papel de código compilado (archivos .class).

Sanciones

  • Por pérdida de copia en papel: -10% de la puntuación del boletín de problemas.
  • Por pérdida de copia electrónica: -30% de la puntuación del boletín de problemas.
  • Por entrega fuera del plazo: -20% de la puntuación del boletín de problemas si es un día de retraso. Por más de un día de retraso = NO SE PUNTUARÁ

Información Jurídica | Privacidad
Todo uso del sitio de MIT OpenCourseWare y sus materiales de curso queda sujeto a las condiciones y términos de uso detallados
en la sección sobre Información Jurídica
Contacta con nosotros: Usuarios | Empresas-Instituciones-Medios comunicación
Código Ético | Aviso Legal | Política de confidencialidad | Quiénes somos: Sala de Prensa