# Algorithme de trade-off basé sur la façon suivante de rentrer les données : la ligne i de la matrice A donne les incidences du scénario classé i-ème B<-function(A) #donne, en fonction de A, la matrice B du problème de programmation linéaire associé au calcul des utilités. Au passage, calcule la différence entre deux scénarios succésifs { n1=dim(A)[1] #n1=nombre de scénarios n2=dim(A)[2] #n2=nombre total de niveaux n3=n2+2*n1-1 d<-c(n1,n3) #d=les dimensions de B B<-array(0,d) for (i in 1:(n1-1)) { for (j in 1:n2) { B[i,j]=A[i,j]-A[i+1,j] #différences entre les scénarios successifs } } for (i in 1:(n1-1)) { B[i,n2+2*i-1]=-1 #coefficients des P_i B[i,n2+2*i]=1 #coefficients des N_i B[i,n3]=-1 #coefficients de E } for (j in 1:n3) { B[n1,j]=1 #ligne de la contrainte sur la somme totale #ici, la somme de toutes les variables. D'autres variantes possibles } return(B) } dir<-function(A) # les directions : no lignes de A fois "=" { n1=dim(A)[1] dir=array("=",dim=c(n1)) return(dir) } rhs<-function(A,stop) # les membres de droite : tous 0 sauf le dernier { n1=dim(A)[1] rhs=array(0,dim=c(n1)) rhs[n1]=stop return(rhs) } cout<-function(A) #à maximiser : E-la somme de N_j { n1=dim(A)[1] n2=dim(A)[2] n3=n2+2*n1-1 cout<-array(0,c(n3)) cout[n3]=1 for (i in 1:(n1-1)) { cout[n2+2*i]=-1 } return(cout) } # Exercice : refaire l'algorithme en partant d'une autre façon de rentrer les données : la matrice A des occurrences est données par l'ordre a priori des scénarios, et on a aussi comme donnée le classement final de chaque scénario