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 12e32dd..1a71507 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -4,17 +4,20 @@ "type": "split", "children": [ { - "id": "17c97c00f5ee559a", + "id": "f491ef2f17ba35d2", "type": "tabs", "children": [ { - "id": "3a67e3b42b337af2", + "id": "47f31f3d8e0f4eb6", "type": "leaf", "state": { - "type": "empty", - "state": {}, - "icon": "lucide-file", - "title": "Nueva pestaña" + "type": "diff-view", + "state": { + "file": "TERCERO/SPD/P4_SPD.md", + "staged": true + }, + "icon": "git-pull-request", + "title": "Diff View (P4_SPD)" } } ] @@ -170,21 +173,22 @@ "obsidian-git:Open Git source control": false } }, - "active": "b40a18c39aef8e17", + "active": "47f31f3d8e0f4eb6", "lastOpenFiles": [ + "conflict-files-obsidian-git.md", + "TERCERO/SPD/images/Pasted image 20241022150214.png", + "TERCERO/SPD/images/Pasted image 20241022144832.png", + "TERCERO/SPD/images/Pasted image 20241022144429.png", + "TERCERO/SPD/images/Pasted image 20241022134454.png", + "TERCERO/SPD/P4_SPD.md", + "TERCERO/IA/images/tic-tac-toe.gif", + "TERCERO/IA/images/minimax-algorithm-animation.gif", + "TERCERO/IA/images/mcts.png", + "TERCERO/IA/images/mcts.gif", "TERCERO/SS/images/Pasted image 20241017113556.png", "TERCERO/SS/images/Pasted image 20241017113303.png", - "TERCERO/SS/images/Pasted image 20241017112904.png", - "TERCERO/ATR1/images/Pasted image 20241020204947.png", - "TERCERO/ATR1/images/Pasted image 20241020204701.png", - "TERCERO/ATR1/images/Pasted image 20241020204340.png", - "TERCERO/ATR1/images/Pasted image 20241020204107.png", "TERCERO/SPD/Teoría_2425.md", "TERCERO/SS/SS 24-25.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/IA/Teoría_2425.md", "TERCERO/SS/SS Lab.md", @@ -217,7 +221,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/conflict-files-obsidian-git.md b/conflict-files-obsidian-git.md new file mode 100644 index 0000000..d8bbd4f --- /dev/null +++ b/conflict-files-obsidian-git.md @@ -0,0 +1,17 @@ +# Conflicts +Please resolve them and commit them using the commands `Git: Commit all changes` followed by `Git: Push` +(This file will automatically be deleted before commit) +[[#Additional Instructions]] available below file list + +- Not a file: .obsidian/workspace.json + +# Additional Instructions +I strongly recommend to use "Source mode" for viewing the conflicted files. For simple conflicts, in each file listed above replace every occurrence of the following text blocks with the desired text. + +```diff +<<<<<<< HEAD + File changes in local repository +======= + File changes in remote repository +>>>>>>> origin/main +``` \ No newline at end of file