Sie sind auf Seite 1von 38

CAMPUS MEXICALI

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


Í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

2
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.

3
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.

4
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).

5
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

6
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)

7
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.

8
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

9
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.

10
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.

11
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)

12
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;
}
}

13
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:

14
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í

15
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í

16
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.

17
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

18
#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).

19
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.

20
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.

21
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.

22
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.

23
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.

24
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.

25
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.

26
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.

27
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.

28
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.

29
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.

30
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.

31
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.

32
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.
33
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.

34
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: G  Gx 2  Gy 2 . 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.

35
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.

36
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

37
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

38

Das könnte Ihnen auch gefallen