PROGRAMACIÓN CONCURRENT
Modelar un sistema usando redes de Petri
Una red de Petri está formada por lugares, transiciones, arcos dirigidos y marcas o fichas
Carl Petri creo en 1962, una herramienta matemática para el estudio de las comunicaciones con los Autómatas.
Esta presentación es parte del contenido del curso de Estructuras de Datos I impartido en la Universidad Rafael Landívar durante el año 2017.
Creado por Ing. Alvaro Enrique Ruano
PROGRAMACIÓN CONCURRENT
Modelar un sistema usando redes de Petri
Una red de Petri está formada por lugares, transiciones, arcos dirigidos y marcas o fichas
Carl Petri creo en 1962, una herramienta matemática para el estudio de las comunicaciones con los Autómatas.
Esta presentación es parte del contenido del curso de Estructuras de Datos I impartido en la Universidad Rafael Landívar durante el año 2017.
Creado por Ing. Alvaro Enrique Ruano
Intro to AI STRIPS Planning & Applications in Video-games Lecture6-Part1Stavros Vassos
This is a short course that aims to provide an introduction to the techniques currently used for the decision making of non-player characters (NPCs) in commercial video games, and show how a simple deliberation technique from academic artificial intelligence research can be employed to advance the state-of-the art.
For more information and downloading the supplementary material please use the following links:
http://stavros.lostre.org/2012/05/19/video-games-sapienza-roma-2012/
http://tinyurl.com/AI-NPC-LaSapienza
Intro to AI STRIPS Planning & Applications in Video-games Lecture6-Part1Stavros Vassos
This is a short course that aims to provide an introduction to the techniques currently used for the decision making of non-player characters (NPCs) in commercial video games, and show how a simple deliberation technique from academic artificial intelligence research can be employed to advance the state-of-the art.
For more information and downloading the supplementary material please use the following links:
http://stavros.lostre.org/2012/05/19/video-games-sapienza-roma-2012/
http://tinyurl.com/AI-NPC-LaSapienza
Heapsort es un algoritmo de ordenación comparación basada en crear una matriz ordenada (o lista), y forma parte de la familia tipo de selección. Aunque algo más lento en la práctica en la mayoría de máquinas de una ordenación rápida bien a la práctica, tiene la ventaja de un peor de los casos más favorables O (n log n) de tiempo de ejecución. Heapsort es un algoritmo en el lugar, pero no es una ordenación estable -. Wikipedia
En mi artículo anterior he explicado:
1. BUILD-MAX-HEAP - se ejecuta en tiempo lineal, resultante max-heap de una matriz de entrada desordenada.
2. MAX-HEAPIFY - mantiene propiedad del montículo y se ejecuta en el tiempo O (lg n).
3. MAX-HEAP-INSERT - O (lg n)
4. HEAP-EXTRACT-MAX - O (lg n)
5. HEAP-aumentos y reducciones-KEY - O (lg n) / / no es necesario para heapsort
La función de heapsort es insertar todos los elementos desordenados en un montón con Insertar normal () del artículo anterior y usando repetidamente Eliminar () A continuación, retire los elementos ordenados.
El procedimiento HeapSort toma tiempo O (n lg n), ya que la llamada a BUILD_HEAP toma O (n) y cada uno de los n -1 llamadas a Heapify toma O (lg n).
Heapsort compite con la ordenación por fusión ya que ambos han peor caso O (n NLG), sin embargo un quicksort bien implementado es mejor que heapsort ya que el bucle while en el CascadeDown () tiene más operaciones que arrastran el rendimiento en comparación con algunas operaciones en una ordenación rápida.
Para mejorar el rendimiento heapsort un poco más
Por eficiencia Hora:
podemos reemplazar el Insert () y Eliminar () función que toma O (n) por una sola función denominada CascadeDown (). Cuando construimos un montón de una matriz sin ordenar los elementos de N / 2 - 1 a n corresponden a los nodos de la fila de abajo, es decir los que no tienen hijos y éstos ya se encuentran montones correctas, porque son árboles con un solo nodo, nosotros no 't necesidad de aplicar CascadeDown () para estos nodos. Podemos empezar en el nodo N/2-1, el nodo más a la derecha con los niños a Cascade. Por lo tanto, sólo tenemos la mitad de las operaciones en cascada.
Esta forma de ahorrar algo de tiempo.
Para ahorrar espacio:
Podemos utilizar la misma matriz sin ordenar para almacenar los elementos eliminados. Como se elimina el nodo máximo que se puede colocar en la última posición en la matriz como los elementos se han desplazado por un índice hacia el inicio de la matriz.
Esta mejora podría hacer una diferencia considerable en los datos grandes y por lo tanto heapsort O (NLG n) tiempo de ejecución es mejor que O (n2) de una ordenación rápida.
2. Búsqueda A*
(A Star)
Algoritmo:
1.Crear una lista con el nodo raíz.
2.Hasta que la lista esté vacía o sea alcance la meta:
Si el primer elemento es la meta, ir al paso 3.
Sino, eliminar el primer elemento de la lista y agregar sus hijos sumando
g + h(heurística 1).
Ordenar los elementos de acuerdo al costo y eliminar los repetidos de
costo mayor (heurística 2).
3.Expandir todos los nodos con costo menor que el nodo meta.
3. Búsqueda A*
(A Star)
• Definiremos una función heurística f como la suma de dos funciones
g y h:
• Función g: es una medida del coste para ir desde el estado inicial hasta el
nodo actual (suma de los costes o valores heurísticos de todos los nodos).
• Función h: es una estimación del coste adicional necesario para alcanzar un
nodo objetivo a partir del nodo actual, es decir, es una estimación de lo que
me queda por recorrer hasta la meta.
• La función combinada f una estimación del coste necesario para alcanzar un
estado objetivo por el camino que se ha seguido para generar el nodo actual
(si se puede generar por varios caminos el algoritmo se queda con el mejor).
NOTA: los nodos buenos deben poseer valores bajos
4. Búsqueda A*
(A Star)
• Usaremos dos listas de nodos (ABIERTA Y CERRADA)
• Abierta: nodos que se han generado y a los que se les ha aplicado la
función heurística, pero que aún no han sido examinados (es decir, no
se han generado sus sucesores). Es decir, es una cola con prioridad
en la que los elementos con mayor prioridad son aquellos que tienen
un valor más prometedor de la función heurística.
• Cerrada: nodos que ya se han examinado. Es necesaria para ver si
cuando se genera un nuevo nodo ya ha sido generado con
anterioridad.
5. Ejemplo
• Un sistema puede encontrarse en un conjunto de estados {S0, …., S8}.
Su estado inicial es S0 y los estados meta, S7y S8. Considérense los
siguientes operadores y costes asociados a cada operador:
OP1: S3→S8(coste 5) OP2: S2→S3(coste 25) OP3: S5→S3(coste 20)
OP4: S1→S2(coste 100) OP5: S4→S2(coste 80) OP6: S6→S7(coste 100)
OP7: S0→S1(coste 10) OP8: S0→S4(coste 10) OP9: S0→S5(coste 20)
OP10: S0→S6(coste 20)
• Considérense también los siguientes valores de la función heurística
h, que estima el menor coste desde cada nodo a un nodo meta:
h(S0) = 40 h(S3) = 10 h(S6) = 110
h(S1) = 20 h(S4) = 40 h(S7) = 0
h(S2) = 20 h(S5) = 100 h(S8) = 0
6. • Se tiene a S0 como nodo
inicial y a S1, S4, S5 y S6
como los nodos
directamente conectados
a el.
7. • Se agregan al recorrido
los nodos directamente
conectados a S0 junto
con sus costes (función
g(s) y con los valores de
la función heurística h(s).
• Se obtienen los valores
para la función f(s)
sumando los valores de
g(s) y h(s) que en este
caso serian: f(s1) =
30, f(s4) = 50, f(s5) = 120
y f(s6) = 130.
8. • El recorrido se continua
por el nodo cuya función
f(s) haya sido la menor.
En este caso es el nodo
S1 con función f(s) = 30.
• Se agregan los nodos
directamente conectados
a S1.
• El nodo agregado fue S2.
Se evalúa la función f(s)
que da como resultado
f(S2) = 120.
9. • Es necesario evaluar si
existe una mejor forma de
hacer el recorrido hasta el
nodo S2. para esto es
necesario saber si existen
otros nodos conectados
con S2, en este caso
existe uno el cual es S4.
• Se evalúa la función f(s)
para el recorrido desde
S4 hasta S2 calculando la
suma de g(s) + h(s). El
resultado de la operación
es 80 + 20 = f(S2) = 100.
10. • Se comprueba que el
recorrido entre S4 y S2
es mejor y se descarta el
recorrido de S1 a S2.
• Se agregan los nodos
directamente conectados
a S2. Para este caso se
tiene que S3 esta
directamente conectado.
• Se evalúa la función f(S3)
que resulta tener un valor
de 35.
11. • Como en el caso anterior
es necesario evaluar si
existen rutas alternas
para llegar a S3. Existe
una ruta que va desde S5
hasta S3.
• Se calcula el valor para
f(s) en el recorrido de S5
a S3. el resultado es f(S3)
= 30.
12. • Al existir una mejor ruta
para llegar a S3 se
descarta la que fue
anteriormente encontrada
y se sigue la nueva ruta.
• Se agregan los nodos
conectados a S3 y se
encuentra el nodo S8 el
cual es una meta con
valor h(S8) = 8 y cuyo
recorrido desde S3 da
como resultado 5 para la
función f(s).
• El algoritmo termina
cuando se encuentra una
meta. El coste total del
recorrido es de 20 + 20 +
5 = 45.
13. • El algoritmo termina
cuando se encuentra una
meta. El coste total del
recorrido es de 20 + 20 +
5 = 45.