from pylab import *
%matplotlib inline
On dispose d'une machine que l'on doit remplacer de temps en temps. On note $X_t\in\{0,\dots,S\}$ l'age de la machine à l'instant $t$ ($t$ est discret). Si machine a un age $x$, elle tombe en panne avec probabilité $p_x$ entre $t$ et $t+1$ et doit être remplacée ce qui coûte $C$. La machine peut aussi être remplacé de façon pro-active à un coût $C$. Elle doit être remplacée dès que l'age atteint $S$.
Le but de cet exercice est de calculer une politique de remplacement qui minimise le coût actualisé de remplacement.
Formuler le problème comme un processus de décision Markovien:
## Paramètres numériques
p = [.5-.5*cos(.1*k/pi) for k in range(-40,100)]
plot(p)
S=140 # Taille de l'espace d'état
C = 3
R = 1
delta = .99
Écrire un algorithme qui utiliser "value iteration" pour calculer une politique optimale de remplacement (en complétant le code ci dessous). Tracer la politique et la fonction de valeur en fonction de l'état.
V = [0]*S # On initialise la fonction de valeur
# Value iteration algorithm
for i in range( SOMETHING ):
for s in range(S-1):
V[s] = min ( SOMETHING )
V[S-1] = SOMETHING
# Meilleure politique
policy = [0]*S
for s in range(S-1):
if SOMETHING :
policy[s] = 1
# Pour tracer
subplot(2,1,1); plot(policy)
subplot(2,1,2); plot(V)
Le but de cette question est d'écrire un algorithme utilisant l'algorithme "policy iteration" pour calculer une politique optimale. On rappelle l'algorithme:
Note: de façon matricielle, le $V_{\pi}$ de l'étape 2 est la solution d'un système linéaire qui est peut s'écrire comme $V_\pi = (I-Q_{\pi})^{-1} C_\pi $
Écrire deux fonctions Q_C_pi(politique) qui retourne la matrice de transition et de coût correspondant à la politique.
def Q_C_pi(politique):
Q_pi = matrix([[0.]*S for i in range(S)])
C_pi = [0]*S
for s in range(S):
if (politique[s]==1): # We replace
#SOMETHING
else:
#SOMETHING ELSE
return(Q,transpose(matrix(C_pi)))
policy = [1]*S
for iteration in range(10):
Q_pi,C_pi = Q_C_pi(policy)
V_pi = # SOMETHING
new_policy = #SOMETHING
if policy == new_policy: break
policy = new_policy
print('convergence in {0} iterations'.format(iteration))
subplot(2,1,1); plot(V_pi)
subplot(2,1,2); plot(policy)
On intéroge $n$ candidats pour un poste. Notre but est d'embaucher le meilleur des $n$ candidats.
Après avoir intérogé un nouveau candidat, on sait s'il est meilleur que les candidats précédents (mais pas comment il se comparera aux suivants). Il faut alors décider soit de l'embaucher, soit de passer au suivant (mais on ne peut pas revenir en arrière).
Le but est de maximiser la probabilité d'embaucher le meilleur candidat.