diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index a7f5270..27e8c90 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -5,6 +5,5 @@ "iconic", "obsidian-banners", "obsidian-enhancing-export", - "obsidian-latex-suite", "obsidian-git" ] \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index b8bdfd0..d90b26f 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -11,14 +11,12 @@ "id": "d8a559569207f8b1", "type": "leaf", "state": { - "type": "markdown", + "type": "image", "state": { - "file": "TERCERO/SS/SS 24-25.md", - "mode": "source", - "source": false + "file": "TERCERO/SPD/images/Pasted image 20241022150214.png" }, - "icon": "lucide-file", - "title": "SS 24-25" + "icon": "lucide-image", + "title": "Pasted image 20241022150214" } } ] @@ -77,8 +75,7 @@ } ], "direction": "horizontal", - "width": 300, - "collapsed": true + "width": 300 }, "right": { "id": "44cf06183e1c1c7d", @@ -175,23 +172,23 @@ "obsidian-git:Open Git source control": false } }, - "active": "d8a559569207f8b1", + "active": "a4eac8e6613b153b", "lastOpenFiles": [ - "Pasted image 20241017113556.png", - "Pasted image 20241017113522.png", - "TERCERO/SS/SS 24-25.md", - "Pasted image 20241017113508.png", - "Pasted image 20241017113506.png", - "Pasted image 20241017113505.png", - "TERCERO/SS/images/Pasted image 20241017113303.png", - "TERCERO/SS/images/Pasted image 20241017112904.png", + "TERCERO/SPD/P4_SPD.md", + "TERCERO/SPD/images/Pasted image 20241022150214.png", + "TERCERO/SPD/images/Pasted image 20241022144832.png", + "TERCERO/SPD/images/Pasted image 20241022144429.png", "TERCERO/SPD/Teoría_2425.md", - "TERCERO/ATR1/images/Pasted image 20241014101113.png", - "TERCERO/ATR1/images/Pasted image 20241014100406.png", - "TERCERO/ATR1/images/Pasted image 20241014100308.png", - "TERCERO/ATR1/images/Pasted image 20241014092122.png", - "TERCERO/ATR1/Teoría_2425.md", + "TERCERO/SPD/images/Pasted image 20241022134454.png", + "Imagen de WhatsApp 2024-10-22 a las 11.43.21_270060da.jpg", + "TERCERO/IA/images/tic-tac-toe.gif", "TERCERO/IA/Teoría_2425.md", + "TERCERO/IA/images/mcts.gif", + "TERCERO/IA/images/mcts.png", + "TERCERO/IA/images/minimax-algorithm-animation.gif", + "TERCERO/SS/images/Pasted image 20241017113556.png", + "TERCERO/SS/SS 24-25.md", + "TERCERO/ATR1/Teoría_2425.md", "TERCERO/SS/SS Lab.md", "SEGUNDO/ADDA/Teoría_2324.md", "TERCERO/IA/Apuntes Julia.md", @@ -222,7 +219,6 @@ "SEGUNDO/SO/Untitled.md", "SEGUNDO/SO/Sin título.md", "SEGUNDO/SO/Sin título.canvas", - "SEGUNDO/SO/Untitled 2.md", - "SEGUNDO/SO/Untitled 1.md" + "SEGUNDO/SO/Untitled 2.md" ] } \ No newline at end of file diff --git a/TERCERO/IA/Teoría_2425.md b/TERCERO/IA/Teoría_2425.md index f4fe9ca..5d8bef4 100644 --- a/TERCERO/IA/Teoría_2425.md +++ b/TERCERO/IA/Teoría_2425.md @@ -324,4 +324,48 @@ y una velocidad $v_{i}$. 2. Cada partícula es atraída hacia la mejor localización que ha sido encontrada **globalmente**: $x^{gb}$ ![[Pasted image 20241011121847.png|400]] -La fuerza con que las partículas son empujadas a cada dirección se basa en la atracción a $x_{i}^{pb}$ y $x^{gb}$. \ No newline at end of file +La fuerza con que las partículas son empujadas a cada dirección se basa en la atracción a $x_{i}^{pb}$ y $x^{gb}$. +# TEMA 5: Búsquedas con incertidumbre +### Juego formal +Un juego formal es una variante de un espacio de estados $(S,P,A,T,g,U)$ donde: +- $S:$ es el conjunto de estados comenzando por el estado inicial $s_{o}\in S$ +- $P:$ es el conjunto de jugadores $P=\{1,\dots ,n\}$ +- $A:$ son las acciones +- $T:$ es la función de transferencia $T:S\times A\rightarrow S$, que indica cómo cambian los estados. +- $g:$ indica si un estado del juego es terminal (goal) $g:S\rightarrow\{true,false\}$ +- $U:$ es una función de utilidad $U:S\times P\rightarrow \rm I\! R$ de estados terminales que indica lo bueno que es un estado terminal para cada jugador. +## 1. Algoritmo Minimax +Los pasos son: +1. Generar el árbol de juego a partir del estado actual hasta llegar a un estado terminal. +2. Se calculan los valores de la función de evaluación para cada nodo terminal. +3. Se evalúan los nodos superiores a partir del valor de los inferiores. Según si estos pertenecen a un nivel MAX o MIN, se elegirán los valores mínimos y máximos representando los valores del jugador y del oponente. +4. Se repite el paso 3 hasta llegar al nodo superior (estado actual). +5. Se selecciona la jugada-nodo directamente accesible desde el actual que maximiza el valor de la evaluación. +![[minimax-algorithm-animation.gif]] +El problema de esta búsqueda es que el número de estados puede ser exponencial. Si $r$ es cuántos hijos tiene cada nodo y $m$ el nivel de profundidad, la complejidad en tiempo es del orden $O(r^m)$ y en espacio del orden $O(rm)$. +### Poda alfa-beta +La idea es que cada nodo se analiza teniendo en cuenta el valor que por el momento tiene el nodo y el valor que por el momento tiene su padre, lo que determina en cada momento un intervalo $(\alpha,\beta)$ de posibles valores que podría tomar el nodo. El intervalo tiene un significado depende del nodo: +- En nodos $MAX$: $\alpha$ es el valor del nodo actual (que tendrá ese valor o superior) y $\beta$ es el valor del padre (que tendrá ese valor o inferior). +- En nodos $MIN$: $\beta$ es el valor del nodo actual (que tendrá ese valor o inferior) y $\alpha$ es el valor del padre (que tendrá ese valor o superior). +La poda se produce si en algún momento $\alpha\geq\beta$ y en ese momento ya no se analizan los sucesores restantes. +## 2. Monte Carlo Tree Search +### Problema de las tragaperras múltiples +Hay $K$ máquinas y cada una suelta una "riqueza" cada vez que se juega. Las riquezas son variables aleatorias $\{X_{i,n}:1\leq i\leq K,n~\geq 1\}$, donde $i$ es el índice de cada máquina y la $n$ la tirada. + +En estas condiciones una **estrategia (policy)** es un algoritmo $A$ que elige la siguiente máquina basándose en la secuencia de jugadas anteriores y los premios recibidos. Si $T_i(n)$ es el número de veces que el algoritmo $A$ ha seleccionado la máquina $i$ durante las primeras $n$ jugadas, la pérdida por no haber elegido siempre la mejor máquina posible viene dada por: +$$ +\begin{equation} +\mu^*n-\sum\limits_{i=1}^K{\mu_{i}E[T_{i}(n)]} +\end{equation} +$$ +donde $\mu^*=max_{1\leq i\leq K}\mu_{i}$ + +Se puede usar una estrategia, llamada **UCB (Upper Confidence Bound)** que construye intervalos estadísticos para cada máquina, que es esencialmente la confianza basada en la media de ganancias dentro de un radio dado por $\sqrt{\frac{2\ln{n}}{T_i(n)}}$. +### Aplicación a búsquedas + +![[mcts.png|600]] +1. **Selección:** se realiza mientras tengamos las estadísticas necesarias para tratar cada estado alcanzado como un problema de tragaperras múltiples. Comenzando por el raíz se selecciona recursivamente el estado más urgente (de acuerdo a UCB) hasta alcanzar un estado terminal o que no está completamente extendido. +2. **Expansión:** para cuando ya no se puede aplicar Selección. Se elige aleatoriamente una posición sucesora no visitada y se añade un nuevo estado al árbol de estadísticas. +3. **Simulación:** partiendo del estado recién añadido se simula una partida completa, ya sea al azar o con una heurística. Se obtiene un valor (premio, recompensa, etc) que determina la utilidad de esa rama para el jugador. +4. **Actualización:** con el estado final alcanzado de la fase anterior se actualizan las estadísticas de todas las posiciones previas visitadas durante la simulación que se ejecutó a partir del nuevo estado (incluyendo la cuenta de ganancias). +![[mcts.gif]] diff --git a/TERCERO/IA/images/mcts.gif b/TERCERO/IA/images/mcts.gif new file mode 100644 index 0000000..0f3610d Binary files /dev/null and b/TERCERO/IA/images/mcts.gif differ diff --git a/TERCERO/IA/images/mcts.png b/TERCERO/IA/images/mcts.png new file mode 100644 index 0000000..86c2a9f Binary files /dev/null and b/TERCERO/IA/images/mcts.png differ diff --git a/TERCERO/IA/images/minimax-algorithm-animation.gif b/TERCERO/IA/images/minimax-algorithm-animation.gif new file mode 100644 index 0000000..762c165 Binary files /dev/null and b/TERCERO/IA/images/minimax-algorithm-animation.gif differ diff --git a/TERCERO/IA/images/tic-tac-toe.gif b/TERCERO/IA/images/tic-tac-toe.gif new file mode 100644 index 0000000..afa2881 Binary files /dev/null and b/TERCERO/IA/images/tic-tac-toe.gif differ diff --git a/TERCERO/SPD/P4_SPD.md b/TERCERO/SPD/P4_SPD.md new file mode 100644 index 0000000..cd0fe8c --- /dev/null +++ b/TERCERO/SPD/P4_SPD.md @@ -0,0 +1,86 @@ +# ASM / C +### a) ¿Qué hace el código? +Recorre el array `arrayx` (empezando por la posición 1) de tamaño `N_ITER` almacenando en la posición `i - 1` la suma del elemento `i` más el `i + 1` entre la constante `f11`. +### b) ¿Cómo se puede escribir en alto nivel? +```C +#define N_ITER 25 + +float arrayx[N_ITER]; +const float f11 = 21.0; + +for(int i = 1; i < N_ITER; i++) +{ + arrayx[i - 1] = ( arrayx[i] + arrayx[i + 1] ) / f11; +} +``` +### c) ¿Son paralelizables directamente? +Sí porque no hay dependencias reales. +```C +#define N_ITER 25 + +float arrayx[N_ITER]; +const float f11 = 21.0; + +for(int i = 5; i < N_ITER; i+=5) +{ + arrayx[i - 1] = ( arrayx[i] + arrayx[i + 1] ) / f11; + arrayx[i - 2] = ( arrayx[i + 1] + arrayx[i + 2] ) / f11; + arrayx[i - 3] = ( arrayx[i + 2] + arrayx[i + 3] ) / f11; + arrayx[i - 4] = ( arrayx[i + 3] + arrayx[i + 4] ) / f11; + arrayx[i - 5] = ( arrayx[i + 4] + arrayx[i + 5] ) / f11; +} +``` +### d) Como la BTB predice siempre tomado ¿cuándo acierta? +La BTB acertará en todas las iteraciones del bucle excepto en la última porque predice salto tomado y no debería tomarlo porque el bucle ha acabado. +![[Pasted image 20241022134454.png]] +### e) Si la BTB de un GPP es muy sofisticada ¿acertará en los saltos? +... +# Visual Studio +La función más paralelizable es **`pp4()`** ya que sólo tiene una operación de cada tipo (**`LD, SF, ADDF, SLTI, ADDI`**) y no hay saltos condicionales en el bucle. +```C +double pp4() +{ + int i; + for (i = 0; iMáquina en la que se ejecuta el código real: + +![[Pasted image 20241022144429.png|400]] + +### Comparativa + +| `pp2()` | `nuestro` | +| -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| double pp2()
{
int i;
for (i = 0; i a[i] = 3.14 / sqrt(b[i]+c[i]);
}
return a[N_ITER - 1];
} | # define N_ITER 25

float arrayx[N_ITER];
const float f11 = 21.0;

for(int i = 1; i < N_ITER; i++)
{
arrayx[i - 1] = ( arrayx[i] + arrayx[i + 1] ) / f11;
} | +| Este código tiene:
- 2x LDF
- 1x STF
- 1x ADDF
- 1x DIVF
- 1x constante | Nuestro código tiene:
- 2x LDF
- 1x STF
- 1x ADDF
- 1x DIVF
- 1x constante | +| | | +### Duración de CPI en los bucles + +| Release | Debug | +| ------------------------------------ | ------------------------------------ | +| ![[Pasted image 20241022144832.png]] | ![[Pasted image 20241022150214.png]] | + +(Todo para config1 y config2) +1. CPI (supertomasim) +2. CPI (reordenado). Cambiar escalaridad (m=1, m=grande). +3. Identificar CPI_bloq +5. GFLOPS (o MIPS) +6. CPI (pp2 pp4) y Ac +7. Cronograma \ No newline at end of file diff --git a/TERCERO/SPD/images/Pasted image 20241022134454.png b/TERCERO/SPD/images/Pasted image 20241022134454.png new file mode 100644 index 0000000..d9c9892 Binary files /dev/null and b/TERCERO/SPD/images/Pasted image 20241022134454.png differ diff --git a/TERCERO/SPD/images/Pasted image 20241022144429.png b/TERCERO/SPD/images/Pasted image 20241022144429.png new file mode 100644 index 0000000..3342f23 Binary files /dev/null and b/TERCERO/SPD/images/Pasted image 20241022144429.png differ diff --git a/TERCERO/SPD/images/Pasted image 20241022144832.png b/TERCERO/SPD/images/Pasted image 20241022144832.png new file mode 100644 index 0000000..289b6b2 Binary files /dev/null and b/TERCERO/SPD/images/Pasted image 20241022144832.png differ diff --git a/TERCERO/SPD/images/Pasted image 20241022150214.png b/TERCERO/SPD/images/Pasted image 20241022150214.png new file mode 100644 index 0000000..332a77c Binary files /dev/null and b/TERCERO/SPD/images/Pasted image 20241022150214.png differ diff --git a/Pasted image 20241017113556.png b/TERCERO/SS/images/Pasted image 20241017113556.png similarity index 100% rename from Pasted image 20241017113556.png rename to TERCERO/SS/images/Pasted image 20241017113556.png