sábado, 9 de mayo de 2015

Ray-tracing algorithm

CC BY-SA 3.0 Hochgeladen von Withego
El algoritmo Trazador de rayos, más conocido en el argot técnico como "Ray-tracing", es un método de generación de imágenes tridimensionales con gran realismo, cuyo principio de  funcionamiento es el mismo que el producido por la luz natural. Mediante la ecuación de la línea recta que describe un rayo de luz que incide sobre una superficie es posible determinar las características físicas del objeto como el color, rugosidad, brillo y efectos como reflexión, refracción, absorción o fluorescencia. Así mismo, mediante ecuaciones similares a las  anteriores es posible definir la proyección de las sombras de cada objeto sobre una determinada superficie. Dicho algoritmo fue propuesto inicialmente por Turner Whitted en 1979, pero ya estaba basado en la técnica gráfica de determinación de superficies visibles de Arthur Appel denominado Ray Casting (1968).

Figura 1. Esquema básico del Ray-tracing. Henrik GFDL.






Como se muestra en la figura 1, la clave consiste en generar un rayo por cada elemento discreto del plano perpendicular al vector director existente entre la cámara y la esfera. Dicho de otro modo, es necesario determinar la intersección de cada rayo que parte del píxel del plano orientado por la cámara con la esfera. De esta forma podríamos definir la siguiente ecuación de la línea recta en paramétricas:

\[ r \equiv \begin{cases}x = x_0 + v_x t \\ y = y_0 + v_y t \\ z = z_0 + v_z t\end{cases} \]
 y la ecuación de la esfera en forma implícita:
 \[ (x - x_cx)^2 + (y-c_y)^2 + (z - c_z)^2 - R^2 = 0 \]

debemos sustituir la ecuación de la línea recta en la ecuación anterior, pero para ello es necesario utilizar la ecuación vectorial de la recta en la forma:

\[ p(t) = o + td \]

donde o equivaldría a un punto de la recta, por ejemplo (2,1,3), y d a su vector director, por ejemplo (7,2,-5).

Una vez obtenida la ecuación en forma vectorial procedemos a la sustitución en la ecuación de la esfera:

\[ (p - c) \cdot (p - c) - R^2 = 0 \]
Por lo tanto, cualquier punto p que satisfaga esta ecuación se encuentra en la esfera:
\[ (o  + td - c) \cdot ( o + td -c ) - R^2 = 0 \]
Simplificando tenemos que:
\[ ( d \cdot d) t^2 + 2d\cdot(o -c)t + (o-c)\cdot(o-c)-R^2=0 \]
De esta ecuación todo es conocido excepto el parámetro t, por lo que despejaremos la ecuación cuadrática del tipo:
\[ At^2 + Bt + C = 0\]
Cuya solución es:
\[ t = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A}  \]
Donde obtenemos el discriminante: \[\Delta = B^2 - 4AC \] que nos indicará el número de soluciones de la ecuación. Si el discriminante es negativo, la raíz cuadrada es imaginaria y no existe intersección entre la esfera y la línea. Si el discriminante es positivo, existen dos soluciones: una donde el rayo entra en la esfera y otra donde el rayo abandona la esfera. Si el discriminante es 0, indica que el rayo impacta únicamente en un punto.

A partir del valor de t podemos determinar el lugar de colisión del rayo con la esfera mediante su sustitución en la ecuación de la recta.
 \[ t = \frac{-d \cdot (o-c)\pm\sqrt{(d \cdot (o-c))^2 - (d \cdot d)((o-c) \cdot (o-c)-R^2)}}{(d \cdot d)} \]

El algoritmo de "renderizado" tendría por tanto la siguiente forma:
Vector3 dir(0, 0, -1); // Vector director del rayo
Image im(500, 500); // Imagen de destino
// Itera sobre los píxeles de la superficie discreta
for (int i = 0; i < 500; i++)
   for (int j = 0; j < 500; j++)
   {
      tmax = 100000.Of;
      is_a_hit = false;
      Ray r(Vector3(i, j, 0), dir); // Rayo
      // itera sobre la lista de objetos
      for(int k = 0; k < objetos.size(); k++)
         if (objetos[k].hit(r, .00001f, tmax, rec)) 
         {
           tmax = rec.t;
           is_a_hit = true;
         }
         if (is_a_hit)
             im.set(i, j, rec.color); // Color del objeto
          else
             im.set(i, j, rgb(.2, .2, .2)); // Color de fondo
    }

im.writeImage();

donde rec es una estructura de datos que almacena información sobre la colisión: parámetro t, color, etc. Para la información del color se utilizan valores normalizados, es decir, comprendidos entre [0,1].

Finalmente, cabe decir que las desventajas de la técnica de Trazado de rayos es la dificultad para generar los fotogramas o frames por segundo en tiempo real eficiente en el contexto de la aplicación; aunque gracias a las nuevas tarjetas y GPU multinúcleo y los pipelines gráficos programables mediante shaders es posible alcanzar un nivel óptimo de frames (FPS). 

Según Wikipedia (1) «El algoritmo básico de trazado de rayos fue mejorado por Robert Cook (1985) para simular otros efectos en las imágenes mediante el muestreo estocástico usando un método de Montecarlo; entre estos efectos podemos citar el desenfoque por movimiento (blur motion), la profundidad de campo o el submuestreo para eliminar efectos de aliasing en la imagen resultante.
En la actualidad, el algoritmo de trazado de rayos es la base de otros algoritmos más complejos para síntesis de imágenes (mapeado de fotones, Metropolis, entre otros) que son capaces de simular efectos de iluminación global complejos como la mezcla de colores (color blending) o las cáusticas»

Fuentes bibliográficas:
  • Matemáticas I - Ed. Edelvives.
  • Whitted T. (1979) An improved illumination model for shaded display. Proceedings of the 6th annual conference on Computer Graphics and Interactive Techniques.
  • Realistic Ray-tracing. Pete Shirley y R. Keith Morley. Ed. A K Peters.
  • http://es.wikipedia.org/wiki/Trazado_de_rayos (1).


jueves, 30 de abril de 2015

Se necesitan articulistas

Pete O'Shea - Creative Commons

Estimados compañeros/as: 

Desde el blog de la Escuela de Ingeniería Informática de la UNED os invitamos a colaborar en este medio de divulgación de contenidos de profundidad científico-técnica aplicados al campo de la Informática. Si estáis interesados/as en escribir vuestro propio artículo técnico, podéis enviar la publicación en fichero de texto plano, LaTeX, OpenOffice o Word, junto con las imágenes en una carpeta aparte a la siguiente dirección: etsiiuned@gmail.com. Adicionalmente, y si os interesa la colaboración más frecuente, puedo habilitaros una cuenta de administrador en Blogger.

Nota: Se mantendrá el anonimato del autor/a siempre que así lo desee.

Os esperamos ;-)

El administrador.

miércoles, 14 de enero de 2015

Curso 0 de matemáticas

http://pixabay.com/
Tanto para los que acceden a la Universidad desde Bachillerato/COU científico-técnico, con selectividad, como los que lo hacen desde la selectividad UNED, los conocimientos de matemáticas necesarios para abordar adecuadamente el transcurso de los estudios de Ingeniería Informática e Ingeniería TIC deben ser amplios y bien consolidados. De esta forma, el dominio de:
  • Expresiones algebraicas
  • Ecuaciones de orden 2, 4 y n
  • Inecuaciones
  • Ecuaciones logarítmicas y exponenciales
  • Combinatoria
  • Funciones en R2 y R3
  • Límites (una variable)
  • Trigonometría
  • Estadística básica
  • Derivadas y sus teoremas (una variable)
  • Integrales (una variable)
  • Números complejos
  • Matrices y determinantes
  • Sistemas de ecuaciones lineales
  • Geometría analítica en R2
  • Geometría euclídea del espacio
  • Cálculo de áreas y volúmenes 
Son esenciales para superar con éxito los contenidos de materias como Fundamentos Físicos, Estadística, Matemáticas, etc. del primer curso de los grados.

Aunque la implantación de los nuevos planes exigidos por Bolonia han causado una merma de las materias relacionadas con las matemáticas y física del primer curso de los nuevos títulos de Informática, la iniciación a la matemática superior sigue teniendo una importancia vital a la hora de comprender las bases de la computación, e incluso sigue siendo fundamental en la investigación de nuevas teorías informáticas.

Por este motivo, y con el fin de facilitar la adquisición y práctica de los principios anteriormente citados, proponemos los siguientes recursos tanto en formato físico como electrónico:
 

domingo, 14 de diciembre de 2014

L-systems

Fractal plant for n = 6 (Wikipedia: ejemplo de sistema-L)


Los Sistemas-L o sistemas de Lindenmayer fueron originalmente desarrollados por el biólogo Aristid Lindenmayer en 1960 con la idea de describir las estructuras ramificadas de las plantas, células y otras formas de la naturaleza. Lindenmayer, en colaboración con Przemyslaw Prusinkiewicz1, consiguieron obtener un conjunto considerable de estructuras originales de vida artificial. A grandes rasgos, estos sistemas consisten en la generación repetida de una gramática semi-Thue basada en la jerarquía de Chomsky; aunque la gran diferencia con ésta última estriba en que todas las variables son reemplazadas en cada paso, no solo una. En este  sentido, una gramática L-system consiste en el reemplazamiento de reglas de producción sobre un conjunto de caracteres (alfabeto), comenzando por un símbolo inicial o axioma. Dichas reglas, aplicadas simultáneamente sobre un alfabeto, generan palabras complejas después de unas cuantas iteraciones. En épocas pasadas, estas frases complejas podían dibujarse en pantalla por medio del lenguaje LOGO, en el que una tortuga que obedecía a comandos gráficos trazaba líneas sobre un dispositivo de vídeo.

Formalmente una gramática de Lindenmayer se puede definir como:

  • Σ es un alfabeto finito
  • A ∈ Σ+ (axioma)
  • R = {(a, b, c) → d | a, c ∈ Σ*, b ∈ Σ, d ⊂ Σ*} 
  • Para cualquier (a, b, c) → d ∈ R, if |d| > 1 el sistema-L es estocastico, y si un a≠λ or c≠λ, el sistema-L es contextual
De aquí se deduce la tupla G = {Σ, A, R}, donde:
  • Σ es un alfabeto de caracteres finito
  • A es el axioma
  • R conjunto de reglas de producción
Un ejemplo de gramática L-system podría ser el del crecimiento de las algas:

Variables : A B
Constantes : ninguna
Axioma : A
Reglas : (A → AB), (B → A)
la cual produce las siguientes frases:
n=0 : A → AB
n=1 : AB → ABA
n=2 : ABA → ABAAB
n=3 : ABAAB → ABAABABA

Otra posibilidad es usar producciones estocásticas, donde la selección de una regla de producción dependiendo de ciertas probabilidades y variaciones estocásticas generan una gran irregularidad sobre la forma obtenida. Esta característica se puede conseguir gracias a las funciones random asociadas con números aleatorios y disponibles en muchas librerías matemáticas de programación.

Un ejemplo de esta gramática estocástica podría ser la siguiente:

\[ F =\begin{cases}
 \xrightarrow{0.95}  & F [+F] [<F] F [-F] F\\
\xrightarrow{0.05} &   \lambda
\end{cases} \]

donde se interpreta que:
  • F es dibujar hacia delante
  • f salto hacia delante sin dibujar
  • + giro a la izquierda de α°
  •  -  giro a la derecha en el mismo ángulo
  • < indica el giro de 30° exactos 
  • [ comienzo de ramificación
  • ] fin de ramificación
  • {0.95}  llamada de la regla el 95% de las veces
  • {0.05} llamada de la regla el 5% de las veces para podar (λ)
Una situación típica acaecida en la generación de sistemas-L surge cuando es necesario incluir información sensible al contexto para generar reglas de producción, debido principalmente a la detección de colisiones y compartición del espacio físico sobre el que dibujar. En concreto, para resolver estas situaciones se recurre a estructuras de datos que mantienen información relativa al control de producciones.

Un ejemplo clásico de sistema-L, muy acorde con esta época del año ;-), es el famoso copo de nieve de Koch:

Construcción del Copo de Koch
Copo de nieve de Koch (Wikipedia)



Que como sistema Lindenmayer tiene la siguiente estructura:

Alfabeto: F
Constantes: +, -
Axioma: F++F++F
Reglas de producción: F → F−F++F−F

Con el fin de ilustrar con más claridad las ideas aquí expuestas, proponemos la aplicación en línea http://www.kevs3d.co.uk/dev/lsystems/ para que usted mismo pueda ejercitarse en el diseño de estas bellas estructuras.


(1) P. Prusinkiewicz and A. Lindenmayer (1990) The Algorithmic Beauty of Plants, Springer-Verlag, New York.

Referencias:
  • http://www.jflap.org/tutorial/lsystem/index.html
  • http://en.wikipedia.org/wiki/L-system
  • Huw Jones (2001). Computer Graphics through key mathematics. Springer-Verlag.

miércoles, 12 de noviembre de 2014

Ética Informática


Brian Jepson (Creative Commons)

La ética como disciplina filosófica nace en la Antigua Grecia con los filósofos presocráticos y sobre todos con los sofistas, cuyas reflexiones versaban sobre el bien y el mal. Fue finalmente con Sócrates cuando se inicia esta rama de la filosofía, basándose en la forma de conseguir la felicidad por medio de la educación, el conocimiento y la virtud. Sin embargo, para su discípulo Platón, el sustento de la ética residía en la idea del bien, la cual formaba parte esencial de la realidad y emanaba a todos los aspectos de la persona (ética personal) y de la sociedad o polis (ética política). El conocimiento de esta realidad y el fomento de la virtud auspiciaban el sentido de la justicia, la verdad y la felicidad. Posteriormente, Aristóteles consideró en su tratado Ética nicomáquea que toda premisa del hombre es buscar la felicidad y para ello es necesario que éste cumpla la función que le corresponde: excelencia o virtud, que definía como la capacidad de pensar, o lo que es lo mismo, el ejercicio de razonar. El fin último de la vida es ser autosuficiente. El bien supremo del hombre deberá consistir en algún tipo de actividad donde pueda cumplir adecuadamente su función. Todos tenemos una misión que cumplir en la comunidad y nuestro deber moral es desempeñar nuestro papel en la polis. El estudio de la ética y la política lo llevó finalmente a descubrir el logos (la palabra, la razón), y de ahí a una de sus grandes aportaciones a la filosofía: la lógica.1

Los filósofos helenísticos estoicos basaron su ética en la vida en virtud y con moderación, mientras que los epicúreos lo fundamentaban en la búsqueda del placer (hedonismo).

En el siglo III d.C., en plena antigüedad tardía, San Agustín sentaría un precedente en la filosofía con sus teorías neoplatónicas que perdurarían durante toda la Edad Media.

No fue hasta la Baja Edad Media cuando los filósofos escolásticos como Guillermo de Ockham o Santo Tomás de Aquino basaron su ética en los principios cristianos unidos a la filosofía aristotélica. Para ello era necesario ejercitar las virtudes cardinales  (Prudencia, Justicia, Fortaleza y Templanza) y las virtudes teologales: Fe, Esperanza y Caridad. Así mismo, Santo Tomás armonizó el eterno debate entre Fe y Razón.

En el siglo XVII el filósofo Thomas Hobbes relacionó la ética con la política, mientras que para Spinoza estaría regida según el orden geométrico, ya que el hombre pertenece a la Naturaleza y por tanto sus acciones deben estar en concordancia con las leyes del Cosmos, es decir, las leyes de la Naturaleza, a las que el hombre se encuentra sometido y le impide ser completamente libre.

Durante los tiempos de la Ilustración la ética se basaría principalmente en el racionalismo laico y en la división de poderes (Montesquieu) y el Contrato Social (Rousseau). 

Emmanuel Kant fue el gran propulsor de la ética en la época moderna, al afirmar que su esencia se basaba en la moral del deber (deontología) y no se orientaba a buscar únicamente el interés o la felicidad, de modo que el bien moral se lograba por medio de la buena voluntad del ser humano. Por tanto, la moralidad de una acción no debe ser juzgada por sus consecuencias sino por su motivación ética1. Posteriormente, Schopenhauer postuló su ética en la voluntad y en la moral intuitiva, mientras que Kierkegaard centró su filosofía en la subjetividad y por tanto las decisiones éticas radicarían en el propio individuo.

En el siglo XIX destacaron las ideas de Karl Marx que a través del Manifiesto comunista expuso que, para alcanzar una sociedad justa, era necesaria la lucha de clases. Es la época del utilitarismo. Por su parte, para Nietzsche el concepto de moral es nefasto para la humanidad, contraponiendo el nihilismo a la ética. Superado el nihilismo el ser humano puede llegar a ser superhombre y prescindir de la moral y la religión 1.

La ética del siglo XX ha conocido grandes aportes basados en el vitalismo y el existencialismo (Jean-Paul Sartre) los cuales desarrollan el sentido de la opción y de la responsabilidad.

Los últimos movimiento ideológicos de la ética pertenecientes a finales del siglo XX y principios del XXI recaen en el pragmatismo, el republicanismo y el comunitarismo. Este último critica el liberalismo por considerar que las relaciones humanas únicamente deben estrecharse por interés y no por lazos culturales, sociales, históricos y de sangre. 

En el año 2011 el autor Stéphane Hessel publica el libro ¡Indignaos! donde apela a los jóvenes a comprometerse y reaccionar contra un mundo injusto, corrupto y dominado por los intereses especulativos de las altas esferas financieras. En España dio lugar al movimiento 15-M, más conocido como el de "Los indignados".


Ética vs. moral

La ética y la moral tienen puntos en común en sus definiciones etimológicas, así, moral proviene de la expresión latina moralis, que derivaba de mos y significaba costumbre, mientras que ética proviene del griego êthos (ἦθος) y significa estancia, lugar donde se habita. Aristóteles afinó el significado de la palabra griega: manera de ser, carácter. De esta definición se desprende que una persona puede moldear o forjar su forma de ser o carácter (êthos) mediante las virtudes.

La diferencia entre ambas estriba en que la moral se vive en el campo cultural, en las costumbres, en la religión y en las normas convencionales de conducta transmitidas de generación a generación; la ética es universal, no circunscrita a cultura concreta alguna, y se basa en la siguiente pregunta: ¿por qué debo hacer lo que debo?, es decir, consiste en reflexionar racionalmente sobre lo que está bien y lo que está mal y dejarse guiar por estos principios, sin presión externa alguna. En consecuencia, se trata de una moral sobre la moral o metamoral, de ahí que José Luis López Aranguren llama a la ética moral pensada y a la moral, moral vivida

Ética informática

El auge de las nuevas tecnologías presupone nuevos desafíos en la cuestiones anteriormente citadas y estudiadas a lo largo de la historia. Es por ello por lo que actualmente el concepto de "ética informática" responde a cuestiones como la seguridad, la privacidad, la propiedad intelectual, la pornografía infantil, el ciberterrorimo, etc. y las cuestiones relacionadas con la deontología profesional de ingeniero informático.

Con el fin de conocer mejor los fundamentos de esta rama de la filosofía, la alumna María José Carretero Gutiérrez  de la Universidad de Málaga ha editado un libro en HTML y JavaScript sobre esta materia, presentado de una manera elegante y muy didáctica:

(1) Libro Web sobre Ética Informática:

http://www.lcc.uma.es/~ppgg/PFC/etica/etica_informatica/portada.html (©)

DERECHOS de AUTOR: El copyright de todos estos programas pertenecen a el autor y director o directores de los mismos. Su utilización es libre pero queda totalmente prohibida su venta o comercialización. Su difusión debe siempre ir acompañada de este aviso legal de copyright. El código fuente (si se ofrece) puede ser modificado pero debe informarse al propietario del copyright de dichas modificaciones.

Otros libros y referencias del artículo:

Ética sin moral. Adela Cortina.

Ética y desarrollo profesional.  Lupe Bohorques.

La metafísica de las costumbres. Immanuel Kant.

Ética para náufragos. José Antonio Marina.

Ética de urgencia. Fernando Savater.

jueves, 1 de mayo de 2014

Isometric engine

Los videojuegos en perspectiva isométrica tuvieron su auge en la era de los años ochenta con títulos como "Knight Lore"1, "Head over Hells" o "La Abadía del Crimen". Con esta técnica se consiguió crear sensación de tridimensionalidad en plataformas 8-bits donde aún no era posible soportar complejos cálculos geométricos debido a su poca memoria y velocidad de procesador. En esta perspectiva, los ejes (x, y, z) guardan una relación equidistante de 120º, de ahí su denominación.

Hoy comenzamos la explicación de esta técnica de representación gráfica introduciendo los conceptos clave detallados en el tutorial de Juwal Bose en la Web de creadores multimedia de tuts+. En líneas generales, la construcción de un motor en perspectiva isométrica consiste básicamente en mantener una estructura de datos en forma de matriz donde almacenar los identificadores del tipo de objeto ("tile") en pantalla. Por ejemplo, si suponemos la siguiente pantalla de un nivel de un juego en dicha representación:

Pantalla de Spindizzy (emulado con CPCBox)

 y si consideramos los valores de 0 a 10 para los diferentes "tiles":
  • 0 Suelo
  • 1 Muro
  • 2,3 Rampa A
  • 4,5 Rampa B
  • 6 Diamante
  • 7 Flecha Norte
  • 8 Flecha Sur
  • 9 Flecha Oeste
  • 10 Flecha Este 
  • -1 Nada
Obtendríamos un array 2D para la pantalla anterior con la siguiente estructura:

Capa 1:
 [[1,1,1,4,5,1,1,1],
 [1,6,0,9,9,0,0,1],
 [1,0,0,0,0,0,0,1],
 [2,8,0,0,0,0,7,2],
 [3,8,0,0,0,0,7,3],
 [1,0,0,0,0,0,0,1],
 [1,0,0,0,10,0,0,1],
 [1,0,0,0,10,0,0,1]]
Capa 2:
 [[-1,-1,-1,-1,-1,-1,-1,6],
 [-1,-1,-1,-1,-1,-1,-1,-1],
 [-1,-1,-1,-1,-1,-1,-1,-1],
 [-1,-1,-1,-1,-1,-1,-1,-1],
 [-1,-1,-1,-1,-1,-1,-1,-1],
 [-1,-1,-1,-1,-1,-1,-1,-1],
 [-1,-1,-1,-1,-1,-1,-1,-1],
 [-1,-1,-1,-1,-1,-1,-1,-1]]
Podríamos representar una pantalla con la siguiente rutina:
for (i = 0 hasta total filas)
 for (j = 0 hasta total columnas)
  x = j * ancho tile 
  y = i * alto tile 
  tipoTile = levelData[i][j]
  posicionaTile(tipoTile, x, y)
Es posible localizar un punto cartesiano en la perspectiva isométrica mediante la función:

//Conversión de ejes cartesianos a isométrica:
isoX = cartX - cartY;
isoY = (cartX + cartY) / 2;
donde isoX e isoY son las coordenadas en perspectiva isométrica, mientras que cartX y cartY especifican las posiciones cartesianas en el plano 2D.

De forma similar se puede aplicar la transformación inversa:

// Conversión a ejes cartesianos
cartX = (2 * isoY + isoX) / 2;
cartY = (2 * isoY - isoX) / 2;

También es posible posicionar un objeto numerando la cuadrícula o grid de la pantalla con la posición (0,0) como eje de coordenadas, es decir, el centro de la pantalla estaría en (0,0).

GPL by Cburnett

De esta forma podemos posicionar un determinado objeto isométrico en el centro de su celda con la siguiente rutina:

screenX = (isoX - isoY) * mitadAncho;
screenY = (isoX + isoY) * mitadAlto; 
Aunque esta posición nos dará la esquina de la parte superior en coordenadas de pantalla. Para obtener las coordenadas centrales de la casilla será necesario sumar un offset:
 
screenX = ((isoX - isoY) * mitadAncho) + screenOrigenOffsetX;
screenY = ((isoX + isoY) * mitadAlto) + mitadAlto + screenOrigenOffsetY;
Finalmente para renderizar múltiples objetos en pantalla, es decir, todo el escenario, es preciso comenzar a dibujar desde atrás hacia delante (en orden de screenY) de la lista de objetos, pues de lo contrario podríamos tener algún efecto indeseable de overlapping.

Fuente:
(1) Véase Filmation.

jueves, 3 de abril de 2014

Redes de Hopfield

Las redes de Hopfield,  ―llamadas así en honor a su inventor John Hopfield―, son un tipo de red neuronal basadas en aprendizaje no supervisado de tipo hebbiano, es decir,  que a diferencia de las redes neuronales del tipo back-propagation feed-forward, no necesitan de un entrenamiento previo para especificar cuál es la respuesta correcta para un conjunto de patrones. 

En general, las redes de Hopfield recrean con más precisión el modelo natural del cerebro humano e imita en cierto modo la forma de procesar del  neocórtex, que parece almacenar los recuerdos usando una memoria asociativa. Por ejemplo, escuchar una canción de nuestra infancia puede evocar un recuerdo que permanece latente en nuestro inconsciente. Estos recuerdos pueden no estar muy claros o no ser muy exactos, de tal manera que, aunque permanezcan distorsionados, el cerebro tiende a recomponerlos. Es como si distinguiéramos a una persona a la que no hemos visto durante años por alguno de sus rasgos actuales.

Las redes de Hopfield tienen una gran aplicación para el reconocimiento óptico de caracteres (OCR) y para los captcha (sistemas que evitan que agentes software suplanten a humanos en formularios de registro Webs).

 
 ←
 (Hopfield)
Fuente:  Bashir Magomedov (CodeProject GPL3)

La arquitectura de las redes de hopfield se basa en una red monocapa con N neuronas cuyos valores de salida son binarios: 0/1 ó -1/+1. Se puede modelar una red de hopfield como un grafo no dirigido y completamente conectado, en donde cada nodo es una neurona sin una relación reflexiva y las aristas entre neuronas los pesos de entrada a cada una de ellas.

Las salidas (para un caso típico de implementación) se calculan como:

\[ a_i =\begin{cases}1 \hspace{1cm} si& \sum_j w_{ij}s_j > \phi_i \\-1 & \text{en otro caso}\end{cases} \]

y donde:
  • wij es el peso de la conexión de la neurona j con la i.  wii = 0  y wji = wij
  • sj es el estado de la neurona j. 
  • Φ es el umbral de activación de la neurona i.
de esta forma la función de activación se representa como:




Fuente: Wikipedia



Hopfield demostró que se podía definir una función de energía para cada posible patrón de activación o estado de la red: \[ Energía = -\frac12\sum_{i,j}{w_{ij}{s_i}{s_j}}+\sum_i{\theta_i\ s_i} \] donde este valor tiende a converger a un mínimo local para un estado estable de la red.

Para entender mejor los mecanismos matemáticos que hacen posible el reconocimiento de patrones con las redes de hopfield supongamos que tenemos los siguientes patrones de entrenamiento:
\[ A = \begin{bmatrix}1 & 0\\1 & 0 \end{bmatrix}  B = \begin{bmatrix}0 & 1\\0 & 1\end{bmatrix}   C = \begin{bmatrix}1 & 0\\0 & 1\end{bmatrix} \]
y queremos reconocer los siguientes patrones:
\[X= \begin{bmatrix}1 & 0\\0 & 1\end{bmatrix}   e   Y =\begin{bmatrix}0 & 1\\ 1 & 0\end{bmatrix}\]
  • En primer lugar obtenemos los vectores escalados en el rango +1/-1 que utilizando la fórmula (2A-1),(2B-1) y (2C-1) resultan: \[ A= (1,0,1,0)    B= (0,1,0,1)   C=(1,0,0,1) \\E_1 = (1,-1,1,-1)  \\E_2 = (-1,1,-1,1)   y   \\E_3 = (1,-1,-1,1) \]
  • En segundo lugar obtenemos los pesos: 
    • \[T_1 = \left[\begin{array}{rr} 1\\ -1\\ 1\\ -1\end{array}\right]\begin{bmatrix}1&-1&1&-1\end{bmatrix} - I=  \left[\begin{array}{rr}1&-1& 1 &-1\\-1& 1&-1& 1\\ 1&-1& 1&- 1 \\ -1 & 1& -1 & 1\end{array}\right]   -   I =\\ \left[\begin{array}{rr}0 & -1 & 1 & -1 \\ -1& 0 &-1 &1 \\ 1& -1 &0 &-1 \\ -1& 1 &-1& 0\end{array}\right]\]
    • \[T_2 = \left[\begin{array}{rr}-1 \\ 1 \\ -1 \\ 1\end{array}\right] \begin{bmatrix}-1&1&-1&1\end{bmatrix} - I=  \left[\begin{array}{rr}1& -1 & 1 & -1\\ -1 & 1 & -1 &1 \\ 1& -1& 1 &- 1 \\ -1 &1& -1 &1\end{array}\right]   -   I =\\ \left[\begin{array}{rr}0 & -1 & 1 & -1 \\ -1& 0 &-1 &1 \\ 1& -1 &0 &-1 \\ -1& 1 &-1& 0\end{array}\right]\]
    • \[T_3 = \left[\begin{array}{rr}1 \\ -1 \\ -1 \\ 1\end{array}\right] \begin{bmatrix}1&-1&-1&1\end{bmatrix} - I=  \left[\begin{array}{rr}1 & -1 & -1 & 1 \\ -1 & 1 & 1 &-1 \\ -1& 1& 1 &- 1 \\ 1 &-1& -1 &1\end{array}\right]   -   I =\\ \left[\begin{array}{rr}0 & -1 & -1 & 1 \\ -1& 0 &1 &-1 \\ -1& 1 &0 &-1 \\ 1& -1 &-1& 0\end{array}\right]\] 
  • A continuación se calcula la matriz general de pesos: \[T = T_1 + T_2 + T_3 = \left[\begin{array}{rr}0 & -3 & 1 & -1 \\ -3 & 0 & -1 &1 \\ 1& -1& 0 &- 3 \\ -1 &1& -3 &0\end{array}\right]  \] 
  • En el caso del patrón X se procede a escalarlo en valores -1/+1 : \[ E_3 = (1,-1,-1,1)\], y, determinando \[S = E_3\], es decir, \[ S_1 = 1; S_2 = -1; S_3 = -1 y  S_4 = 1 \] 
    • Primeramente obtenemos la energía: \[Energía = -\frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N}T_{ij}S_iS_j = -\frac{1}{2}(0+3-1-1\\+3+0-1-1-1-1+0+3-1-1+3+0) = -2 \] 
    • Y aplicando el algoritmo iterativo...
    •  Iteración 1:
      • \[ S = E_3T = \begin{bmatrix}1 & -1 & -1 & 1\end{bmatrix} \left[\begin{array}{rr}0 & -3 & 1 & -1 \\ -3 & 0 & -1 & 1 \\ 1 & -1 & 0 & -3 \\ -1 & 1 & -3 & 0\end{array}\right] = \\ \begin{bmatrix}1 & -1 & -1 & 1\end{bmatrix} \]
      • La salida resulta ser la misma que la entrada así como la energía, por lo que el patrón queda reconocido al 100%. 
  • En el caso del patrón Y sabemos que \[ E = (-1,1,1,-1) \]
  • El proceso se sintetiza entonces aplicando el algoritmmo iterativo:
    • Iteración 1:
      • \[ S = ET = \begin{bmatrix}-1 &1 & 1& -1\end{bmatrix}\left[\begin{array}{rr}0 & -3 & 1 & -1 \\ -3 & 0 & -1 & 1 \\ 1 & -1 & 0 & -3 \\ -1 & 1 & -3 & 0\end{array}\right] = \\ \begin{bmatrix}-1 & 1 & 1 & -1\end{bmatrix}\]
      • Obteniéndose en este caso de nuevo la convergencia en la primera iteración, por lo que queda también reconocido al 100%
--------

Fuentes:
(1) Gonzalo Pajares Martinsanz, Jesús M. de la Cruz García. Ejercicios resueltos de Visión por Computador. Editorial Ra-ma 2007.
(2) A. García Serrano. Inteligencia Artificial. Editorial RC 2012.

viernes, 14 de marzo de 2014

Planificación automática

Fuente: Dana S. Nau - University of Maryland (CC-BY-NC-SA)

La planificación automática es una disciplina de la Inteligencia Artificial que nos permite resolver problemas complejos mediante ordenador, sin el cual se tardaría una cantidad ingente de tiempo en obtener una solución. 
Los planificadores actuales permiten diseñar estrategias para un conjunto extenso de dominios como son:

  • Diseño de planes de negocio en empresas.
  • Diseño de estrategias de defensa del cliente en despachos de abogados.
  • Organización de espacios habitables y seguros en arquitectura.
  • Mejora de la conectividad en redes de comunicaciones.
  • Planes estratégicos militares.
  • Logística de transportes en el comercio.
  • Inteligencia artificial en robots.
  • etc.

Los planificadores clásicos están basados en algoritmos de búsqueda heurística (A*, Alfa-beta o Greedy) como por ejemplo STRIPS (STanford Research Institute Problem Solver [Fikes y Nilsson 1971]) en el que se aplica un algoritmo de búsqueda lineal, mientras que los planificadores neoclásicos como graphplan aplican restricciones y optimizaciones en cada estado antes de avanzar al siguiente. Esto hace que su estructura tenga forma de grafo de planes en vez de árbol o grafo acíclico.
Imagen de Graphplan

Otros tipos de planificadores están basados en técnicas más avanzadas como los probabilísticos, los de redes de tareas jerárquicas, los de planificación heurística (HSP y FF)  o los temporales (scheduling).

En general, un problema de planificación dado en lenguajes como STRIPS o PDDL debe contener la siguiente información:
  • Un estado inicial.
  • Un estado final o estados meta.
  • Un conjunto de acciones: precondiciones y postcondiciones.
Así, por ejemplo, para resolver el problema del granjero que debe cruzar un río llevando únicamente en la barca una cabra, una col o un lobo sin que se coman entre ellos al quedarse en la orilla, se formularía de la siguiente manera en formalismo STRIPS:

Estado inicial:  barcaen(a)
                 colocado(lobo,a)
                 colocado(cabra,a)
                 colocado(col,a)
                 vacío

Estado final:

                 colocado(col,b)
                 colocado(lobo,b)
                 colocado(cabra,b)

Acciones:        

mover(inicio,fin):

            pre: embarcado(cabra) ∨
            (colocado(col,inicio) ∧ colocado (cabra,fin)) 

           
            (colocado(cabra,inicio) ∧ colocado(lobo,fin))
                                 
            post:  barcaen(fin) ∧
                  ¬barcaen(inicio)
                                       

embarcar(posicion,animal):
           pre: barcaen(posicion) ∧ 

           colocado(animal, posicion) ∧ (vacio)
           post:   embarcado(animal) ∧
                   ¬colocado(animal,posicion) ∧
                   ¬(vacío)                        
                          
desembarcar(posicion,animal):
            pre: barcaen(posicion) ∧ embarcado(animal)      
            post: colocado(animal,posicion) ∧
                  vacío ∧  ¬embarcado(animal) 


Si ejecutamos el programa en un planificador como SGP, obtendremos el siguiente resultado:

Levels 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
(((EMBARCAR A CABRA)) ((MOVER A B)) ((DESEMBARCAR B CABRA)) ((MOVER B A))((EMBARCAR A LOBO)) ((MOVER A B)) ((DESEMBARCAR B LOBO)) ((EMBARCAR B CABRA))((MOVER B A)) ((DESEMBARCAR A CABRA)) ((EMBARCAR A COL)) ((MOVER A B)) ((DESEMBARCAR B COL)) ((MOVER B A)) ((EMBARCAR A CABRA)) ((MOVER A B))((DESEMBARCAR B CABRA)))

Problema del cruce del río. Videojuego. (http://layton.wikia.com/wiki/Puzzle:Over_the_River)

miércoles, 26 de febrero de 2014

La buena mesa a la Universidad


Fuente: Fundación Dieta Mediterránea

 "La bebida apaga la sed, la comida satisface el hambre; pero el oro no apaga jamás la avaricia. "

Plutarco (d.C. 46-50 - d.C.120), historiador y ensayista griego.

 
Según un estudio de «Hábitos alimentarios y estilos de vida de los universitarios españoles. Patrón de consumo de bebidas fermentadas» la mayoría de los estudiantes sigue una alimentación «aún aparentemente sana»; aunque hay un cierto sesgo hacia una carencia de alimentación variada en lo que respecta a vitaminas y elementos nutricionales básicos (hierro, magnesio, potasio, vitamina A, D y E, así como Cinc y ácido fólico). En este aspecto es relevante el escaso consumo de verduras y cereales en un porcentaje alto de universitarios españoles, lo que implica un desarraigo de la Dieta Mediterránea en un país que siempre ha estado a la cabeza en este tipo de alimentación.

En general, el estudio realizado a una población de veintiuna universidades por la Fundación Española de Nutrición (FEN) y presentado recientemente en Granada, revela una dieta normal en universitarios, con un déficit de nutricional en alimentos base de la pirámide de la dieta sana; pero también pone de relieve que los estudiantes que ingieren moderadamente cerveza (media de medio vaso al día) tienden a un consumo habitual de alimentos saludables.

A modo de conclusión, los estudiantes de la UNED, que generalmente superan la media de 30 años, deben llevar una vida equilibrada: evitar el estrés y la vida sedentaria, realizar ejercicio, caminar o practicar deporte frecuentemente, consumir hidratos de carbono y fruta fresca para conseguir un rendimiento intelectual óptimo. Aunque la vida social se pierde en la mayoría de carreras de la UNED (especialmente ingenierías y ciencias) es saludable frecuentar el contacto con las amistades y la familia al menos una vez por semana. También es recomendable viajar, caminar o hacer senderismo para superar episodios de depresión y estrés. Por último, las actividades culturales como el teatro, el cine y la lectura con base filosófica, pueden ayudar a complementar y equilibrar nuestro alimento intelectual en el cambiante mundo del conocimiento.

Fuentes:



sábado, 15 de febrero de 2014

Complex networks

Dolphin network of Lusseau - Copyright © 2014 National Academy of Sciences.

Quedan lejos las teorías que se fundamentan en el análisis y comprensión del funcionamiento de las cosas a partir del estudio de sus partes individuales como entes aislados. Mientras escribo en este blog, una tormenta de negociaciones económicas y sociales entre agentes se debaten en las redes digitales de comunicación. La idea de la "aldea global" propuesta por McLuhan (1962) es hoy una realidad con el fenómeno de la globalización. Los individuos se organizan en complejas estructuras virtuales en Internet y los fenómenos culturales atraviesan el orbe en milésimas de segundo. El estudio de las teorías que explican el mundo y el entorno vital como completamente conectado son clave para comprender su impacto global en la biosfera y la hipótesis de Gaia. 

A este respecto, el libro presentado por el científico Ricard Solé:  "Redes complejas: del genoma a Internet" de la editorial Tusquets, plantea cuestiones tan relevantes como la propagación de virus biológicos y digitales en una sociedad cada vez más relacionada, el desciframiento del genoma humano a partir de la idea de un todo relacionado, la evolución de los ecosistemas y las especies, el efecto de la globalización en la biosfera y la economía, el cuerpo humano y el cerebro como red compleja de análisis de información simbólica.

Hagmann P, Cammoun L, Gigandet X, Meuli R, Honey CJ, Wedeen VJ, Sporns O (2008) Mapping the structural core of human cerebral cortex. PLoS Biology Vol. 6, No. 7, e159 (CC-BY)

La obra de Ricard Solé profundiza en el estudio de estas redes y pone de manifiesto una nueva cartografía de la complejidad. A partir del estudio del mapa de Internet, del cerebro o el genoma se han descubierto propiedades universales que subyacen en todas las redes complejas naturales y artificiales. Esto permitirá indagar, en futuras investigaciones, en el misterioso origen de estas intrincadas estructuras.

Nuestra visión del mundo cambia constantemente por el efecto de estas complejas redes artificiales y naturales, en la que nadie está realmente lejos de nadie. En definitiva, la historia de la ciencia atraviesa un hito que podría considerarse como la transición de la investigación de lo individual a lo interrelacionado. En el caso de la informática, el estudio de los sistemas ya no se basa generalmente en las partes de la arquitectura Von Neumann, sino que se tiende a la computación en sistemas cada vez más distribuidos y paralelos. 

   Mapa internacional de cables submarinos de fibra (Creative commons)


viernes, 10 de enero de 2014

La lógica en práctica

Portada 
Fuente:  Editorial Tecnos

El libro que proponemos hoy en esta entrada pretende servir de aplicación práctica a los conocimientos adquiridos en las asignaturas de Lógica de primer curso y Lógica Computacional de cuarto curso. Esta obra le servirá para introducirse en el mundo de la deducción lógica de teoremas, proposiciones y argumentos filosóficos. Su aplicación práctica le será útil para afirmar o refutar lógicamente hechos basados en la vida cotidiana. Además, su praxis en el campo de la programación facilita en gran medida la corrección y verificación de los programas informáticos. 

Este ameno y pedagógico libro incluye un extenso número de ejercicios resueltos de lógica basados en casos reales: fragmentos de textos y conversaciones, que le ayudarán a utilizar intuitivamente la lógica de forma práctica.

Dónde conseguirlo:
http://www.tecnos.es/ficha.php?id=1680107&id_clase=9160

viernes, 3 de enero de 2014

Software médico

Fuente: Wikipedia

“El conocimiento de cualquier cosa, dado que todas las cosas tienen causas, no es adquirido o completo a menos que sea conocido por sus causas.” 

Avicena (x - xi d.C.), médico, filósofo, científico y polímata persa.


Desde el desarrollo en los años 70 del sistema Mycin en la Universidad de Stanford, la aplicación de la informática al campo de la medicina ha ido progresando considerablemente. En sus comienzos, el sistema Mycin consistía en un interfaz de usuario textual donde se interpelaba al médico con preguntas formuladas por un sistema experto programado en Lisp. El proceso consistía en generar, a partir de una base de reglas, una base de hechos y un motor de inferencia, un diagnóstico eficaz de enfermedades infecciosas de la sangre y su correspondiente tratamiento personalizado.

Actualmente, algunos médicos siguen utilizando este potente sistema experto como asistente de sus diagnósticos. Pero lo verdaderamente sorprendente es el avance y la sinergia de la informática y medicina. Como botón de muestra, en nuestro país, decenas de hospitales públicos y privados cuentan con sistemas altamente informatizados de gestión de pacientes, que incluyen generalmente una base de datos con el historial y acceso a imágenes diagnósticas y pruebas médicas.

Asimismo, la aplicación de asistentes software y robots en los quirófanos es una práctica muy habitual en nuestros días. Por ejemplo, en las intervenciones de neurocirugía se utiliza un navegador para identificar lesiones en el cerebro:


En lo que respecta al diagnóstico por imagen generado tanto por Rayos-X como TAC, existe una gran cantidad de software de análisis digital por computador basado en algoritmos de segmentación matemáticos y descripción a través de modelos conexionistas que permiten identificar mejor las lesiones.

La aplicación de la informática en la investigación puntera no es un asunto despreciable, pues el descifrado del mapa del genoma humano ha sido posible, entre otros, gracias al software desarrollado por el Instituto Municipal de Investigaciones Médicas de Barcelona (IMIM):

Mapa del genoma por la aplicación gff2ps / Fuente: http://www.bioinformatics.org/wiki

Finalmente, y si está interesado en el estudio de herramientas software para el tratamiento de enfermedades, puede consultar el repositorio de aplicaciones para resonancia magnética de la Unidad de RM de la Universidad de Santiago de Compostela:


En lo que respecta al software libre y GNU, también existen diferentes soluciones de código abierto y gratuitas que pueden ser útiles en diferentes diagnósticos:


sábado, 28 de diciembre de 2013

Particle systems

Fuente: Irrlicht engine (http://irrlicht.sourceforge.net/)

Desde comienzos de siglo las funcionalidades para sistemas de partículas han sido integradas en la mayor parte de tecnologías gráficas. De este modo las APIs proporcionadas por los SDKs de nVidia o ATI, por ejemplo, extienden la capacidades proporcionadas en el ámbito de DirectX y OpenGL para alcanzar el máximo rendimiento de la GPU.
Los sistemas de partículas consisten en un conjunto de pequeños objetos que emanan de un objeto contenedor denominado emitter. El emitter actúa a modo de fuente generadora de partículas, controlando su posición en el espacio 3D, cantidad de partículas y su movimiento. Cada partícula contiene información de su tiempo de vida (lifespan), el color, la textura, la forma, etc. Además de estos objetos, otro módulo se encarga del comportamiento de la partícula aplicando efectos de gravedad, incluso diferentes tipos de aceleraciones, como una función euleriana o personalizada.

Para ilustrar esta idea, la siguiente imagen muestra un pseudo-diagrama de clases en UML con los diferentes tipos de componentes relacionados con un sistema de partículas:

 
Fuente: wiki/Blender

Como puede apreciarse, el objeto principal de Partícula controla la información de sus objetos de datos y mantiene una referencia al módulo predefinido de comportamiento. Los datos de la partícula se suelen asociar a la textura y sus atributos principales de simulación física (velocidad, aceleración, posición y fuerzas). En lo concerniente a la textura, es posible aplicar diferentes tipos de técnicas de rendering como: Billboards, Halos y Strands (para simular hierba y pelo). En la fase final de renderizado se decide el objeto 3D que representará a la partícula. En este caso se puede optar por simples píxeles, cruces, círculos y Strands; aunque para la representación de la partícula en sistemas de bajo rendimiento se utilizarán casi siempre píxeles.

Adicionalmente se puede añadir un objeto colisionador en la fase de simulación que deberá ser controlado y  redefinido por el módulo de comportamiento. El objeto colisionador puede ser cualquier objeto 3D o una simple superficie.

Finalmente cabe decir que el éxito de los motores de partículas no ha tardado en hacerse notar, pues su repercusión en la sociedad a través de videojuegos, cine y simulación de efectos astrofísicos ha sido sobresaliente.

------
 
Para código fuente pedagógico véase applet en el lenguaje Processing:

http://processing.org/examples/simpleparticlesystem.html

jueves, 12 de diciembre de 2013

Cutting edge design patterns


Fuente: Arbotante de la Catedral de Amiens (Wikipedia)

En 1979 el arquitecto Christopher Alexander publicó un impactante libro conocido como "The Timeless Way of Building" (El modo intemporal de construir), que supuso una mejora en la calidad de la construcción de edificios al introducir una serie de patrones basados principalmente en la arquitectura clásica y en menor medida en la vanguardista. En los años posteriores, Christopher Alexander y sus colegas publicaron el volumen "A Pattern Language" donde se recopilaba todo el conocimiento arquitectónico hasta la fecha.

La repercusión de estos libros se vio reflejado en el mundo de la ingeniería en 1987, cuando los informáticos Ward Cunningham y Kent Beck sorprendidos por el pobre conocimiento que se transmitía a los alumnos de programación orientada a objetos decidieron aplicar los conceptos de Alexander a las técnicas de polimorfismo y herencia de la OOP. Es así como surgen publicaciones exitosas como el libro "Dessign Patterns" del conocido grupo GoF (Gang of Four: Erich Gamma, Richard Helm, Ralph Johnson y John Vlisides) donde se aglutinan los patrones más conocidos hasta 1995. Otros libros como el "Thinking in Patterns" de Bruce Eckel han tenido también bastante repercusión en el mundo de la Ingeniería del Software y Java.


Hoy, los patrones permiten aplicar una posible solución correcta para un problema de diseño dentro de un contexto dado: aplicaciones cliente-servidor (patrón MVC), aplicación gráficas (patrón Command), dispositivos hardware (patrón Observer), bases de datos (patrón Facade), procesadores de texto (patrón Composite), etc. Incluso ya existen patrones de diseño para sistemas masivamente paralelos (MPP) de simulación de sistemas dinámicos (N-Body particle simulation) y análisis de modelos climáticos que pueden ser consultados en la página del departamento de Ingeniería Informática de la Universidad de Illinois:

La importancia de los patrones de diseño y arquitectónicos que propuso Christopher Alexander nos recuerda que a veces tenemos que olvidar la tendencia al desarrollo rápido de aplicaciones y volver a los fundamentos, a las bases iniciales, pues es allí donde se forjan los conocimientos clave para el desarrollo de aplicaciones duraderas y mantenibles en el tiempo.

Finalizamos esta entrada en el blog citando la frase del mítico literato T.S. Eliot, puesto que evoca la relevancia de la utilización de patrones también en Ingeniería Informática y TIC:  «La imaginación, cuando se ve forzada a trabajar dentro de un marco muy estricto, debe realizar el mayor de los esfuerzos, lo que le llevará a producir sus mejores ideas. Cuando se le ofrece una libertad total, probablemente su trabajo resulte deslavazado».

martes, 26 de noviembre de 2013

Novatadas: los rituales degradantes de las universidades presenciales

Fuente: Wikipedia (foto de una novatada de bajo grado)

Erróneamente se ha confundido la novatada con el proceso de iniciación de las sociedades arcaicas y tribus indígenas (rito de paso, léase "El arquetipo de iniciación" - Carl Gustav Jung: "El hombre y sus símbolos", 1964). Muy al contrario de este concepto, las novatadas en las universidades presenciales van mucho más allá de sus bases antropológicas. Si bien es cierto que actualmente no se llega al grado de intensidad alcanzado hace unas décadas, las novatadas no dejan de ser costumbres o rituales de mal gusto. 

La novatada encierra en sí una idea nociva que en general se le asocia con prácticas que implican humillación, acoso, relaciones de dominio-sumisión, abuso, ridiculizaciones, faltas de consideración y de respeto, y actividades peligrosas. Suele ser una práctica habitual realizada a alumnos profanos en los campus universitarios y en colegios mayores en los primeros meses del curso académico (típicamente octubre y noviembre) y está asociada a bromas que los mal llamados "veteranos" obligan a padecer a sus víctimas. La mayoría de las universidades occidentales y adaptadas a la modernidad han adquirido estos hábitos entre sus alumnos de forma alarmante. Si bien es sabido que en los últimos dos años están proliferando las asociaciones y los movimientos de sensibilización social hacia este acuciante problema que puede derivar en muchos casos en marginación y en terapia psíquica y emocional.

En este contexto existen asociaciones como la gallega “No Más Novatadas” que se responsabiliza de sensibilizar a la sociedad en este crucial tema y de recoger denuncias de víctimas en colegios mayores y universidades de todo el país.


También existe una gran repercusión en la prensa a causa de algunos precedentes ya sentados:


«Mano blanda con las novatadas. Los veteranos actúan con total impunidad: una sola sanción en tres años.» El Mundo:

http://apliweb.uned.es/comunicacion/prensa/ficheros_ver.asp?ID=5061010

Finalmente, recordamos que en la UNED nunca han existido novatadas, por lo que es de agradecer la iniciativa histórica de crear las jornadas de acogida y la concienciación al buen clima humano y social en los centros asociados.