21 KiB
TEMA 1: Introducción a la lógica
Lógica proposicional
Se utiliza un conjunto de variables atómicas (T ó F, V ó F) llamadas variables proposicionales. Se usan unas conectivas (u operadores) los cuales son:
- Negación (
\neg ...) - Disyunción (
... \lor ...) - Conjunción (
... \land ...) - Implicación (
... \implies ...) - Doble implicación (
... \iff ...) Una forma de dar significado a las conectivas son las Tablas de Verdad. !Pasted image 20240913105735.png Este tipo de problemas se llaman problemas SAT (o de satisfacción de restricciones). Son NP-Completos. El método de las tablas de verdad, es exponencial (2^n).
Consecuencia Lógica
Una fórmula F es consecuencia lógica de un conjunto finito de fórmulas U y se denota U\models F, si se verifica que F_1\land...\land F_n\rightarrow F es una tautología.
def.
TAUTOLOGÍA: Siempre es verdad
### Ejemplo
_Si continúa la investigación, surgirán nuevas evidencias. Si surgen nuevas evidencias, entonces varios dirigentes se verán implicados. Si varios dirigentes están implicados, los periódicos dejarán de hablar del caso. Si la continuación de la investigación implica que los periódicos dejen de hablar del caso, entonces, el surgimiento de nuevas evidencias implica que la investigación continúa. La investigación no continúa. Por tanto, no surgirán nuevas evidencias._
p: Continúa la investigación
q: Surgen nuevas evidencias
r: Varios dirigentes se verán implicados
s: Los periódicos dejarán de hablar del caso
Por tanto:
\{p\implies q,q\implies r, r\implies s,(p\implies s)\implies (q\implies p), \neg p\}
En conclusión: !q
Fórmulas equivalentes
Dos fórmulas F_1 y F_2 se dicen equivalentes si tienen la misma tabla de verdad, o si F_1 \iff F_2 es una tautología.
Forma Normal Conjuntiva
Una fórmula se dice que está en FNC (ó clausal) si es conjunción de disyunciones de literales (producto de sumas).
Algoritmo DPLL
Este algoritmo permite calcular los modelos, lo cual no es suficiente para saber si es una tautología o no, porque hace falta también saber el número de modelos. Sin embargo, si que sirve por si mismo para saber cuando algo no es satisfactible (todas las ramas acaban en contradicción).
Nota
\{p,q,r\},\{\neg{p},q,r\},\{p,\neg{q}\},\{p,r\},\{p\}
que es igual que
\{p\lor{q}\lor{r}\}\land\{\neg{p}\lor{q}\lor{r}\}\land\{p\lor{\neg{q}}\}\land\{p\lor{r}\}\land\{p\}
!Pasted image 20240913113533.png
\{□\} son cláusulas vacías o contradicciones
Otro ejemplo
$(F_1\land ...\land F_n)\implies F\in~TAUT$ $\{F_1,...,F_n,\neg F\}\notin SAT$
Otro ejemplo
$p\equiv$ Todos los hombres son mortales $q\equiv$ Sócrates es un hombre $r\equiv$ Sócrates es mortal
Es insuficiente para representar el problema por la independencia de las frases y por la aparición de objetos, propiedades y cuantificadores. Aparece la Lógica de Primer Orden (LPO)
## Lógica de Primer Orden NO existen métodos "mecánicos" para LPO
Siguiendo el ejemplo de Sócrates:
s\equiv Sócrates
H(x)\equiv Es un hombre
M(x)\equiv Es mortal
Por tanto:
\left.
\forall{x}~(H(x)\implies{M(x)})\atop
H(s)
\right\}\longrightarrow{
\left.
\forall{x}~(H(s)\implies{M(s)})\atop
H(s)
\right\}\longrightarrow{
\left.
p\implies{q}\atop
p
\right\}\models{q}\longrightarrow{
\{p\implies{q},p,\neg{q}\}
}
}
}
Ejemplo: problema de las n reinas
$r_{ij}\equiv$ en la casilla $[i,~j]$ está una reina $r_{ij}\implies\neg{r_{i1}}\land ... \land\neg{r_{in}}$ O también: $r_{ij}\implies\land|k\neq{j}~~~~\neg{r_{ik}}$
TEMA 2: Problemas de Satisfacción de Restricciones
Son problemas que básicamente extienden la LP/LPO. Proporciona más capacidad para resolver problemas, pero a su vez hace dicha resolución más compleja.
1. Definir problemas CSP
Un problema CSP viene dado por la terna (X,D,C) donde:
X = \{x_1,...,x_n\}es un conjunto de variablesD = \langle D_1,...,D_n\ranglees un vector de dominios (D_icontiene a todos los posibles valores que puede tomarx_i)Ces un conjunto finito de restricciones (valoresk-arios\equiv \{x_{i1},...,x_{ik}\}). Cada restricción se define sobre un conjunto dekvariables deXpor medio de un predicado que restringe sus valores.
Una asignación de variable es un par (x,a) (o x=a) que representa asignar el valor a a la variable x. Una asignación de un conjunto de variables sería un conjunto de tuplas ordenadas ((x_i,a_i),...,(x_k,a_k)) donde cada par asigna el valor a_i\in D_i a x_i.
Una tupla es localmente consistente si satisface todas las restricciones que tienen que ver con ella. Un CSP es consistente si tiene al menos una solución. Normalmente se intenta encontrar:
- Una solución.
- Todas las soluciones.
- Una solución óptima (usando una función objetivo).
2. Métodos de resolución
Fuerza bruta
Fuerza-Bruta
As = D₁ × … × Dₙ
Para cada A ∈ As:
Si A es consistente
Devolver A
Parar
Devolver false
El inconveniente obvio de este método es que puede requerir una cantidad excesiva de memoria inicial para almacenar el conjunto completo de las asignaciones y una cantidad excesiva de tiempo para encontrar la solución en el caso peor.
Backtracking (BT)
!Pasted image 20240920111350.png Las asignaciones parciales se extienden solamente cuando NO son inconsistentes. Al encontrar una asignación inconsistente se "poda" o deja de explorar ese espacio de asignaciones.
Una posible implementación (en pseudocódigo) sería:
BT(A, U)
Si A es completa
Devolver A
Seleccionar una variable x de U
U ← U − {x}
Para cada v ∈ D(x):
Si {x = v} es consistente con A
res ← BT(A ∪ {x = v}, U)
Si res ≠ false
Devolver res
Devolver false
Existen algunas estrategias para la optimización de BT:
- Valores Mínimos Restantes (MRV): se elige la variable no asignada con menos valores restantes válidos, ya que es posible que se quede sin valores válidos antes y que de lugar a un retroceso.
- Valor Menos Restrictivo (LCV): se selecciona el valor (de variable) que elimine el menor número de valores de los dominios de los valores sin asignar restantes.
- Min-conflicts: ordena los valores de acuerdo a los conflictos en los que estos están involucrados con las variables no asignadas. Esta heurística asocia a cada valor de la variable actual, el número total de valores en los dominios de las futuras variables adyacentes que son incompatibles con él. El valor seleccionado es el asociado a la suma más baja.
TEMA 3: Espacios de estados
Esencialmente un espacio de estados es una 4-tupla (X,S,G,T), donde:
Xes el conjunto de estadosS\subseteq Xes un conjunto no vacío de estados inicialesG\subseteq Xes un conjunto no vacío de estados finalesT:X\rightarrow P(X)es una función de transición El problema consiste en decidir si, partiendo desde los estados deS, se puedeGaplicandoT.
Problema: misioneros-caníbales
Se podría representar matemáticamente de la siguiente forma:
(m_D,~c_D,~m_I,~c_I,~b)~o~tambien:~(m_D,~c_D,b) ya que m_D+m_I=3 y c_D+c_I=3
S=(m_D,~c_D,b)
b=0:
(m,c)0\leq m\leq m_I0\leq c\leq c_I1\leq m+c \leq 2a(m,c)\rightarrow S'=(m_I-m,~c_I-c,~1)
b=1:
(m,c)0\leq c \leq 3·m_I0\leq c \leq 3-c_I1\leq m+c \leq 2a(m,c)\rightarrow S'=(m_I+m,~c_I+c,~0)
valid(S):
m_I\geq c_I3-m_I\leq 3-c_I
S\longrightarrow valido(S):
Sí\implies calcular~y~aplicar~A(S)No\implies S'=S
Problema: todos los dígitos del rey
Sea el conjunto S=\{0,...,9\}, insertar los símbolos de los operadores aritméticos (\times +-/) entre ellos para que la expresión resultante se evalúe como 100.
S=(+,~·,~-,~+,~+,...)
1. Posibles algoritmos
function Generate-X-from(S)
Fr = S
X = Fr
while(Fr ∩ G = ∅)
Fr = T(Fr)
X = X ∪ Fr
return X
end
- Parte de la frontera inicial
Fr = S - Se aplican todas las
Tposibles - Se acumula
FrenXpara no perder los estados obtenidos - Si en
Frno hay elementos deGse vuelve a empezar hasta que lo haya y se retorne
Una mejora del algoritmo anterior es añadiendo una selección:
function Selected-Search-from(s0)
Fr = {s0}
X = Fr
while(Fr ∩ G = ∅)
sel_s = select(Fr)
Fr = Fr ∪ T(sel_s) - {sel_s}
X = X ∪ Fr
return X
end
Donde select() sería una función que selecciona el estado a expandir en este paso. Por ejemplo se puede tomar select(C) = rand(C), y se convertiría en búsqueda aleatoria.
Búsquedas no informadas (DFS, BFS)
function bfs(vecinos::Function, s_0, G)
# lista de tuplas que almacena el vértice actual y el camino hacia él
bfsCola = [(s_0, [])]
# conjunto de visitados
visitados = Set()
# mientras la cola esté llena
while length(bfsCola) != 0
# se asigna a s, camino_s el valor de la tupla actual
s, camino_s = pop!(bfsCola)
# si s es final, termina
if s in G
# devuvelve el camino de llegada al vértice final
return camino_s, push!(visitados, s)
end
# si s no es final
if s in visitados
continue
end
# s se mete en el conjunto de visitados
push!(visitados, s)
# para cada acción y vértice se mete en la cola
# el vértice y el camino hasta él (camino anterior
# más la nueva acción)
for (a_ss', s') in vecinos(s)
push!(bfsCola, (s', push!(camino_s, a_ss') ) )
end
end
return :nopath
end
DFS y BFS son lo que se llaman búsquedas ciegas.
Búsqueda informada: A*
A* lo que hace en cada paso básicamente es:
g(s)=coste(s)+h^*(s)
Y además guarda un "historial" y mantiene la cola abierta.
Con todo esto, intenta elegir el camino mínimo más óptimo, siendo el final del algoritmo no el vértice final sino cuando el coste es mínimo.
EJERCICIO A*
A\rightarrow B:1
A\rightarrow D:1
A\rightarrow C:1
B\rightarrow D:2
C\rightarrow D:1
C\rightarrow F:2
D\rightarrow E:2
D\rightarrow F:1
E\rightarrow F:1
E\rightarrow G:1
F\rightarrow G:2
G\rightarrow H:2
F\rightarrow H:3
| Nodo | A |
B |
C |
D |
E |
F |
G |
H |
|---|---|---|---|---|---|---|---|---|
| h(Nodo) | 4 |
4 |
3 |
3 |
2 |
3 |
2 |
0 |
TEMA 4: Optimización
A diferencia de las búsquedas como A*, no se tienen todos los nodos hijos disponibles, si no que se escoge uno aleatoriamente. Se intenta minimizar la "energía" de nodo en nodo.
1. Templado simulado
!Pasted image 20241009084536.png Este método casi no tiene memoria, ya que al pasar a un vecino "se olvida" de lo anterior, sólo almacena el mejor nodo que ha visto.
- Función de energía: que mide la calidad de una solución.
- Temperatura: nº de saltos que puede dar. Una posible implementación en pseudocódigo:
Algoritmo: Templado Simulado (T₀, s₀, N, γ < 1, ϵ > 0)
T = T₀
while T > ϵ
Repeat N:
s₁ = Genera_vecino(s₀)
∆E = E(s₀) − E(s₁)
if ∆E > 0
s₀ = s₁
else
con probabilidad exp(∆E/T): s₀ = s₁
T = T ⋅ γ
return s₀
Las iteraciones del algoritmo están perfectamente acotadas ya que dependen de T, de \gamma, y de N.
Describe de forma general cómo se puede usar templado simulado para un problema de satisfacción de restricciones
:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:·:
s=(x_{1}=a_{1},\dots,x_{n}=a_{n})\forall a_{i}\in D_{i}
S=D_{1}\times D_{2}\times\dots\times D_{n}
v(s)=s~cambiada~en~una~posicion~al~azar
E(s)=Nº~restricciones~de~C~que~no~se~cumplen
2. Optimización por Enjambre de Partículas (PSO)
Se tienen N partículas denotadas \{1,...,N\} donde cada partícula tiene una posición x_{i}
y una velocidad v_{i}.
- Cada partícula es atraída hacia la mejor localización que ella, personalmente, ha encontrado:
x_{i}^{pb}(componente cognitivo) - Cada partícula es atraída hacia la mejor localización que ha sido encontrada globalmente:
x^{gb}(componente social)
!Pasted image 20241011121847.png
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 inicials_{o}\in SP:es el conjunto de jugadoresP=\{1,\dots ,n\}A:son las accionesT:es la función de transferenciaT: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 utilidadU:S\times P\rightarrow \rm I\! Rde estados terminales que indica lo bueno que es un estado terminal para cada jugador.
1. Algoritmo Minimax
Los pasos son:
- Generar el árbol de juego a partir del estado actual hasta llegar a un estado terminal.
- Se calculan los valores de la función de evaluación para cada nodo terminal.
- 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.
- Se repite el paso 3 hasta llegar al nodo superior (estado actual).
- Se selecciona la jugada-nodo directamente accesible desde el actual que maximiza el valor de la evaluación.
!
El problema de esta búsqueda es que el número de estados puede ser exponencial. Si res cuántos hijos tiene cada nodo ymel nivel de profundidad, la complejidad en tiempo es del ordenO(r^m)y en espacio del ordenO(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:\alphaes el valor del nodo actual (que tendrá ese valor o superior) y\betaes el valor del padre (que tendrá ese valor o inferior). - En nodos
MIN:\betaes el valor del nodo actual (que tendrá ese valor o inferior) y\alphaes el valor del padre (que tendrá ese valor o superior). La poda se produce si en algún momento\alpha\geq\betay 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
- 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.
- 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.
- 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.
- 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).
!

TEMA 6: Fundamentos de ML
Básicamente se trata de crear algoritmos capaces de generalizar comportamientos y reconocer patrones a partir de unos datos de entrada. De la forma:
\begin{equation}
f:D\rightarrow r
\end{equation}
sea f una función que dados unos datos D da un resultado r. Hace falta saber, cómo se manipulan los datos, qué datos se cogen y cómo calcular los errores. ML es una mezcla de técnicas de álgebra (para representación vectorial de los parámetros de f) y optimización.
Aprendizaje supervisado
Se trata de D\rightarrow ML\rightarrow f~aprox~D (o minimizar el error entre D y f). Los datos se suelen dividir en dos bloques, uno de entrenamiento (D_{train}), y otro de validación (D_{val}) para calcular el error empírico (ya que esos datos "no los ha visto"). También puede haber un tercer bloque de test (D_{test}) para usarse luego de repetir varias veces el entrenamiento.
TEMA 8: Redes neuronales
Dado un dataset D=\{(\vec{x},y)\} hay que encontrar una función f\rightarrow f(\vec{x})~\textasciitilde~y~\forall~(\vec{x},y)\in D. Hay dos posibles espacios:
- Lineal:
f(x)=mx+n - Polinómica:
f(x)=a_0+a_1x+a_2x^2+\dots+a_nx^nque se puede aproximar mediante sus parámetros(a_0,a_1,a_2,\dots,a_n)
Funcionamiento básico
- Entrada de datos: La capa de entrada recibe un vector numérico.
- Peso y sesgo: Cada conexión entre las neuronas de una capa y la siguiente tiene un peso asociado, y cada neurona de la capa siguiente tiene un sesgo (constante ajustable)
- Suma ponderada: En cada neurona consideramos la suma ponderada de los valores de las neuronas entrantes a ella, así como de su sesgo.
- Función de activación: Se aplica una función no lineal sobre los valores que tiene como objetivo cambiar los valores de manera no lineal.
- Capa de salida: Los valores calculados en la capa de salida son el cálculo final. !Pasted image 20241115112854.png Para esta red, que es muy simple, hacen falta 44 parámetros (32 pesos y 12 sesgos).
1. Teorema de aproximación universal
Supongamos:
K\subset ℝ^dfuna función coste arbitraria enC(K,ℝ)\epsilon\in ℝ^darbitrario\sigmafunción continua no constante, acotada y creciente Entonces:\exists n\in N / b_i\in ℝ,~v_i\in ℝ~y~w_i\in ℝ^d~\forall i\in \{1,\dots,d\}tales que se cumple la desigualdad:\max\limits_{x\in K}|φ(x)-f(x)|<\epsilon
2. Funciones de coste
Error/coste cuadrático
C_2(W,b):=\frac{1}{2|T|}\sum\limits_{x\in T}{||y(x)-a(x)||_2^2}
Encontrar la mejor red es encontrar la red con el menor error posible.
