Vous êtes sur la page 1sur 17

LAS MATEMTICAS Y SUS APLICACIONES UN RETO EN LA ENSEANZA ACTUAL

TALLER: Tres algoritmos en busca de autor


Eliseo Borrs Veses I.E.S. Franesc Ferrer i Guardia. Valencia Enero de 2002

Nadie discute hoy que las nuevas tecnologas son un poderoso instrumento para el desarrollo de las matemticas. El ordenador ha cambiado el rumbo de muchas investigaciones, cuantitativa y cualitativamente. Pero las matemticas tambin han tenido influencia decisiva en el desarrollo de las herramientas para el ordenador. La influencia ordenador-matemtica ha sido mutua [1]. Pero no parecen tan brillantes los logros de la informtica en la mejora de la enseanza de las matemticas: Despus de un tiempo tan dilatado desde su aplicacin, no ha modificado sustancialmente la calidad de la enseanza ni sus contenidos. Tal vez por tres razones principales: la falta de medios en los centros; la falta de preparacin de los profesores y la dificultad aadida al aprendizaje de las matemticas que representa la utilizacin del ordenador por parte del alumnado. Incluso en pases como Francia, Inglaterra y EEUU, donde se han utilizado muchos medios, los resultados no parecen muy excitantes. M. Roger Everett [2], que ha estudiado con amplitud y profundidad la difusin de las innovaciones, llega a catalogar cinco tipos de actitudes de los profesores frente a la introduccin de los ordenadores en la enseanza, no siendo las positivas las ms abundantes. (Ver tambin [3] y [4]). Tendremos que tener ms paciencia y esperar mejoras sustanciales. Seguramente, una de las mayores aportaciones de la informtica a la enseanza es poner a nuestro alcance un verdadero laboratorio de matemticas en el que: podemos calcular y representar funciones fcilmente, ensayar conjeturas y modelos matemticos, y una enorme biblioteca por medio de Internet. Sin embargo, es una opinin ya muy extendida entre los profesores, que las nuevas tecnologas no podrn evitar el gran esfuerzo que representa el aprendizaje de conceptos y tcnicas matemticas bsicas para acometer cualquier estudio cientfico: Seguirn sin existir caminos reales. En todo caso, nuestra experiencia en clase confirma que es posible el aprendizaje simultneo de las nuevas tecnologas y de las matemticas, de modo que haya una interaccin fructfera; como la experiencia que relata Jos Llorens Fuster [4] sobre el uso de un programa de clculo simblico, DERIVE, en una Escuela Tcnica, para introducir el concepto de integral definida. En este taller presentamos tres ejemplos de posibles interacciones ordenadormatemticas: 1. El ordenador puede actuar como catalizador del aprendizaje: al intentar explicar las sombras que un objeto produce sobre distintas superficies y obtenerlas sobre la pantalla de nuestro ordenador, nos vemos obligados a acudir a la geometra analtica. El instrumento, el ordenador, puede avivar nuestro deseo de aprender matemticas [5].

2.

Con el ordenador podemos construir y ensayar modelos basados en distintas ramas de la ciencia para buscar soluciones a problemas matemticos: utilizando las leyes de la reproduccin mendeliana se pueden construir algoritmos genticos para la resolucin de problemas matemticos [6]. 3. Con el ordenador podemos realizar simulaciones: Si generamos una recta al azar en una regin del plano, cul es la longitud esperada de la cuerda determinada por la recta sobre la regin? [6] Proponemos a los asistentes unos esbozos de algoritmos para resolver estos tres tipos de problemas y tres tipos de acciones: a) El estudio de estos algoritmos. b) El anlisis del conocimiento matemtico que su elaboracin entraa. c) Su mejora. El lenguaje utilizado ha sido LOGO, versin MSWLOGO de Softronic, por estar muy extendido en la enseanza secundaria. Pero actualmente comienza a ser posible el empleo de otros lenguajes, con el aumento del nmero de horas de informtica en el bachillerato. __________________ [1] Aroca Hernndez-Ros J.M. (2001): El progreso de la matemtica en los ltimos 25 aos. Investigacin y Ciencia, Octubre 2001, p. 64 y siguientes. Barcelona. [2] Everett M. Rogers (1995): Diffusion of Innovations. Free Press. [3] Borrs E, Burguet F, DOpazo J, Gisbert V, Iborra R, Nieto M, Snchez A, Testal M (1985): Libro blanco de la informtica en las enseanzas medias. Generalitat Valenciana. Consellera de Cultura, Educacin y Ciencia. Valencia, 1985. [4] Llorens J. L. (2001): El impacto de los programas de clculo simblico en la enseanza de las matemticas ( diez aos de matemticas con ordenador) . Epsilon, n 49, vol. 17 (1). [5] Borrs E, Moreno P, Nomdedeu X (2002): Re-ocurrencias (ttulo no definitivo). Nivola Ediciones. Madrid. Pendiente de publicacin febrero 2002. [6] Borrs E. (1996): Algunos modelos de simulacin aleatoria y su aplicacin a la enseanza del azar. Tesis doctoral. Universitat Politcnica de Catalunya. Barcelona, julio de 1996.

1. ALGORITMOS PARA PROYECTAR SOBRE UNA SUPERFICIE


1.1 Enunciado Se trata de elaborar un programa LOGO para obtener las sombras que produce una curva espacial sobre una superficie, segn la direccin de la luz. Nos limitaremos a dos superficies: plano y cilindro. Los resultados que siguen corresponden, en parte, a dos captulos del libro R-Ocurrencias (captura matemtica de lo visible) de Xaro Nomdedeu, Pilar Moreno y Eliseo Borrs, que proximamente publicar la editorial Nivola. 1.2. Sombras sobre un plano Podemos calcular la imagen P de cualquier punto P(p , p , p ) del espacio sobre un plano de ecuacin cartesiana ax+by+cz+d=0. Para ello, hallamos la ecuacin de la recta que pasa por P cuya direccin es la de la luz:
1 2 3

[1] (ver figura en Eliseo Borrs Veses. La buena sombra)

y buscamos su interseccin con el plano dado, sustituyendo [1] en la ecuacin del plano: a(p +ut) + b(p +vt) + c(p +wt) +d =0 [2] [3](ver figura en Eliseo Borrs Veses. La buena sombra) Sustituyendo este valor de t en [1], obtenemos el punto P. Si au+bv+cw=0, entonces la luz es paralela al plano y, por tanto, no hay sombra. Adems, como , si t<0, el punto est detrs del plano y, por tanto, no hay imagen real. 1.3 Programa LOGO para proyectar sobre un plano Utilizando estos clculos, hemos elaborado un programa LOGO para generar sombras de curvas espaciales sobre un plano dado, segn la direccin de la luz.
1 2 3

to valor_t :L :P :Coef :L es un vector que indica la direccin de la luz.

:Coef son los coeficientes del plano sobre el que proyectamos.


:P es el punto a proyectar. ; Si no existe el punto imagen de P devuelve 5000. (local "p1 "p2 "p3 "u "v "w "a "b "c "d "t) make "p1 item 1 :P make "p2 item 2 :P make "p3 item 3 :P make "u item 1 :L make "v item 2 :L make "w item 3 :L make "a item 1 :Coef make "b item 2 :Coef make "c item 3 :Coef make "d item 4 :Coef localmake "den :a*:u+:b*:v+:c*:w localmake "num :a*:p1+:b*:p2+:c*:p3+:d test :den=0 iftrue [output -5000] iffalse~ [make "t -:num/:den~ ifelse :t<0 [output -5000][output :t] ] end to proy :L :P :Coef (local "p1 "p2 "p3 "u "v "w "t) make "u item 1 :L make "v item 2 :L make "w item 3 :L make "p1 item 1 :P make "p2 item 2 :P make "p3 item 3 :P localmake "t valor_t :L :P :Coef ifelse :t=-5000~ [output (list :t :t :t)]~ [output (list :p1+:u*:t :p2+:v*:t :p3+:w*:t)] end to parametricas ; solicita las ecuaciones paramtricas de la curva a proyectar localmake "P questionbox [ec. paramtricas separadas por blanco][parmetro :t] output (sentence [(list] :P [)]) end to proyecta :L :Coef (local "t "EP "P "P' "dt) perspective make "EP parametricas make "P run :EP setturtle 0 localmake "t 0 make "dt 2 pu setposxyz :P make "P' proy :L :P :Coef setturtle 1 pu

ifelse not (-5000 = item 1 :P')~ [setposxyz :P' pd] [pu] repeat 360~ [ setturtle 0 make "t :t+:dt make "P run :EP setpencolor [255 0 0] pd setposxyz :P make "P' proy :L :P :Coef setturtle 1 setpencolor [0 0 255] ifelse not (-5000 = item 1 :P')~ [setposxyz :P' pd] [pu] ] end

Podemos aadir los tres ejes de coordenadas al dibujo para observar mejor la situacin del plano y de las curvas. Tambin podemos dibujar cualquier plano. Para ello necesitamos procedimientos similares a los que siguen: to ejes :a fd :a label "+y bk 2*:a label "-y fd :a rt 90 fd :a label "+x bk 2*:a label "-x fd :a lt 90 down 90 fd :a label "-z bk 2*:a label "+z fd :a up 90 end to resta :A :B output (list (item 1 :A) - (item 1 :B) (item 2 :A) - (item 2 :B) (item 3 :A) - (item 3 :B)) end to suma :A :B output (list (item 1 :A) + (item 1 :B) (item 2 :A) + (item 2 :B) (item 3 :A) + (item 3 :B)) end to producto :k :A output (list :k*item 1 :A :k*item 2 :A :k*item 3 :A) end to cuadrilatero :A :B :C :D pu setposxyz :A pd setposxyz :B setposxyz :C setposxyz :D setposxyz :A end to cuadrilatero_ampliado :A :B :C (local "D "O "respuesta "k) ; dibuja un paralelogramo determinado por los puntos A, B y C ; si nos parece`pequeo o grande lo amplia una escala k make "D suma :C resta :B :A do.until ~ [setpencolor [0 0 0] cuadrilatero :A :C :D :B make "respuesta first questionbox [Aumento el tamao del plano?] [si/no] if (:respuesta = "si)~ [setpencolor [255 255 255] cuadrilatero :A :C :D :B make "k first questionbox [Proporcin?][por ejemplo 1.5]

make "O producto 0.5 suma :B :C make "A suma :O producto :k resta :A :O make "B suma :O producto :k resta :B :O make "C suma :O producto :k resta :C :O make "D suma :O producto :k resta :D :O setpencolor [0 0 0] ] ]~ [:respuesta = "no] polystart cuadrilatero :A :C :D :B polyend pu home pd end to plano :coef (local "PA "PB "PC "a "b "c "d) make "a item 1 :coef make "b item 2 :coef make "c item 3 :coef make "d item 4 :coef test(0 =:a) iftrue~ [test (0 = :b) iftrue ~ [make "PC (list 0 150 -:d/:c) make "PB (list 150 0 -:d/:c) make "PA (list 0 0 -:d/:c) ] iffalse ~ [test (0 = :c) iftrue~ [make "PC (list 0 -:d/:b 150) make "PB (list 150 -:d/:b 0) make "PA (list 0 -:d/:b 0) ] iffalse~ [make "PC (list 0 200 (-:d-200*:b)/:c) make "PB (list 200 0 -:d/:c) make "PA (list 0 0 -:d/:c) ] ] ] iffalse~ [test (0 = :b) iftrue~ [test (0 = :c) iftrue~ [make "PC (list -:d/:a 0 200) make "PB (list -:d/:a 200 0) make "PA (list -:d/:a 0 0) ]

iffalse~ [make "PC (list 200 0 (-:d-200*:a)/:c) make "PB (list 0 200 -:d/:c) make "PA (list 0 0 -:d/:c) ] ] iffalse~ [test (0 = :c) iftrue~ [make "PA (list 0 -:d/:b 0) make "PB (list 200 (-:d-200*:a)/:b 0) make "PC (list 0 -:d/:b 200) ] iffalse~ [test (0=:d) iftrue~ [make "PA (list 0 0 0) make "PB (list 200 0 -200*:a/:c) make "PC (list 0 200 -200*:b/:c) ] iffalse~ [make "PA (list -:d/:a 0 0) make "PB (list 0 -:d/:b 0) make "PC (list 0 0 -:d/:c) ] ] ] ] perspective cuadrilatero_ampliado :PA :PB :PC polyview pu home pd ejes 250 luz (list :a :b :c) :PB pu home pd end 1.4 Sombras sobre un cilindro Sea P(a, b, c) un punto exterior al cilindro. Para hallar la proyeccin de P sobre la superficie cilindrica hallamos la ecuacin de la recta que pasa por P cuya direccin es la de la luz: [1](ver figura en Eliseo Borrs Veses. La buena sombra) y buscamos su interseccin con el cilindro vertical (segn el eje y) de radio r, cuya ecuacin es: x + z =r [2] Sustituyendo [1] en [2], obtenemos: (u +w )t + 2(au+cw)t + (a +c -r ) = 0 [3] Si u +w =0, entonces debe ser u=0 y w=0, con lo que no hay proyeccin (la luz es vertical). Suponiendo pues que u +w 0, resolvemos la ecuacin de segundo grado [3] y obtenemos: [4](ver figura en Eliseo Borrs Veses. La buena sombra)
2 2 2 2 2 2 2 2 2 2 2 2 2

siendo: [5](ver figura en Eliseo Borrs Veses. La buena sombra) Para que estas soluciones sea reales, el discriminante D deber ser no negativo o lo que es lo mismo: [6](ver figura en Eliseo Borrs Veses. La buena sombra) Sustituyendo el valor de t en [1], obtendremos la proyeccin buscada P. Sin embargo, hay una pequea dificultad. De las dos soluciones posibles de [3] para t, cul elegimos?: Una corresponde a la proyeccin buscada, pero la otra corresponde al punto opuesto del cilindro. Debemos elegir siempre la ms cercana al punto P. La distancia al cuadrado entre P y P es (x-a) +(y-a) (z-a) =(u +v +w )t . As que, cuanto ms pequeo sea t ms cercano estar P de P. Por lo tanto, elegiremos t si au+cw 0 y t si au+cw< 0. Adems: Para que exista P deber ser t 0. Como suponemos que la luz no penetra en el interior del cilindro, para que un punto P de coordenadas [a b c] pueda proyectarse deber verificar a +c r . 1.5 Programa LOGO para proyectar sobre un cilindro Teniendo en cuenta estas relaciones podemos elaborar un programa en LOGO, como el indicado en la tabla que sigue, para hallar las proyecciones de cualquier figura sobre la superficie cilindrica. to valor_t :u :w :a :c :r ;[u v w] es la direccin de la luz ; [a b c] son las coordenadas del punto P a proyectar
2 2 2 2 2 2 2 1 2 2 2 2

; r es el radio del cilindro sobre el que proyectamos, cuya base est en el plano y=0. ; Si existe el punto imagen de P, devuelve el valor de t. En caso contrario devuelve 5000.

(local "a2 "b2 "c2 "d2 "t) make "a2 :u*:u+:w*:w make "b2 :a*:u+:c*:w make "c2 :a*:a+:c*:c-:r*:r make "d2 :b2*:b2-:a2*:c2 test (or :a2=0 :a*:a+:c*:c < :r*:r) iftrue [output 5000] iffalse ~ [ test :d2 < 0 iftrue [output 5000] iffalse [ ifelse :b2 < 0 [make "t (-:b2-sqrt :d2)/:a2] [make "t (-:b2+sqrt :d2)/:a2] ifelse :t < 0 [output -5000][output :t] ] ] end to proy :D :P :r (local "u "v "w "a "b "c "t) make "u item 1 :D make "v item 2 :D

make "w item 3 :D make "a item 1 :P make "b item 2 :P make "c item 3 :P make "t valor_t :u :w :a :c :r ifelse :t=-5000~ [output (list :t :t :t)]~ [output (list :a+:u*:t :b+:v*:t :c+:w*:t)] end
to parametricas localmake "P questionbox [ec. paramtricas separadas por blanco][parmetro :t] output (sentence [(list] :P [)]) end

to proyecta :D :r (local "EP "P "P' "t "dt "PINF) perspective setpencolor [0 0 0] cilindro :r 200 40 make "PINF [-5000 -5000 -5000] make "EP parametricas setturtle 0 localmake "t 0 make "P run :EP make "dt 2 pu setposxyz :P make "P' proy :D :P :r setturtle 1 pu ifelse not (:PINF=:P')~ [setposxyz :P' pd] [pu] repeat 360~ [ setturtle 0 make "t :t+:dt make "P run :EP setpencolor [255 0 0] setpensize [2 2] pd setposxyz :P make "P' proy :D :P :r setturtle 1 setpencolor [255 255 0] setpensize [2 2] ifelse not (:PINF=:P')~ [setposxyz :P' pd] [pu] ] end Para dibujar el cilindro incluido en el procedimiento proyecta anterior, hemos utilizado los siguientes procedimientos: to getpoint :r ;devuelve un punto, al que apuntamos, de la superficie del cilindro. fd :r localmake "pos posxyz bk :r output :pos end to cua :r :h :n :m ; se supone descompuesto el cilindro en :n cuas verticales. ; Cada una de estas cuas se corta en m porciones horizontales, ; de modo que la superficie del cilindro queda descompuesta en ; n*m rectangulos planos que luego podrn rellenarse (renderizar),

; para que el dibujo del cilindro parezca un slido, con la orden ; ; ; polyview. pu down 90 localmake "A getpoint :r rt 360/:n localmake "B getpoint :r lt 360/:n up 90 repeat :m~ [ fd :h/:m down 90 localmake "D getpoint :r rt 360/:n localmake "C getpoint :r lt 360/:n up 90 setposxyz :A pd polystart setposxyz :B setposxyz :C setposxyz :D setposxyz :A polyend make "A :D make "B :C pu down 90 bk :r up 90 fd :h/:m ] end to cilindro :r :h :n
; dibuja un cilindro vertical, de radio :r y altura :h, ; haciendo girar :n veces la cua anteriormente definida.

localmake "pos posxyz repeat :n~ [ cua :r :h :n 10 pu setposxyz :pos rr 360/:n ] polyview end

2. ALGORITMOS GENTICOS: 8 REINAS Y EL PROBLEMA DEL VIAJANTE


2.1 Enunciado Dado un tablero de ajedrez 88, colocar 8 reinas de modo que ninguna est amenazada por las dems, o lo que es lo mismo, que haya a lo sumo una reina en cada lnea, en cada columna y en cada diagonal.

2.2 Bsqueda de soluciones Este problema fue planteado por primera vez en 1848 por Max Bezzel en un peridico de ajedrez. Gauss encontr 72 soluciones y el Dr. Nauck las 92, en 1850.. 2.2.1 Solucin determinista

Arthur Engel en 1977 propuso un algoritmo determinista para hallar todas las soluciones posibles: 1. Colocamos las reinas columna por columna, comenzando por la primera. 2. En la segunda columna deslizamos la reina de abajo hasta arriba hasta lograr que no est amenazada por otra. Procedemos de igual manera con las siguientes reinas y columnas. 3. Si durante el proceso anterior no logramos colocar la reina correspondiente, retrocedemos a la reina anterior y la deslizamos a otra casilla hasta que no est amenazada por las reinas precedentes. 4. Cada vez que logramos una solucin, la anotamos, quitamos la ltima reina del tablero y la anterior la deslizamos hasta la siguiente casilla libre de amenazas. 2.2.2 Programa LOGO El programa arranca con la orden 8reinas to avanza make "i :i+1 end to retrocede make "i :i-1 end to sube setitem :i :d 1+item :i :d end to posible local "j for [j 1 :i-1 1]~ [if or (item :i :d) = (item :j :d)~ (:i-:j)=abs ((item :i :d) - (item :j :d)) ~ [output "false] ] output "true end to prueba test posible iftrue~ [ifelse :i=8 ~ [print :d retrocede sube tope]~ [avanza setitem :i :d 1 prueba] ] iffalse [sube tope] end to 8reinas make "d array 8 make "i 1 setitem 1 :d 1 prueba end to tope test 8<item :i :d

iftrue [retrocede termina] iffalse [prueba] end to termina if :i>0 [sube tope] end

2.2.3 Solucin indeterminista: algoritmo gentico Representamos cada cromosoma por una permutacin de 1, 2 8. Por ejemplo: [1 5 8 6 3 7 2 4] Cada elemento de la permutacin es un gen. 2.2.4 Aptitud de un cromosoma Cada reina ocupa una fila i, una columna j y dos diagonales i+j e i-j. Por cada pareja de reinas amenazadas se incrementa en 1 el valor de la aptitud del cromosoma. Cuanto mayor es la aptitud menos apropiado es el cromosoma. Se alcanza una solucin cuando la aptitud, es 0. Por ejemplo, el cromosoma [6 4 8 2 7 5 3 7] tiene como aptitud 7; en cambio, el cromosoma [1 5 8 6 3 7 2 4] tiene como aptitud 0, es pues una solucin. 2.2.5 Reproduccin, mutacin y seleccin. Cada cromosoma da lugar a dos hijos: uno con los mismos genes y otro resultante de cortarlo al azar, transponerlos y pegarlos. Cada mutacin consiste en elegir dos genes al azar del cromosoma e intercambiarlos. La mutacin se produce con una probabilidad determinada (50% en nuestro caso). En cada generacin se duplica el nmero de cromosomas, pero slo pasan a la siguiente la mitad de ellos, los mejor adaptados. 2.2.6 Programa LOGO El programa arranca con la orden evolucin con dos valores correspondientes al nmero de generaciones que deseamos observar y el nmero de cromosomas por generacin. Por ejemplo: evolucin 20 5 corresponde a 20 generaciones de 5 cromosomas cada una. ; Generacin de la poblacin to cromosoma (local "i "v) make "v array 8 for [i 1 8 1] [setitem :i :v :i] for [i 8 2 -1]~ [make "k 1+random 8 make "t item :i :v~ setitem :i :v item :k :v setitem :k :v :t] output arraytolist :v end to generar_poblacin :n (local "P "m) make "P [ ] make "m count :P while [:m<:n]~ [make "P lput cromosoma :P make "P remdup :P make "m count :P]

output :P end to hijo :v (local "i "k "w1 "w2) make "k 1+random 7 make "w1 [ ] make "w2 [ ] for [i 1 :k 1] [make "w2 lput (item :i :v) :w2] for [i :k+1 8 1] [make "w1 lput (item :i :v) :w1] make "w1 sentence :w1 :w2 output :w1 end to reproduccin :Q (local "P "i "m "n) make "m count :Q make "n 2*:m make "P :Q for [i 1 :m 1]~ [make "P lput hijo item :i :Q :P] make "P remdup :P make "m count :P while [:m<:n]~ [make "P lput cromosoma :P~ make "P remdup :P make "m count :P ] output :P end ; Ordenacin to aptitud :v (local "i "j "f "dp "ds "a "k) ;ponemos a -1 todas las componentes de los tres vectores que definen la aptitud make "f (array 8 0) for [i 0 7 1] [setitem :i :f -1] make "dp (array 15 -7) for [i -7 7 1] [setitem :i :dp -1] make "ds (array 15 0) for [i 0 14 1] [setitem :i :ds -1] ;se modifican los tres vectores anteriores de acuerdo con el dato v for [k 1 8 1]~ [~ make "j (item :k :v)-1 make "i :k-1 setitem :j :f 1+item :j :f setitem (:i-:j) :dp (1+item (:i-:j) :dp) setitem (:i+:j) :ds (1+item (:i+:j) :ds) ] ;se calcula la aptitud sumando los elementos de los tres vectores superiores a 0 make "a 0 for [i 0 7 1] [if 0<item :i :f [make "a (:a + item :i :f)]] for [i -7 7 1] [if 0<item :i :dp [make "a (:a + item :i :dp)] ] for [i 0 14 1] [if 0<item :i :ds [make "a (:a + item :i :ds)] ] output :a end to mximo :a :b

if (aptitud :a) > (aptitud :b) [output :b] output :a end to mximo_lista :L (local "a "i "n) ;if (:L=[ ])[output [ ]] make "a first :L make "i 2 make "n count :L repeat :n-1[make "a mximo :a (item :i :L) make "i :i+1] output :a end to ordenar :L (local "L1 "L2 "max) if (:L=[ ]) [output [ ]] make "L1 [ ] make "L2 :L while [not :L2=[ ]]~ [~ make "max mximo_lista :L2 make "L1 (lput :max :L1) make "L2 remove :max :L2 ] output :L1 end ; Presentacin de resultados to escribir_generacin :Q (local "k "m "ap "v) make "m count :Q for [k 1 :m 1]~ [make "v item :k :Q make "ap aptitud :v (show :v "aptitud= :ap) if :ap=0 [sound [500 600] pause] ] end ; Modificacin de la poblacin to mutacin :v (local "i "j "t "w) make "w array 8 make "w listtoarray :v make "i 1+random 8 make "j 1+random 8 make "t item :i :w setitem :i :w item :j :w setitem :j :w :t output arraytolist :w end to mutacin_total :Pob (local "P "i "m "v) make "P [ ] make "m count :Pob

for [i 1 :m 1]~ [make "v item :i :Pob ~ if 50>random 100 [make "v mutacin :v] make "P lput :v :P ] output :P end to seleccin :Pob ;selecciona la primera mitad de la poblacin (local "P "Q "i "m) make "P ordenar :Pob make "Q [] make "m (count :Pob)/2 for [i 1 :m 1] [make "Q lput (item :i :P) :Q] output :Q end ; Evolucin de la poblacin (cuerpo del programa) to evolucin :generaciones :elementos_por_generacion (local "P "Q "i) make "P generar_poblacin :elementos_por_generacion make "P ordenar :P (print "generacin 0) escribir_generacin :P for [i 1 :generaciones 1]~ [~ make "P mutacin_total :P make "Q reproduccin :P make "P seleccin :Q (print "generacin :i) escribir_generacin :P ] end 2.3 Enunciado equivalente: El problema del viajante. Un viajante debe visitar 8 ciudades (en general, n), comunicadas todas entre si, una sola vez. Sabiendo la distancia mutua entre ellas, cul es el recorrido ptimo?

3. CUERDAS AL AZAR SOBRE UN RECINTO PLANO CONVEXO


3.1 Enunciado

Dado un recinto plano convexo, como un crculo, un cuadrado, un polgono regular, generamos un cuerda al azar en dicho recinto. Cul ser la longitud media de dicha cuerda? 3.2 Bsqueda de soluciones Para apostar por una longitud media deberemos calcular tambin la desviacin tpica.

Luis Santal, utilizando los poderosos mtodos de la Geometra Integral y Probabilidad Geomtrica (1976) calcul la media de la longitud s de las cuerdas sobre un recinto convexo y acotado de rea F y permetro L: Media = E(s)=(ver figura en Eliseo Borrs Veses. La buena sombra) Sin explicitar la dispersin de la variable s. Aqu vamos a limitarnos a dos recintos: un crculo y un cuadrado. 3.2.1 Recinto circular Simulacin de una cuerda al azar r = Ru , a = 2pu , siendo u y u sendos nmeros aleatorios uniformes en el intervalo [0, 1). 3.2.2 Programa LOGO to num_alea ; devuelve un nmero aleatorio entre 0 y 1 output (random 10000)/10000 end to recta :d :ang ; dibuja la recta cuya distancia al origen es d, ; formando d un ngulo ang con eje x rt :ang pu fd :d rt 90 pd fd 150 bk 300 fd 150 pu lt 90 bk :d lt :ang pd end to cuerda_azar_circulo :r ; genera una recta al azar en el crculo de radio r (local "dist "ang "long) make "dist :r*num_alea make "ang 360*num_alea recta :dist :ang make "long 2*sqrt (:r*:r-:dist*:dist) make "sum1 :sum1+:long make "sum2 :sum2+(:long*:long) end to distribucion_long_cuerdas_circulo :r :n ; calcula la media y la desviacin tpica de la longitud de ; las cuerdas al azar sobre un crculo, despus de n pruebas (local "sum1 "sum2) make "sum1 0 make "sum2 0 setpencolor [255 0 0] setpensize [3 3] circle :r setpencolor [0 0 0] setpensize [1 1] repeat :n[cuerda_azar_circulo :r] print word "media= (form :sum1/:n 5 2) print sentence [desviacin tpica=]~ (form sqrt (:sum2/:n-:sum1*:sum1/(:n*:n)) 5 2) end 3. 2.3 Recinto cuadrado
1 2 1 2

Simulacin de una cuerda al azar Igual que en el caso del crculo, eliminando los valores de r y a que dan rectas que no cortan al cuadrado, es decir tales que : (ver figura en Eliseo Borrs Veses. La buena sombra) Pero tambin podemos realizar la simulacin generando dos puntos al azar (x1, y1) y (x2, y2): xi = -L +2Lui, yi = -L +2Lvi, i=1, 2 siendo ui y vi nmeros aleatorios uniformes en el intervalo [0, 1). 3.2.4 Programa LOGO to cuadrado :l pu setxy -:l -:l pd repeat 4 [fd 2*:l rt 90] pu setxy 0 0 end to recta1 :x1 :y1 :x2 :y2 (local "t "dx "dy "m "d "ang) make "dx (:x2-:x1) make "dy (:y2-:y1) make "m sqrt (:dx*:dx+:dy*:dy) make "d abs (:dx*:y1-:dy*:x1)/:m make "ang (arctan :dx :dy) recta :d :ang end to cuerda_azar_cuadrado1 :l ; genera una recta al azar por dos puntos en el cuadrado de lado 2*:l (local "x1 "y1 "x2 "y2 "v1 "v2 "P1 "P2 "P3 "P4 "P "long "lista4 "puntos "i "dx "dy) make "x1 -:l+2*:l*num_alea make "x2 -:l+2*:l*num_alea make "y1 -:l+2*:l*num_alea make "y2 -:l+2*:l*num_alea make "v1 :x2-:x1 make "v2 :y2-:y1 recta1 :x1 :y1 :x2 :y2 test 0=:v1 iftrue [make "P1 list :x1 :l make "P2 list :x1 -:l] iffalse [make "P1 list :l :y1+:v2*(:l-:x1)/:v1 make "P2 list -:l :y1-:v2*(:l+:x1)/:v1] test 0=:v2 iftrue [make "P3 list :l :y1 make "P4 list -:l :y1] iffalse [make "P3 list :x1+:v1*(:l-:y1)/:v2 :l~ make "P4 list :x1-:v1*(:l+:y1)/:v2 -:l] make "lista4 (list :P1 :P2 :P3 :P4) make "puntos [ ] for [i 1 4 1]~ [ make "P item :i :lista4 if not (or :l<abs item 1 :P :l<abs item 2 :P)~ [make "puntos fput :P :puntos] ] make "P1 first :puntos make "P2 last :puntos make "dx ((first :P1) - (first :P2)) make "dy ((last :P1) - (last :P2)) make "long sqrt (:dx*:dx+:dy*:dy) make "sum1 :sum1+:long

make "sum2 :sum2+(:long*:long) end to distribucion_long_cuerdas_cuadrado1 :l :n ; Determinamos las cuerdas por dos puntos al azar. ; calcula la media y la desviacin tpica de la ; longitud de las cuerdas sobre un cuadrado ; de lado 2*l, despus de n pruebas. (local "sum1 "sum2) make "sum1 0 make "sum2 0 setpencolor [255 0 0] setpensize [3 3] cuadrado :l setpencolor [0 0 0] setpensize [1 1] repeat :n[cuerda_azar_cuadrado1 :l] print word "media= (form :sum1/:n 5 2) print sentence [desviacin tpica=] (form sqrt (:sum2/:n-:sum1*:sum1/(:n*:n)) 5 2) end

Vous aimerez peut-être aussi