1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| //Initialisation des états à une valeur nulle
n<----- 0
pour tout i∈E
V_n (i)= 0
fin pour
//Calcul récursif des valeurs jusqu'au passage sous un seuil
Répéter
n<------- n+1
pour tout i∈E faire
V_n (i)=〖max〗_a [R(i,a)+ α∑_jϵE〖P(i,a,j) V_(n-1) (j)〗]
fin pour
jusqu'à 〖max〗_i |V_n (i)-V_(n-1) (i)| < ε
retourner Vn.
------------------------
j'ai fait un essais mais ça marcha pas:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
int main(int argc, char *argv[])
{
/* Déclarations */
float P[25][25][25];
float R[25][25]; /* matrice recompense */
float V[25][25],VI[25][25],VII[25][25];
float max;//,MAX;
int A,a,E,i,n,j,K;
float alpha,epsilon;
/* Saisie des données */
printf("Entrer le nombre des etats (max.25) : ");
scanf("%d", &E );
printf("Entrer le nombre des actions (max.25) : ");
scanf("%d", &A );
printf("Entrer la valeur d epsilon (max.25) : ");
scanf("%f", &epsilon );
printf("Entrer la valeur d alpha (max.25) : ");
scanf("%f", &alpha );
for (a=0; a<A; a++){
for (i=0; i<E; i++)
for (j=0; j<E; j++)
{
printf("Elements de Prbabilite de transition P(pi)[%d][%d][%d] est : ",i,a,j);
scanf("%f", &P[i][a][j]);
}}
//Affichage de Probabilité de transition P(pi) */
printf("Matrice de Prbabilite de transition P(pi) est :\n");
for (a=0; a<A; a++){
for (i=0; i<E; i++)
for (j=0; j<E; j++)
printf("\t%f",P[i][a][j]);
printf("\n");
}
for (a=0; a<A; a++){
for (i=0; i<E; i++)
{
printf("Element de la matrice de recompense R(pi)[%d][%d] est : ",i,a);
scanf("%f", &R[i][a]);
}}
//Affichage de la matrice de recompense R(pi) */
printf("Matrice de la matrice de recompense R(pi) est :\n");
for (a=0; a<A; a++){
for (i=0; i<E; i++)
printf("\t%f",R[i][a]);
printf("\n");
}
for (a=0; a<A; a++){
for (n=0; n<E; n++)
for (i=0; i<E; i++){
for (j=0; j<E; j++)
// voilà la partie que je suis bloquée
VII[0][i]=0;
while (VII[n][i]> VII[n-1][i])
{
V[n][i]+= P[i][K][j]* V[n-1][j];
}
VI [n][i] = V [n][i]; // pour stocker le résultat
}
VII[n][i]=R[i][a]+alpha *VI[n][i];}
printf(" Vecteur V est :\n");
for (a=0; a<A; a++){
for (n=0; n<E; n++)
for (i=0; i<E; i++)
for (j=0; j<E; j++){
printf("\t%f",VII[n][i]);
printf("\n");
}}
return 0;
} |
Partager