---
title: "CMKV: Implementation d'algorithme"
date: 2021-09-30 09:00
categories: [Image S9, CMKV]
tags: [Image, SCIA, S9, CMKV, sudoku, pastis]
description: Implementation d'algorithme
---
Lien de la [note Hackmd](https://hackmd.io/@lemasymasa/rytKW1QEF)
$$
T_{t+1}\leftarrow T_{t+1}\times\alpha
$$
:::info
Evaluation : projet
:::
# L'algorithme
On fait une marche aléatoire
```
T_∅ <- ?
loop i_cond <- ?
tirage
```
On tire un $x_{candidat}$, on preserve tous les $x\neq x_{candidat}$
$$
x=(x_1^{(t)},\dots,\color{blue}{x_{candidat}}, x_{candidat+1}^{(t)}, x_{N}^{(t)})
$$
Au lieu de changer touT le vecteur, on ne change qu'une valeure (le $x_{candidat}$), l'algorithme convergera plus vite
$$
\begin{matrix}
&x_{candidat}=(&\text{idem},&\boxed{i_{random}},&\text{idem},&\boxed{i_{random}},&\text{idem})\\
&&\updownarrow &\searrow&\updownarrow&\swarrow&\updownarrow\\
&&&\nearrow&&\nwarrow&\\
&x^{(t)} = (& &\boxed{} & &\boxed{} &)
\end{matrix}
$$
Comment choisir alpha ?
On le prend très proche de 1
Algorithme de descente - principe :
- parcourir toutes les variables
- Et pour chacunes des variables on parcourt toutes les valeurs possibles et on minimise l'energie (U) : Ca converge forcement mais ca converge vers un minimum local (et c'est pas ce qu'on cherche)
$$
x^{(t+1)}=(\text{arg}\min_{\omega_1\in\Omega_1}U(\omega_1,x_2^{(t)}), x_2^{(t)})\quad\text{var #}1\\
x^{(t+2)}=(x_1^{(t+1)}, \text{arg}\min_{\omega_2\in\Omega_2}U(\omega_2,x_2^{(t+1)}))\quad\text{var #}2\\
$$
Ici, la solution (le x que l'on retient) est le x tel que $U_{courant} = min$
:::info
Tour statistique : si j'itere 1million de fois,c'est sur que j'ai parcouru toutes mes variables
:::
```
∞ loop
Umin
pour toutes les variables
... descente
Ucourant
si Ucourant = Umin
conv. or
sinon
Umin = Ucourant
```
Notre algo n'est PAS une descente, c'est un optimiseur ! (On cherche minimum global, pas local)
$$
P_{T_{\varnothing}}=\lim_{T\to\infty}P_T\\
$$
Loi aléatoire avec une marche uniforme : c'est le CHAOS
![](https://i.imgur.com/pE38hIP.gif)
*Comment on choisi $T_0$ ?*
On prend une grande et une petite valeur de temperature et on fait une **dichotomie**. On mesure le nombre de fois ou on a monte et descendu en energie, ces mesure doivent etre equivalentes.
*Si on a une temperature trop faible ?*
Alors ce n'est pas une loi uniforme.
$----->T$ Plus T élevée (on va vers la droite) plus on se rapproche d'une loi uniforme
$$
\begin{matrix}
T_{min} &T_{cherche} &T_{max}\\
&\equiv&\\
&\text{uniforme}&
\end{matrix}
$$
Si $T_{min}$ et $T_{max}$ loi uniforme alors on est trop a droite. Inversement, on sera trop à gauche. On veut donc : $T_{max}$ grand et $T_{min}$ petit mais pas trop.
*Comment on fait la dichotomie ?*
Il ne faut pas *uniforme* ou *pas uniforme*, il faut du **suffisemment uniforme**.
**Recap**
On cherche $T_0$ tq $P(T_0)$ suit une loi suffisemment uniforme
Il faut donc prendre un $T_{min}$ et $T_{max}$ avec une loi pas uniforme pour le min et uniforme pour le max.
On fait donc une dichotomie qui nous ramenera a 2 lois suffisemment uniforme pour trouver le $T_0$
![](https://i.imgur.com/AMMFXPo.jpg)
![](https://i.imgur.com/ZhtNcLw.png)
Peu de montées par rapport aux descentes énergétiques $=$ on converge
Si je n'arrive pu à monter alors je suis proche de ma solution
*Comment on optimise des tirages aleatoires ?*
Ou
$$
i_{\text{candidat swap }1}\quad i_{\text{candidat swap }2}
$$
:::success
On les precalcule
:::danger
Le precalcul a un **biais**
:::
:::
On va utiliser un tableau circulaire.
```
loop
icandidat <- aleatoire
```
:::warning
C'est pas possible, on aura des valeurs enormes
:::
On a un tableau de valeurs $x_{candidat}$ de longueur $L$:
| $\dots$ | $a_i$ | $\dots$ |
| ------- | ----- |:-------:|
$L$ est tres grand et nombre premier
On va faire un damier, $x^{(t)}=$
| $1$ | $11$ | $2$ | $12$ | $3$ |
| ---- | ---- | ---- | ---- |:----:|
| $13$ | $4$ | $14$ | $5$ | $15$ |
| $6$ | $16$ | $7$ | | $8$ |
| | $9$ | | $10$ | |
Par exemple, $4$ depend des valeurs qui l'entoure:
| | $11\updownarrow$ | |
| ------------------- | ---------------- | ------------------- |
| $13\leftrightarrow$ | $4$ | $\leftrightarrow14$ |
| | $16\updownarrow$ | |
$$
P_T(X=x)=\frac{1}{Z_T}e^{-\frac{U(x)}{\color{blue}{T}}}
$$
:::info
**Propriete Markovienne**
La probabilite d'avoir $X^i=(x_1,\dots,x_{i-1},x_{i+1},\dots,x_n) = X\setminus X_i$
$$
P(X_i=x_i\vert X^i=x^i) = P(X_i=x_i\vert X_{\nu_i}=x_{\nu_i})
$$
:::
$$
X_{\nu_i}=(X_{\nu_1^i},\dots,X_{\nu_w^i})
$$
:::danger
$\nu_i$: voisinnage de $i$
:::
:::success
Le voisinnage d'un graphe complet d'un noeud c'est tous les noeuds sauf lui-meme
:::
$$
\to \overbrace{X_{t-2}\to \underbrace{X_{t-1}\to X_t}_{P(X_t=x_t\vert X_{t-1}=x_{t-1})}}^{\color{blue}{P(X_t\vert X_{t-2})}}
$$
La propriété Markovienne est équivalente à celle des chaines de Markov
$$
\mathcal N(e)\text{ verifie}\begin{cases}
e\not\in \mathcal N(e)\\
e\in\mathcal N(e')\Rightarrow e'\in\mathcal N(e)
\end{cases}
$$
:::info
**Clique**
C'est un ensemble de sommets qui sont voisins soit:
$$
E=\{\dots e_i\dots\}
\begin{cases}
E\neq\emptyset\\
\text{et}\\
\forall e,e'\in E,e\mathcal N e'\\
\text{ou}\\
\bar E=1
\end{cases}
$$
$e\mathcal N e'$: $e$ et $e'$ sont voisins
:::
E est un ensemble de sommet 2 à 2 voisins
un singleton est une clique, on dit que c'est une clique d'ordre 1
Une clique d'ordre n c'est un ensemble de n sommet 2 a 2 voisins
```
4 ord 1
4 ord 2
1 ord 3
----
9
```
Un graphe complet que l'on reduit aux voisins permet de reduire la dependance des variables.
$$
P(X=x)=\Pi_{\text{c clique}}\phi(x_c)
$$
- $\phi(x_c)$: fonction potentiel pour la clique $c$
![](https://i.imgur.com/D1HeI0H.png)
Toujours vrai si $\not\exists x, P(X=x)=\varnothing$
$$
\begin{aligned}
P(X=x)&=\frac{1}{Z}e^{-U(x)}\\
&= \frac{1}{Z}e^{-\sum_{c}E_c(x_c)}
\end{aligned}
$$
- Avec $U_c=\phi_c$ fonction potentielle pour la clique $c$
Modele graphique qui est un champs de Gibbs ?
:::danger
On doit definir les fonctions $U_c$ et $\phi_c$, avec:
$$
U(x)=\sum_{c}U_c(x_c)
$$
:::
$\bar c$: ordre de la clique
# Exemple
Sur une image en niveau de gris
$$
P(X=x\vert Y=y)=e^{-\sum_cU_c(x_c,y)}
$$
$X_i$ depend de $X_{i+1}$, $X_{i-1}$, $X_{i+nc}$, $X_{i-nc}$
![](https://i.imgur.com/fm0a9YI.png)
Probabilité équiprobable -> U vaut 0
on a une vraissemblance quand on melange X et Y
$$L(X=x_i|Y=y_i) \text{ proportionnelle à } e^{-U_{L}(x_i,y_i)}$$
Avec $U_L(...)$ une clique d'ordre 2
$$
U(X_i=\underbrace{x_i}_{\text{ordre }1})=\frac{1}{2}\\
U_1(\underbrace{\text{noir}}_{\text{dans }x})=\frac{1}{2}\\
U_1(\text{blanc})=\frac{1}{2}\quad\forall\text{ probabilite}
$$
$$
U_2(\underbrace{x_i,x_j}_{\text{ordre }2} = 1_{x_i\neq x_j})
$$
Avec $i$ et $j$:
- voisins
- independants
Definissons $U_L$
$$
U_L(x_i,y_i) = \begin{cases}
255-y_i&\text{si } x_i=\text{blanc et } j\text{ voisins et inde}\\
y_i&\text{sinon}
\end{cases}
$$
Tadaaa commande magique :clap: :clap: :cake: :cactus: :call_me_hand: :jack_o_lantern: :cat:
:heart:
$$
\begin{aligned}
U(x,y)&=\sum_cU_c(x_c,y)\\
&=\sum_iU_1(x_i)+\overbrace{\sum_{i,j_{voisins}}U_2(x_i,x_j)}^{\sum_i\sum_{j\in\mathcal N(i)}U_2(x_i,x_j)}+\sum_iU_2(x_i,y_i)\\
&= \sum_i\biggr(\overbrace{
U_2(x_i,y_i)
}^{\color{blue}{L(X\vert Y)
}}
+\overbrace{
\underbrace{
U_1(x_i)
}_{\text{ordre } 1}+
\underbrace{
\sum_{j\in\mathbb N(i)}U_2(x_i,x_i)
}_{\text{ordre } 2}
}^{P_{(\text{a priori})}}\biggr)\\
\Rightarrow U(x,y)&=\sum_iU_i(x_i,x_{\nu_i},y_i)
\end{aligned}
$$
Les énergies sont liées au proba
P appriori = P sachant ...
Produit de P = Somme U (Car exp)