Proyecto Billar (Método 2). - Computacion1

Anuncio
Proyecto Billar (Método 2).
Introducción:
Este método comparte con su antecesor, método 1, la suposición de que las bolas de una partida de
snooker (o cualquier modalidad del billar, no nos hemos centrado en una determinada) se comportan
como discos sin rozamiento rígidos y que no pueden rotar sobre sí mismos; lo cual ya es mucho pedir.
Sin embargo, este método ya no necesita suponer que las bolas/discos estén separados, es más,
necesita que el triángulo inicial sea compacto.
Esta nueva suposición, más cercana a la realidad que la anterior, permite a método 2 creer que sólo
va a haber una colisión múltiple, en el que la transferencia de momento va a viajar de unas bolas a
otras hasta que el triángulo finalemente se rompa.
Resolución del problema:
El camino por el que se atacan los problemas del sólido rígido, y en concreto de las colisiones
bidimensionales, es siempre el mismo, la energía y el momento se deben conservar. Partiendo de esta
suposición, hay que tener en cuenta que en este problema hay 16 cuerpos que colisionan y se
transmiten momento por parejas, es decir, hay 120 (16 sobre 2) transmisiones de momento… Esto ya no
resulta tan sencillo, pero hay un matiz importante.
Una vez la bola blanca ha llegado al triángulo, es decir, una vez el conjunto de bolas ya es compacto,
la dirección de su velocidad no importa a la hora de calcular la dirección de la velocidad de la bola
adyacente, lo que realmente importa es la posición relativa de esas bolas. Lo que intento decir es que
la proporcionalidad de las velocidades finales es determinada por las posiciones de las bolas (veánse
ejemplos 1,2,3,4 en “method1”).
La consecuencia del párrafo anterior, que nos va a permitir solucionar este problema, es que
podemos dividirlo en dos fase. La primera será resolver el problema de minimización descrito a
continuación:
𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑎𝑟
∑ Δ𝑝𝑖𝑗
𝑖𝑗
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎:
⟨𝑟𝑖𝑗 , Δ𝑝𝑖𝑗 ⟩ ≤ 0
Donde
Δ𝑝𝑖𝑗 es la diferencia entre el momento final relativo y el inicial de la pareja compuesta por
las bolas “i” y “j”. 𝑟𝑖𝑗 es el vector posición relativa de la misma pareja. Nótese que es equivalente
hablar de la pareja “i j” que de la “j i”.
Las restricciones descritas en la segunda fila se deben a dos razones. La primera es que si el
producto escalar de esos dos vectores fuese mayor que cero, significaría que el ángulo entre ellos se
encuentra entre π y –π, es decir, las bolas estaría intercambiándose momento sólo para permanecer
pegadas entre ellas, y eso no tiene sentido físico alguno. La segunda es que con estas restricciones y el
objetivo de minimización nuestro problema se ha convertido en una optimización lineal. También es
importante notar que, mientras la función objetivo usa el módulo como variable, las restricciones usan
al vector. Esto no causa ningún problema debido a que ambos vectores del producto escalar son
colineales (la transmisión del momento siempre es perpendicular a las superficies de lsa bolas, y la
posición relativa también), por lo tanto el producto escalar se convierte en
producto usual entre escalares.
−Δ𝑝𝑖𝑗 × 𝑟𝑖𝑗 , ahora un
La segunda fase del problema es, simplemente, encontrar un factor de corrección que,
multiplicando a la solución del problema de minimización permita la conservación del momento (de ahí
que fuese importante que la proporcionalidad de las velocidades finales fuese determinada por las
posiciones de las bolas).
Implementación del programa:
Los pasos que sigue método 2 para resolver el problema que nos ocupa de acuerdo con el apartado
anterior son:
1.
Usando la función “timeColission”, explicada en el primer método, se halla el tiempo en el
que se alcanzará la colisión, es decir, se hallará el tiempo en el que la bola blanca alcanza el
triángulo.
2.
La simulación avanza hasta ese momento y se calculan las posiciones de las bolas entonces
(sólo habrá cambiado la posición de la bola blanca, que es la que se mueve).
3.
Usando el método simplex (detallado en su apartado propio) se resuelve el problema de
minimización. Nótese que el algoritmo hallará los intercambios de momento, no los momentos
finales, pero se pueden obtener estos de la ecuación:
𝑝𝑖 = 𝑝𝑖0 − ∑ ∆𝑝𝑖𝑗 𝑟̂𝑖𝑗
𝑗
4.
Usando la conservación de la energía se halla el factor de corrección que nos dará la solución
real:
𝑝02
𝑝𝑖2
= 𝛼∑
2𝑚
2𝑚
⇒
𝛼=
𝑖
𝑝02
∑𝑖 𝑝𝑖2
El Algoritmo Símplex:
Desarrollado en 1947 por el matemático George B. Dantzig este algoritmo permite hallar de forma
eficiente la solución óptima de una problema de programación lineal, esto es, un problema en el cual
se pretende hallar el valor de unas variables que minimicen o maximicen una función lineal a la vez
que estas variables cumplen ciertas restricciones también lineales. Recordemos ahora el problema de
programación lineal que nos ocupaba:
𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑎𝑟
∑ Δ𝑝𝑖𝑗
𝑖𝑗
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎:
⟨𝑟𝑖𝑗 , Δ𝑝𝑖𝑗 ⟩ ≤ 0
Bien, para la programación lineal esto se escribe:
𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑎𝑟
𝐜∙𝐱
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐀𝐱 = 𝐛
𝐱 ≥𝟎
Donde “c” es un vector de 120 componentes idénticamete 1, “x” es el vector que contiene las
transmisiones de momento (en módulo) y “A” es una matriz con “-rij” en su diagonal (para que se
puedan obtener todas las restricciones de nuestro problema). Nótese que además se pide la no
negatividad de las soluciones, cosa que nosotros dábamos por supuesta pues en nuestro problema las
variables son módulos.
Si bien una demostración rigurosa de como funciona el algoritmo símplex no va a darse, hay una serie
de conceptos y teoremas que el lector debe conocer antes continuar:
1. Si cada restricción se convierte en una ecuación, ésta define un hiperplano (es decir, un
conjunto de una dimensión menos que el original, en este caso ℝ120 ). La desigualdad define
una región del espacio llamada hiperplano afín (el hiperplano y “lo que hay a un lado de él”).
2. El conjunto de los hiperplanos afines definidos por A forman un poliedro o politopo.
3. Si el politopo es acotado la solución óptima se alcanza en uno de sus vértices.
Dada la última afirmación, cabría esperar que para obtener la solución óptima solo habría que
demostrar que el politopo objetivo es acotado y evaluar la función en todos los vértices o extremales y
mirar donde es mínima. Sin embargo esto es muy poco eficiente, por lo que el algortimo símplex lo que
hace es evaluar una solución básica inicial (toda solución básica inicial se corresponde con un vértice,
pero no al revés) y encontrar otra “adyacente” que optimice mejor la función (intuitivamente se podría
decir que viaja de un vértice a otro hasta que no puede mejorar la función). Para esto sigue los
siguietes pasos:
1. En primer lugar, minimizar una función “z” es lo mismo que maximizar y = -z, y como las
iteraciones me han parecido más sencillas así, hago este pequeño cambio.
2. Se crea un matriz en la que colocan “A”, a partir de la siguiente columna, la identidad (que
representa los coeficientes de unas variable virtuales que convierten las inecuaciones en
ecuaciones, son las variables de exceso). Después, en otra nueva columna se coloca “b” y
depués una columna de ceros. En una nueva fila por debajo se coloca “c” (con el coeficiente 1
de la función objetivo en la última columna, la de ceros por encima).
3. Se busca un elemento menor que cero en la última fila. Si no se encuentra se ha terminado la
optimización.
4. Se busca un elemento mayor que cero en la columna del elemento del paso anterior. Si no se
encuentra no hay solución acotada.
5. Se pivota la matriz entorno al elemento del paso 4.
6. Se repite el proceso hasta que el paso 3 no sea posible.
Los datos finales no son precisamente cómodos de extraer de la matriz. Si el problema tiene m
variables, la matriz final tiene unos y ceros en la región comprendida por las primeras m columnas y
filas. Bien, si en la primera fila hay un uno en la i-ésima columna, a la i-ésima variable le correspone el
valor que se encuentra en esa fila, pero en la penúltima columna (donde se introdujo “b” antes de las
iteraciones).
NOTA AL PROFESOR: el programa “method2” falla en algún momento pues dice que la solución no
está acotada o simplemente se bloquea en un bucle infinito (esto puede deberse a que el algoritmo se
mueve de una solución básica a otra (degenerada) que representa el mismo vétrice). Sin embargo, otro
problema más grave es que, dado que las restricciones incumben a una sola variable a la vez, estas
definen hiperplanos sencillos (básicamente el plano p_ij = 0). Se puede ver claramente que el único
vértice es el (0,0,0,…) y que ahí se minimiza perfectamente la función, hace falta alguna otra
restricción que no hemos conseguido hallar.
Descargar