Algoritmos Concurrentes y Aplicaciones

38
C AMPUS M EXICALI Programación Concurrente ALGORITMOS CONCURRENTES Y APLICACIONES L.S.C. Carlos C. Hurtado Verdugo Ahumada Duarte Andrés Francisco Ingeniería en Mecatrónica Mexicali, Baja California, a 04 de Diciembre del 2009

description

Research of Algoritmos Concurrentes y Aplicaciones

Transcript of Algoritmos Concurrentes y Aplicaciones

Page 1: Algoritmos Concurrentes y Aplicaciones

CC AA MM PP UU SS MM EE XX II CC AA LL II

Programación Concurrente

ALGORITMOS CONCURRENTES Y APLICACIONES

L.S.C. Carlos C. Hurtado Verdugo

Ahumada Duarte Andrés Francisco

Ingeniería en Mecatrónica

Mexicali, Baja California, a 04 de Diciembre del 2009

Page 2: Algoritmos Concurrentes y Aplicaciones

2

ÍNDICE

Tema Página

Algoritmos de Ordenamiento y Búsqueda 3

Multiplicación de Matrices 6

Algoritmos Numéricos 10

Algoritmos de Grafos 14

Redes Neuronales 20

Algoritmos Genéricos 24

Computación Gráfica 32

Procesamiento de Imágenes 35

Bibliografía 37

Page 3: Algoritmos Concurrentes y Aplicaciones

3

ALGORITMOS DE ORDENAMIENTO Y BÚSQUEDA

En computación y matemáticas un algoritmo de ordenamiento es un algoritmo que

pone elementos de una lista o un vector en una secuencia dada por una relación de

orden, es decir, el resultado de salida ha de ser una permutación —o

reordenamiento— de la entrada que satisfaga la relación de orden dada. Las

relaciones de orden más usadas son el orden numérico y el orden lexicográfico.

Ordenamientos eficientes son importantes para optimizar el uso de otros

algoritmos (como los de búsqueda y fusión) que requieren listas ordenadas para

una ejecución rápida. También es útil para poner datos en forma canónica y para

generar resultados legibles por humanos.

Desde los comienzos de la computación, el problema del ordenamiento ha atraído

gran cantidad de investigación, tal vez debido a la complejidad de resolverlo

eficientemente a pesar de su planteamiento simple y familiar. Por

ejemplo, BubbleSort fue analizado desde 1956. Aunque muchos puedan

considerarlo un problema resuelto, nuevos y útiles algoritmos de ordenamiento se

siguen inventado hasta el día de hoy (por ejemplo, el ordenamiento de

biblioteca se publicó por primera vez en el 2004). Los algoritmos de ordenamiento

son comunes en las clases introductorias a la computación, donde la abundancia de

algoritmos para el problema proporciona una gentil introducción a la variedad de

conceptos núcleo de los algoritmos, como notación de O mayúscula, algoritmos

divide y vencerás, estructuras de datos, análisis de los casos peor, mejor, y

promedio, y límites inferiores.

Page 4: Algoritmos Concurrentes y Aplicaciones

4

Los algoritmos de ordenamiento se pueden clasificar de las siguientes maneras:

La más común es clasificar según el lugar donde se realice la ordenación

Algoritmos de ordenamiento interno: en la memoria del ordenador.

Algoritmos de ordenamiento externo: en un lugar externo como un disco

duro.

Por el tiempo que tardan en realizar la ordenación, dadas entradas ya

ordenadas o inversamente ordenadas:

Algoritmos de ordenación natural: Tarda lo mínimo posible cuando la

entrada está ordenada.

Algoritmos de ordenación no natural: Tarda lo mínimo posible cuando la

entrada está inversamente ordenada.

Por estabilidad: un ordenamiento estable mantiene el orden relativo que tenían

originalmente los elementos con claves iguales. Por ejemplo, si una lista

ordenada por fecha se reordena en orden alfabético con un algoritmo estable,

todos los elementos cuya clave alfabética sea la misma quedarán en orden de

fecha. Otro caso sería cuando no interesan las mayúsculas y minúsculas, pero se

quiere que si una clave aBC estaba antes que AbC, en el resultado ambas claves

aparezcan juntas y en el orden original: aBC, AbC. Cuando los elementos son

indistinguibles (porque cada elemento se ordena por la clave completa) la

estabilidad no interesa. Los algoritmos de ordenamiento que no son estables se

pueden implementar para que sí lo sean. Una manera de hacer esto es

modificar artificialmente la clave de ordenamiento de modo que la posición

original en la lista participe del ordenamiento en caso de coincidencia.

Page 5: Algoritmos Concurrentes y Aplicaciones

5

Los algoritmos se distinguen por las siguientes características:

Complejidad computacional (peor caso, caso promedio y mejor caso) en

términos de n, el tamaño de la lista o arreglo. Para esto se usa el concepto

de orden de una función y se usa la notación O(n). El mejor comportamiento

para ordenar (si no se aprovecha la estructura de las claves) es O(n log n). Los

algoritmos más simples son cuadráticos, es decir O(n²). Los algoritmos que

aprovechan la estructura de las claves de ordenamiento (p. ej. bucket sort)

pueden ordenar en O(kn) donde k es el tamaño del espacio de claves. Como

dicho tamaño es conocido a priori, se puede decir que estos algoritmos tienen

un desempeño lineal, es decir O(n).

Uso de memoria y otros recursos computacionales. También se usa la notación

O(n).

Page 6: Algoritmos Concurrentes y Aplicaciones

6

MULTIPLICACIÓN DE MATRICES

En matemática, la multiplicación o producto de matrices es la operación de multiplicación que se efectúa entre dos matrices, o bien entre una matriz y un escalar. Al igual que la multiplicación aritmética, su definición es instrumental, es decir, viene dada por un algoritmo capaz de resolverla; no obstante, la multiplicación en este contexto se diferencia de la usual, principalmente porque no cumple con la propiedad de conmutatividad.

Multiplicación de una matriz por un vector

Desde el momento que un vector es una matriz con una solo fila o una columna, podemos usar el algoritmo de multiplicación de matrices. Entonces, si el vector B es de la forma n x 1 podemos multiplicarlo por la matriz A (m x n) como A x B; y si el vector A es de la forma 1 x n podemos multiplicarlo por la matriz B (n x m) como A x B.

Multiplicación de matrices

Nociones básicas sobre matrices Algoritmo secuencial Algoritmo paralelo Submatrices Implementación directa Implementación con submatrices Implementación recursiva Algoritmo de Cannon Array sistólico Algoritmo de Fox Algoritmo DNS Mapeo de matrices en procesadores

Page 7: Algoritmos Concurrentes y Aplicaciones

7

Algoritmo secuencial

for (i = 0; i < n; i++) {

for (j = 0; i < n; j++)

c[i][j] = 0

for (k = 0; k < n; k++) {

[i][j] += a[i][k] * b[k][j]

}

}

}

n3 multiplicaciones y n3 sumas O (n3)

Page 8: Algoritmos Concurrentes y Aplicaciones

8

Algoritmo paralelo

Podemos basarnos en el código secuencial, ya que los dos bucles externos son independientes en cada iteración.

Con n procesadores podemos obtener O (n2) Con n2 procesadores O (n) Estas implementaciones son óptimas en coste, ya que O (n3) = n x O (n2) =

n2 x O (n) Estos cálculos no incluyen el coste de las comunicaciones.

Submatrices

Si tenemos muchos menos de n procesadores, cada procesador debe trabajar con un subconjunto de cada una de las matrices submatrices.

Estas submatrices se utilizan como elementos normales, pero teniendo en cuenta que utilizaremos el algoritmo de multiplicación de matrices y de suma de matrices en lugar de la multiplicación y la suma de números implementación recursiva.

Implementación directa

Con n2 procesadores, cada procesador calcula un elemento de C, por lo que necesita una fila de A y una columna de B.

Si usamos submatrices, cada procesador deberá calcular una submatriz de C.

Page 9: Algoritmos Concurrentes y Aplicaciones

9

Paralelización implícita:

#Pragma: for paralelo (a,b compartida de lectura, c compartida de lectura-escritura) for i=0 to n-1 for j=0 to n-1 c[i,j]=0 for k=0 to n-1 c[i,j]=c[i,j]+a[i,k]*b[k,j] endfor endfor endfor Posiblemente mejor usar bloques contiguos para mejor uso de la caché.

Paralelización explícita:

#Pragma: llamada concurrente (for i=0 to p-1) multiplicar (c,a,b,i) multiplicar(c,a,b,i): for j=(i*n)/p to ((i+1)*n)/p-1 for k=0 to n-1 c[j,k]=0 for l=0 to n-1 c[j,k]=c[j,k]+a[j,l]*b[l,k] endfor endfor endfor

Page 10: Algoritmos Concurrentes y Aplicaciones

10

ALGORITMOS NUMÉRICOS

Un algoritmo es un conjunto finito de instrucciones o pasos que sirven para

ejecutar una tarea y/o resolver un problema. De un modo más formal, un algoritmo

es una secuencia finita de operaciones realizables, no ambiguas, cuya ejecución da

una solución de un problema en un tiempo finito.

El término algoritmo no está exclusivamente relacionado con la matemática,

ciencias de la computación o informática. En realidad, en la vida cotidiana

empleamos algoritmos en multitud de ocasiones para resolver diversos problemas.

Algunos ejemplos son el uso de una lavadora (se siguen las instrucciones), pero no

la preparación de una comida (porque no están perfectamente definidos los

pasos).

También existen ejemplos de índole matemática, como el algoritmo de la división

para calcular el cociente de dos números, el algoritmo de Euclides para calcular el

máximo común divisor de dos enteros positivos, o incluso el método de Gauss para

resolver Sistema lineal de ecuaciones.

Un algoritmo numérico es el conjunto de instrucciones ordenadas para resolver un

problema que involucra procesos matemáticos (con calculo de formulas de manera

repetida).

Este tipo de algoritmos no admiten ambigüedades y debe darse cada uno de los

pasos para su solución.

Page 11: Algoritmos Concurrentes y Aplicaciones

11

Se define el concepto de algoritmo numérico. Se presentan varios casos de

problemas numéricos, se dan sus soluciones en forma algorítmica y se agrega en

cada caso una representación en forma de diagrama de flujo.

La noción de algoritmo aparece en numerosas y disímiles situaciones de la vida

cotidiana y es manejada por una gran cantidad de personas, algunas de las cuales

ni tan siquiera conocen su existencia. De manera informal, un algoritmo puede

definirse como una lista de instrucciones mediante las cuales puede llevarse a cabo

un determinado proceso.

Los métodos numéricos permiten resolver problemas obteniendo aproximaciones

para las soluciones mediante algoritmos iterativos. Estos algoritmos reciben el

nombre de algoritmos numéricos.

Las aproximaciones resultan de mucha utilidad cuando las soluciones analíticas o

algebraicas resultan muy difíciles o hasta imposibles de obtener empleando

métodos tradicionales. Los computadores ayudan en gran manera, al facilitar la

programación de los algoritmos basados en iteración. En esta sección se presentan

ejemplos de estos métodos. 1.1 Ejemplo: Cálculo de e mediante serie infinita

Programa que calcula el valor de la constante e, base de los logaritmos neperianos.

Se hace una aproximación empleando la siguiente serie infinita: e = 1 + 1/1! + 1/2!

+ 1/3! + 1/4! +… El cálculo se detiene cuando el valor acumulado de e, no se logra

diferenciar (por la precisión del computador), del valor calculado en la iteración

anterior. Es decir, cuando el siguiente término a sumar es tan pequeño que el

computador lo considera como un cero. El factorial, representado por ! en la serie,

se implementa en el programa mediante una función.

Page 12: Algoritmos Concurrentes y Aplicaciones

12

Una vez que se calcula la aproximación, el programa despliega el valor encontrado,

así como el número de iteraciones que se emplearon para obtenerlo, es decir, la

cantidad de términos de la serie que fue necesario sumar para llegar a la

aproximación.

/*******************************************************************

********

Ejemplo: Calculo de la constante e mediante una serie infinita.

o /

using System;

/** Función que calcula el factorial de su argumento. Tanto el argumento de

* entrada (x) como el valor de retorno son de tipo double. No se hacen

* controles sobre la validez del argumento, cuyo valor debe ser > 0.

* Cualquier valor de entrada 0 o negativo arrojara un resultado de 1.

* Formula del factorial: x! = 1 * 2 * 3 * … * (x-1) * x

*/

public class C Calculate E{

public double iter;

public C Calculate E() { iter = 1; }

private double mFactorial(double x){

double i; // Factor actual de multiplicación: 2, 3, …, x

double fact = 1.0; // Acumulador para el resultado, inicialmente 1

// Ciclo en el que se calcula el factorial: i variara de 2 a x

for (i=2.0; i<=x; i++)

// Se multiplica el acumulado actual por el factor actual (i)

Page 13: Algoritmos Concurrentes y Aplicaciones

13

fact = fact * i;

// Devuelve como valor de retorno el resultado acumulado

return(fact);

}

public double mGetE(){

double e = 1,

eanterior;

do{

eanterior = e;

e += 1/mFactorial(iter);

iter++;

}

while( e != eanterior);

return e;

}

}

Page 14: Algoritmos Concurrentes y Aplicaciones

14

ALGORITMOS DE GRAFOS

Hablando intuitivamente, un grafo es un conjunto de nodos unidos por un

conjunto de líneas o flechas. Por lo general, los nodos son entes de procesamiento

o estructuras que contienen algún tipo de información y las líneas o flechas son

conexiones o relaciones entre estos entes. Si se utilizan flechas para conectar los

nodos decimos que el grafo es dirigido (también llamado digrafo) porque las

relaciones entre los nodos tienen una dirección. En caso contrario el grafo es no

dirigido. En cualquiera de los dos casos, bien sea que se utilicen líneas o flechas, a

estas relaciones se les puede llamar simplemente aristas.

Frecuentemente las aristas también tienen algún tipo de información asociada

(distancia, costo, confiabilidad, etc.), en cuyo caso estamos en presencia de un

grafo pesado.

Las secuencias de aristas forman caminos o ciclos. Un ciclo es un camino que

termina en el mismo nodo donde comenzó. Si el camino recorre todos los nodos

del grafo es llamado tour. El número de aristas en un camino es la longitud del

camino.

Se dice que un grafo es conexo si se puede llegar desde cualquier nodo hasta

cualquier otro mediante un camino. De lo contrario no es conexo, pero puede

dividirse en componentes conexas, que son subconjuntos de nodos y aristas del

grafo original que si son conexos. Un grafo conexo sin ciclos es llamado un árbol.

Estos son apenas unos cuantos conceptos de lo que se conoce como la Teoría de

Grafos. El objetivo de estas notas no es cubrir por completo dicha teoría sino

enfocarnos en la implementación de este tipo de estructuras y las operaciones y

algoritmos más comunes e importantes que se aplican sobre las mismas.

Hay por lo menos dos maneras evidentes de representar un grafo en un

computador, utilizando la notación pseudoformal propuesta en [2]. La primera

utiliza lo que se conoce como una matriz de adyacencia, a saber:

Page 15: Algoritmos Concurrentes y Aplicaciones

15

CLASE Grafo

Privado:

Arreglo de <Tipo> Nodos de [1..N];

Arreglo de lógico MatrizDeAdyacencia de [1..N][1..N];

Público:

# Todas las operaciones aquí

FCLASE

Un valor verdadero en la posición (i,j) de la matriz indica que hay una arista que

conecta al nodo i con el nodo j. Para representar un grafo pesado se puede cambiar

la matriz de adyacencia de lógicos a una matriz de registros, siendo el peso un

campo del registro.

Esta representación es muy útil cuando se cumplen dos condiciones principales.

Primero, si se conoce el número exacto de nodos en el grafo no hace falta utilizar

estructuras dinámicas porque las estáticas se pueden acceder con mayor facilidad.

Segundo, la matriz de adyacencia no contiene un gran número de elementos en

FALSO.

Si no se cumple la primera de estas condiciones y el número de nodos en el grafo

puede variar drásticamente entonces se justifica el uso de estructuras dinámicas.

En este caso, lo ideal es utilizar una lista lineal de nodos conteniendo la

información en <Tipo>.

Por supuesto, si el número de nodos va a cambiar entonces tampoco se justificas

tener un matriz estáticas, por lo que debería utilizarse una matriz esparcida.

CLASE Nodo #Nodo de la lista de <Tipo>

Público: entero Id;

<Tipo> Info;

­Nodo proximo;

#Operaciones aquí

Page 16: Algoritmos Concurrentes y Aplicaciones

16

FCLASE

#La declaración de los nodos para las columnas (NodoC),

filas (NodoF) y

#nodos internos de la matriz van aquí. Son las

declaraciones de una

#matriz esparcida implementada con listas con posición

lógica fija o

#relativa.

CLASE Grafo

Privado:

­Nodo primerNodo; # 1er. nodo de la lista

­NodoF primeraFila; # 1era. fila de la matriz esparcida

­NodoC primeraColumna; # 1era. columna de la matriz

esparcida

Público:

# Todas las operaciones aquí

FCLASE

Sin embargo, puede que esta solución no sea la más conveniente por el hecho de

que la matriz esparcida ocupará más memoria que su contraparte estática a

medida que el número de conexiones entre los nodos sea mayor, ya que habrá

pocos elementos no nulos dentro de la matriz. En ese caso, se debe utilizar otra

implementación.

CLASE Nodo #Nodo de la lista de <Tipo>

Público: entero Id;

<Tipo> Info;

­Nodo proximo;

­Ady ListaDeAdyacentes;

#Operaciones aquí

Page 17: Algoritmos Concurrentes y Aplicaciones

17

FCLASE

CLASE Ady #Nodo de la lista de nodos adyacentes

Público:

­Nodo AdyAeste;

­Ady proximo;

#Operaciones aquí

FCLASE

CLASE Grafo

Privado:

­Nodo primerNodo; # 1er. nodo de la lista

Público:

6

# Todas las operaciones aquí

FCLASE

Esta representación ocupa menos memoria que la anterior sin importar si la matriz

esparcida está muy llena o no, pero puede incrementar la complejidad de algunas

operaciones, como por ejemplo saber cuáles nodos son adyacentes a un nodo en

particular (en caso de un grafo dirigido).

Cualquier algoritmo de recorrido de grafos consiste básicamente en visitar un nodo

del grafo y luego ir visitando los nodos conectados a este. Este principio se aplica

recursivamente comenzando desde un nodo inicial cualquiera del grafo.

Lo que diferencia un algoritmo de recorrido de otro es, una vez ubicado en un nodo

en particular, la forma en que se visitan los nodos conectados a este. Por supuesto,

estos algoritmos pueden ser aplicados en grafos dirigidos o no dirigidos.

Page 18: Algoritmos Concurrentes y Aplicaciones

18

Los dos algoritmos “clásicos” de recorrido de grafos son el recorrido en

profundidad y en anchura. Precisamente por ser “clásicos” han sido estudiados con

anterioridad y se les conoce su orden de complejidad en tiempo y todos los

beneficios de aplicarlos.

ACCION DFS_R(­Nodo Actual)

#se marca el nodo actual como visitado

Actual­.visitado ¬ verdad;

­Ady aux;

aux ¬Actual.­ListaDeAdyacentes;

#se recorre la lista de adyacentes al nodo Actual para

#visitarlos mientras ( aux ¹ NULL ) hacer si (

#(aux­.AdyAeste)­.visitado ¹ verdad) entonces

#se hace la llamada recursiva a los nodos

#adyacentes para visitarlos

DFS_R(aux­. AdyAeste);

fsi

aux ¬ aux­.proximo;

fmientras

FACCION

Público:

ACCION DFS() #Depth-First Search

­Nodo aux;

aux ¬ primerNodo;

#aquí se recorre la lista de nodos iterativamente

#haciendo las llamadas al DFS_R (DFS recursivo) cada vez

#que se consiga a alguien no visitado. Esto se hace para

#evitar que el algoritmo no funcione si el grafo tiene

Page 19: Algoritmos Concurrentes y Aplicaciones

19

#varias componentes conexas mientras (aux ¹ NULL) hacer

#si (aux­.visitado ¹ verdad) entonces

DFS_R(aux);

fsi

aux ¬ aux­.proximo;

fmientras

FACCION

Este algoritmo recorre todos los nodos del grafo pero fácilmente puede

modificarse para que sea una función que encuentre un nodo en particular dentro

de grafo. Este algoritmo se conoce como el algoritmo DFS (Depth-First Search).

Page 20: Algoritmos Concurrentes y Aplicaciones

20

REDES NEURONALES

En SQL Server Analysis Services, el algoritmo de red neuronal de Microsoft combina

cada posible estado del atributo de entrada con cada posible estado del atributo de

predicción, y usa los datos de entrenamiento para calcular las probabilidades.

Posteriormente, puede usar estas probabilidades para la clasificación o la

regresión, así como para predecir un resultado del atributo de predicción

basándose en los atributos de entrada.

Los modelos de minería de datos construidos con el algoritmo de red neuronal de

Microsoft pueden contener varias redes, en función del número de columnas que

se utilizan para la entrada y la predicción, o sólo para la predicción. El número de

redes que contiene un único modelo de minería de datos depende del número de

estados que contienen las columnas de entrada y las columnas de predicción que

utiliza el modelo.

Ejemplo

El algoritmo de red neuronal de Microsoft es útil para analizar datos de entrada

complejos, como los datos de un proceso comercial o de producción, o problemas

empresariales para los que hay una cantidad importante de datos de

entrenamiento disponibles pero en los que no es fácil derivar reglas mediante otros

algoritmos.

Los casos sugeridos para utilizar el algoritmo de red neuronal de Microsoft son:

Análisis de comercialización y promoción, como medir el éxito de una

promoción por correo directo o una campaña publicitaria en la radio.

Page 21: Algoritmos Concurrentes y Aplicaciones

21

Predecir los movimientos de las acciones, la fluctuación de la moneda u

otra información financiera con gran número de cambios a partir de los

datos históricos.

Analizar los procesos industriales y de producción.

Minería de texto.

Cualquier modelo de predicción que analice relaciones complejas entre

muchas entradas y relativamente pocas salidas.

Cómo funciona el algoritmo

El algoritmo de red neuronal de Microsoft crea una red formada por hasta tres

niveles de neuronas. Estas capas son una capa de entrada, una capa oculta

opcional y una capa de salida.

Nivel de entrada: las neuronas de entrada definen todos los valores de atributos de

entrada para el modelo de minería de datos, así como sus probabilidades.

Nivel oculto: las neuronas ocultas reciben entradas de las neuronas de entrada y

proporcionan salidas a las neuronas de salida. El nivel oculto es donde se asignan

pesos a las distintas probabilidades de las entradas. Un peso describe la relevancia

o importancia de una entrada determinada para la neurona oculta. Cuanto mayor

sea el peso asignado a una entrada, más importante será el valor de dicha entrada.

Los pesos pueden ser negativos, lo que significa que la entrada puede desactivar,

en lugar de activar, un resultado concreto.

Nivel de salida: las neuronas de salida representan valores de atributo de

predicción para el modelo de minería de datos.

Page 22: Algoritmos Concurrentes y Aplicaciones

22

Datos requeridos para los modelos de red neuronal

El modelo de red neuronal debe contener una columna de clave, una o más

columnas de entrada y una o más columnas de predicción.

Los modelos de minería de datos que usan el algoritmo de red neuronal de

Microsoft están muy influenciados por los valores que se especifican en los

parámetros disponibles para el algoritmo. Los parámetros definen cómo se

muestrean los datos, cómo se distribuyen o cómo se espera que estén distribuidos

en cada columna, y cuándo se invoca la selección de características para limitar los

valores usados en el modelo final.

Ver un modelo de red neuronal

Para trabajar con los datos y ver cómo el modelo pone en correlación las entradas y

salidas, puede usar el Visor de redes neuronales de Microsoft. Con este visor

personalizado, puede filtrar los atributos de entrada y sus valores, y ver

gráficamente cómo afectan a las salidas. La información sobre herramientas del

visor muestra la probabilidad y la mejora respecto al modelo predictivo asociados a

cada par de valores de entrada y de salida.

La manera más fácil de explorar la estructura del modelo consiste en usar el Visor

de árbol de contenido genérico de Microsoft. Este visor le permitirá ver las

entradas, las salidas y las redes creadas por el modelo, así como hacer clic en

cualquier nodo para expandirlo y ver las estadísticas relacionadas con los niveles de

entrada, los niveles de salida y los niveles ocultos de los nodos.

Page 23: Algoritmos Concurrentes y Aplicaciones

23

Crear predicciones

Una vez procesado el modelo, puede usar la red y los pesos almacenados dentro de

cada nodo para realizar predicciones. Un modelo de red neuronal admite el análisis

de regresión, de asociación y de clasificación. Por lo tanto, el significado de cada

predicción puede ser diferente. También puede consultar el propio modelo, revisar

las correlaciones encontradas y recuperar las estadísticas relacionadas.

Observaciones

No admite la obtención de detalles ni las dimensiones de minería de

datos. Esto se debe a que la estructura de los nodos del modelo de

minería de datos no tiene por qué corresponder directamente a los datos

subyacentes.

No admite la creación de modelos en el formato PMML (Lenguaje de

marcado de modelos de predicción).

Admite el uso de modelos de minería de datos OLAP.

No admite la creación de dimensiones de minería de datos.

Page 24: Algoritmos Concurrentes y Aplicaciones

24

ALGORITMOS GENÉRICOS

Para aprender por sí mismo observando a un especialista humano en acción, un

sistema experto utiliza el aprendizaje automático.

Para que una computadora pueda reproducir el comportamiento intelectual de un

ser humano, es imprescindible que exista una cantidad adecuada de

conocimientos. Por lo que se hace necesario identificar, dar forma, y representar

los conocimientos que permiten razonar. Lo ideal es que el sistema experto haga

todo esto por sí mismo.

El ser humano recurre a muchos conocimientos de todo tipo para realizar hasta los

trabajos más sencillos. Los conocimientos más utilizados por los humanos son los

heurísticos, es decir reglas prácticas e imprecisas, casi siempre eficaces. Los

conocimientos heurísticos no se expresan, ya que sólo se pueden aprender con la

práctica.

Para que una máquina pueda aprender e ir adquiriendo conocimiento, es necesario

el trabajo de los ingenieros del conocimiento.

Los ingenieros del conocimiento son los que desarrollan la tecnología y

metodología necesarias para procesar el conocimiento. Su objetivo es extraer,

articular y computarizar el conocimiento de un experto. Para lograrlo, los

ingenieros del conocimiento utilizan el dato, la información y el conocimiento.

Un dato es la representación simbólica de un aspecto simple, objeto o hecho, del

universo de discurso.

Page 25: Algoritmos Concurrentes y Aplicaciones

25

Existen datos objeto, es decir elementos de determinado dominio y datos hecho,

que son las relaciones entre objetos.

Información es cualquier estímulo capaz de cambiar el estado o de alterar la

conducta de un sistema. Es todo aquello que aumenta el conocimiento. La cantidad

de información que se obtiene de un mensaje depende de cuánto reduzca la

incertidumbre en el receptor acerca del correspondiente universo de discurso.

El conocimiento es la representación simbólica de aspectos complejos de algún

universo de discurso, y puede como ya vimos puede ser declarativo o procedural.

El uso de un conocimiento declarativo o procedural depende del entorno, aunque

por lo general en los sistemas expertos se utiliza el conocimiento declarativo.

El proceso de formación del conocimiento de una persona normalmente es cíclico.

El conocimiento llega incompleto y desordenado. Para poder introducir este tipo

de conocimiento en una máquina el ingeniero del conocimiento lo organiza, lo

completa y lo prepara para su transferencia al sistema.

La aplicación del conocimiento en un sistema requiere de habilidad, es necesario la

capacidad para trabajar con conocimiento parcial y obtener una alta productividad.

Un sistema no es un sistema experto si no es hábil.

Un sistema va adquiriendo el conocimiento en diferentes niveles.

Cuando puede establecer la base de conocimiento, conocida como conocimiento

de orden 0 ó teoría de orden 0, formada por conocimiento factual; es capaz de

conocer sin necesidad de hacer preguntas.

Page 26: Algoritmos Concurrentes y Aplicaciones

26

El conocimiento de orden 1, o teoría de orden 1, es un conocimiento heurístico.

Cuando un sistema tiene heurística en su base de conocimientos mejora su nivel de

respuesta, pero no puede llegar al grado de conocimiento que tiene un especialista

humano.

Para que el sistema pueda emplear de manera eficiente el conocimiento, requiere

de un metaconocimiento, o teoría del orden 2. El metaconocimiento es la parte del

conocimiento que es completamente independiente del contexto. Dentro del

metaconocimiento habrá reglas que indican cómo actuar fuera de cualquier

dominio. Puede servir para detectar fallos sintácticos y semánticos en la

transmisión del conocimiento por parte del experto.

Para que el sistema adquiera conocimiento, es necesaria la transferencia de éste

desde alguna fuente a la base de conocimientos del sistema. Esto implica aplicar

alguna técnica para extraer el conocimiento del especialista, interpretar los datos

para reconocer el conocimiento fundamental y construir un modelo de

representación

Por lo general las fuentes del conocimiento son los expertos humanos, libros y

datos experimentales agrupados en bases de datos.

La adquisición del conocimiento y su modelización son las tareas que más tiempo

requieren. Como resultado de la adquisición se construye una base de

conocimientos.

Page 27: Algoritmos Concurrentes y Aplicaciones

27

La inducción de conocimiento puede ser directa, o como resultado de una

inducción a partir de ejemplos, o como deducción de otros conocimientos ya

almacenados en la base de conocimientos.

La inducción es el proceso de producir principios generales a partir de ejemplos

específicos, mientras que la deducción significa extraer conclusiones específicas a

partir de principios generales.

Aprendizaje automático.

Uno de los principales logros de la Inteligencia Artificial es que puede otorgar a las

computadoras la habilidad de aprender. Para que esto suceda es necesario

transferir el conocimiento al interior de la máquina.

Una computadora aprende de diferentes maneras:

Memorísticamente. Para que exista un aprendizaje memorístico se

transcribe el conocimiento, es decir, se copia la memoria de una

computadora a otra.

Por relato. Se adapta el conocimiento desde su fuente a una forma que

pueda ser aceptada y utilizada por la computadora. Es como si se le

contara el conocimiento.

Por analogía. Se guarda el conocimiento que resuelve un problema para

aplicarlo cuando las circunstancias sean similares.

Por Inducción. Se le suministran datos a la computadora y de ellos extrae

el conocimiento. Esto se hace a partir de ejemplos o a partir de

observaciones.

Page 28: Algoritmos Concurrentes y Aplicaciones

28

Los paradigmas más utilizados para el aprendizaje automático son:

Inducción de reglas a partir de bases de datos

Razonamiento basado en casos

Redes neuronales

Algoritmos genéticos

Inducción de reglas a partir de bases de datos

Entre los métodos de aprendizaje automático el aprendizaje a partir de bases de

datos por inducción (ya sea mediante ejemplos u observación), es prácticamente el

único que se utiliza en los sistemas expertos. Este aprendizaje ha sido adaptado

para resolver problemas de clasificación.

Razonamiento basado en casos

Utiliza la experiencia que se adquirió al tratar casos o problemas similares. Es un

aprendizaje por analogía. Se construye una base de conocimiento con los casos que

ya se han resuelto. Cuando aparece un problema nuevo, se buscan problemas

similares en la base de casos y se adaptan sus soluciones a la situación actual. Un

sistema experto de esta clase va a proporcionar la mejor solución disponible, más

que una solución exacta.

Si con los casos existentes en la base no se puede resolver una situación de forma

satisfactoria, ésta se atrapa automáticamente para actualizar los casos disponibles.

Page 29: Algoritmos Concurrentes y Aplicaciones

29

Redes neuronales

En este caso se trata de emular las neuronas cerebrales mediante modelos

matemáticos utilizando unidades de procesamiento elementales que copian

algunas de sus características.

El modelo más simple es el diseñado por Mc Culloch y Pitts en 1949, en el que una

caja representa el cuerpo de las neuronas. Tiene entradas que son las dendritas, las

cuales están valoradas con un peso (w) que representa la potencia de la conexión.

La salida representa el axón. Los pesos de las dendritas pueden ser positivos o

negativos. Si son positivos se tendrán canales excitatorios y si son negativos,

canales inhibitorios. El cuerpo procesa las señales que le llegan de otras neuronas

según la hipótesis siguiente:

Señales de entrada: Oi = 0 o 1.

Se ponderan según su peso wi: N = S wi * Oi.

Señal de salida: O = 0 si N £ Umbral

= 1 si N > Umbral.

A partir de esta "célula", se pueden construir redes neuronales, interconectando

los axones y dendritas de muchas células.

Para definir completamente una red neuronal, se tiene que especificar tanto el

comportamiento individual de cada neurona como la interconexión existente entre

ellas. Las neuronas que se comportan de forma similar se agrupan en capas. Su

cualidad principal es la capacidad para variar de comportamiento cuando cambia

una situación.

Page 30: Algoritmos Concurrentes y Aplicaciones

30

El proceso mediante el cual aprende la red se denomina entrenamiento. El

aprendizaje en una red consiste en ir cambiando los pesos de las conexiones

adaptándola hasta conseguir la respuesta que se desea. Puede ser supervisado, en

el que cada ejemplo estará formado por las entradas a la red y la salida que se

espera para esas entradas; y no supervisado, en el que cada ejemplo de

entrenamiento está constituido sólo por las entradas, sin dar la salida esperada,

por lo que se asociará la información recibida con la almacenada, la memoria está

formada por los pesos sinápticos entre neuronas.

Algoritmos genéricos

Basados en la idea de J. H. Holland (1960), estos algoritmos buscan soluciones de

forma adaptativa en analogía a los cambios genéticos que se producen en las

poblaciones naturales para adaptarse al medio. Comienzan con un conjunto de

datos o patrones generados de forma aleatoria y evolucionan hacia una solución a

través de técnicas de adaptación de los patrones iniciales.

Para representar las propiedades de un individuo o suceso se utiliza un patrón, en

el que se indica la presencia (1) o ausencia (0) de cada propiedad. Hay un peso

asociado a cada patrón, conocido como idoneidad, que indica su rendimiento en

experiencias anteriores.

Page 31: Algoritmos Concurrentes y Aplicaciones

31

El problema a resolver se representa mediante una cadena compuesta por ceros y

unos (101001101). Se genera aleatoriamente una población de individuos

formados también por cadenas o patrones de este tipo. Se evalúa el rendimiento

de cada patrón, aumentando su peso si clasifica de forma adecuada el caso o

disminuyéndolo si no lo hace, y se seleccionan los individuos para la siguiente

generación basándose en su rendimiento, reemplazando los que tengan menor

peso. Entonces, se realizan cruces (intercambiando los bits) y mutaciones

(cambiando un 0 por un 1, o viceversa) de forma aleatoria entre los patrones.

Page 32: Algoritmos Concurrentes y Aplicaciones

32

COMPUTACIÓN GRÁFICA

La computación gráfica o gráficos por ordenador es el campo de la informática

visual, donde se utilizan computadoras tanto para generar imágenes visuales

sintéticamente como integrar o cambiar la información visual y espacial probada

del mundo real.

El primer mayor avance en la gráfica realizada por computadora era el desarrollo

de Sketchpad en 1962 por Ivan Sutherland.

Este campo puede ser dividido en varias áreas: Interpretado 3D en tiempo real (a

menudo usado en juegos de vídeo), animación de computadora, captura de vídeo y

creación de vídeo interpretado, edición de efectos especiales (a menudo usado

para películas y televisión), edición de imagen, y modelado (a menudo usado para

ingeniería y objetivos médicos). El desarrollo en la gráfica realizada por

computadora fue primero alimentado por intereses académicos y patrocinio del

gobierno. Sin embargo, cuando las aplicaciones verdaderas mundiales de la gráfica

realizada por computadora (CG) en televisión y películas demostraron una

alternativa viable a efectos especiales más a las tradicionales y las técnicas de

animación, los comerciales han financiado cada vez más el avance de este campo.

A menudo se piensa que la primera película para usar gráficos realizados por

computadora era 2001: A Space Odyssey (1968), que intentó mostrar como las

computadoras serían mucho más gráficas en el futuro. Sin embargo, todos los

gráficos de computadora en aquella película eran la animación dibujada a mano

(por ejemplo en las pantallas de televisión se simulaba el comportamiento de las

computadoras con dibujos), y las secuencias de efectos especiales fue producida

completamente con efectos ópticos y modelos convencionales.

Page 33: Algoritmos Concurrentes y Aplicaciones

33

Quizás el primer uso de la gráfica realizada por computadora expresamente para

ilustrar gráfica realizada por computadora estaba en Futureworld (1976), que

incluyó una animación de una cara humana y mano - producido por Ed Catmull y

Fred Parke en la Universidad de Utah.

La geometría computacional es una rama de la informática dedicada al estudio de

algoritmos que pueden ser expresados en términos de la geometría. Algunos de los

problemas puramente geométricos surgen del estudio de los algoritmos de

geometría computacional, y este tipo de problemas también se considera parte de

la geometría computacional.

El principal impulso para el desarrollo de la geometría computacional como

disciplina se lo dio el avance la computación gráfica y el diseño asistido por

ordenador (CAD/CAM), pero muchos problemas en la geometría computacional

son clásicos en la naturaleza.

Otras aplicaciones importantes de la geometría computacional incluyen

la robótica (planificación de movimientos y problemas de visualización),

los sistemas de información geográfica (SIG) (localización y búsqueda geométrica,

planificación de rutas), diseño de circuitos integrados (diseño geométrico y

verificación de CI), ingeniería asistida por computadora (CAE) (programación de

máquinas controladas numéricamente).

Las principales ramas de la geometría computacional son:

Geometría combinatoria computacional, también llamada geometría

algorítmica, que trata de objetos geométricos como entidades discretas. Un

libro sobre el tema por Preparata y Shamos fecha la primera utilización del

término "geometría computacional" en este sentido en 1975.

Page 34: Algoritmos Concurrentes y Aplicaciones

34

La geometría computacional numérica, también llamada geometría máquina,

diseño geométrico asistido por computador (CAGD), o modelado geométrico,

que trata principalmente con la representación de objetos del mundo real en la

forma adecuada para los cálculos de ordenador en los sistemas CAD / CAM. Esta

rama puede ser visto como un desarrollo de la geometría descriptiva y es a

menudo considerado como una rama de los gráficos por ordenador o CAD. El

término "geometría computacional", en este sentido ha estado en uso desde

1971.

Page 35: Algoritmos Concurrentes y Aplicaciones

35

PROCESAMIENTO DE

IMÁGENES

El procesamiento digital de imágenes es el conjunto de técnicas que se aplican a las

imágenes digitales con el objetivo de mejorar la calidad o facilitar la búsqueda de

información.

Las operaciones que se pueden realizar con imágenes se dividen en :

Operaciones de punto

Operaciones de entorno

Operaciones con dos o más imágenes

Los filtros se utilizan para la modificación de imágenes ya sea para detectar los

bordes de una escena o para modificar el aspecto, otra función de los filtros es para

la eliminación de ruido de la imagen.

Al hablar de un filtro nos estamos refiriendo a realizar una Convolución de una

matriz con respecto a un pixel y la vecindad de este, esto quiere decir, si la imagen

es de 200x300 pixeles y el filtro con el cual se va a realizar la convolución es una

matriz de 3x3 entonces se irá desplazando el filtro pixel a pixel iniciando en la

posición (1,1) hasta llegar a la (199,299). La magnitud del gradiente es entonces

calculada con la siguiente fórmula: 2 2G Gx Gy . Una magnitud aproximada

puede ser calculada de la siguiente forma: G Gx Gy .

Uno de los filtros clásicos para la detección de bordes es el filtro de Sobel el cual

utiliza, a su vez, dos mascaras o filtros. Una para detectar los bordes verticales y

otra para los horizontales. Así, para obtener los bordes completos se realiza la

suma de las imágenes que nos resultaron con los bordes verticales y horizontales.

Page 36: Algoritmos Concurrentes y Aplicaciones

36

Otro filtro para la detección de bordes es el filtro de Prewitt. Éste consta de 8

matrices que se aplican pixel a pixel a la imagen. Luego se suman las imágenes para

obtener los bordes bien marcados. El filtro de Prewitt marca muy bien los bordes

ya que sus matrices atacan estos desde ocho lados diferentes. En general cada

matriz toma el nombre de un punto cardinal: Norte, Sur, Este, Oeste, Noroeste,

Noreste, Suroeste, Sureste.

Page 37: Algoritmos Concurrentes y Aplicaciones

37

BIBLIOGRAFÍA

Algoritmo de Ordenamiento | Wikipedia

http://es.wikipedia.org/wiki/Algoritmo_de_ordenamiento

PARTE II: ALGORÍTMICA Tema 4. Divide y Vencerás.

http://servinf.dif.um.es/~domingo/apuntes/ProgPar/trasparencias/T6.EsqProPar.ppt

Algoritmos Numéricos | MiTecnológico.com

http://www.mitecnologico.com/Main/AlgoritmosNumericos

Algoritmos Básicos de Grafos | Universidad Central de Venezuela. Facultad de Ciencias. Escuela de Computación.

http://ccg.ciens.ucv.ve/~ernesto/nds/CotoND200302.pdf

Algoritmo de Red Neuronal de Microsoft (Analysis Services – Minería de Datos) | Microsoft TechNet

http://technet.microsoft.com/es-es/library/ms174941.aspx

¿Cómo Aprenden las Máquinas? | ITESO

http://iteso.mx/~almarp/ia/comoaprenden.htm

Page 38: Algoritmos Concurrentes y Aplicaciones

38

Computación Gráfica | Wikipedia

http://es.wikipedia.org/wiki/Computaci%C3%B3n_gr%C3%A1fica

Geometría Computacional | Wikipedia

http://es.wikipedia.org/wiki/Geometría_computacional

Procesamiento Digital de Imágenes | Wikipedia

http://es.wikipedia.org/wiki/Procesamiento_digital_de_imágenes

Multiplicación de Matrices | Manuel Sánchez Cuenca

http://servinf.dif.um.es/~domingo/apuntes/ProgPar/trasparencias/T7.Alg.MultMatr.ppt

Multiplicación de Matrices | Wikipedia

http://servinf.dif.um.es/~domingo/apuntes/ProgPar/trasparencias/T7.Alg.MultMatr.ppt