Recherche d’arbres de Steiner de longueur minimal : ´el´ements de correction.
Ecole Centrale Paris Mounib. Mekhilef
6 janvier 2004
Un certain nombre de probl`emes apparaissent lors du traitement de cette question :
– Le coadge binaire bien que robuste cache la nature du probl`eme. Les op´erateurs de combinaison et de mutation nous mettent devant un probl`eme de traduction de ce qui se passe. En effet, le changement d’´etat d’un bit n’a pas de signification directe et facile en terme de structure de l’arbre.
– Dans un algorithme g´en´etique du type ´evolutionniste (sans passage par un codage binaire), se pose le probl`eme de la nature des op´erateurs de combinaison et de mutation. En effet, au del`a de la fonction de croisement, se pose celui de l’int´egrit´e de la structure (non redondance des noeuds, passage par un seul noeud, etc)
– Enfin, du point de vue op´eratoire, on doit expliciter et justifer la taille de la population, la strat´egie de rajeunissement de la population (ou de son renouvellement).
1 Premi` ere question
1.1 Mod´ elisation
Soit le cas pr´esent´e sur la figure (1). Sur le plan, nous disposons de 6 points (not´es de 1 `a 6). Dans ce cas quatre points A, B, C et D de Steiner sont propos´es, pour lequesls nous recherchons la position optimale.
Nous proposons le codage suivant (2). On consid`ere que l’on se trouve dans une zone du plan d´efinie par une boˆıe [2a, a]. Chaque point est cod´e en x et y.
1
2 3 4
6 5
A B C D
Fig. 1 – R´eseau `a 6 noeuds et 4 points de Steiner.
1 0 1 0 0 0 1
position en x position en y etc....
Fig. 2 – Codage binaire d’un chromosome repr´esentant un arbre.
Si on consid`ere que la distance entre les points (horizontalement et verti- calement) est de a, et si l’on d´esire obtenir une pr´ecision dea/p, la longueur du chromosome est ainsi ´egale `a :
l =n.|ln(p/a+ 1)/ln(2)|>
O`u |.|> repr´esente l’entier sup´erieur le plus proche. et n le nombre de points de Steiner.
1.2 Combinaison
Un op´erateur de combinaison efficace est celui qui permet de faire des croisements entre des points identiques. Dans ce cas pr´ecis nous avons deux possibilit´es. La premi`ere consiste `a g´en´erer une position al´eatoire entre 0 et l/n et ensuite appliquer la c´esure pour chacun des points en ce mˆeme lieu.
La seconde consiste g´en´ener autant de points de c´esure que de points de Steiner, avec la sous variante qui consiste `a diff´erencier les positions en x et y (voir figures 3 et 4).
1.3 Mutation
Pour cet op´erateur, aucune difficult´e particuli`ere n’est `a signaler. Il suffit d’interpr´eter num´eriquement le changement d’´etat d’un bit du chromosome.
x1 y1 x2 y2 x3 y3
x1 y1 x2 y2 x3 y3
Individu A
Individu B
Seuil de croisement
Fig. 3 – Combinaison simple.
x1 y1 x2 y2 x3 y3
x1 y1 x2 y2 x3 y3
Individu A
Individu B
Seuil de croisement pour point 1
Seuil de croisement pour point 2
Seuil de croisement pour point 3
x1 y1 x2 y2 x3 y3
x1 y1 x2 y2 x3 y3
Individu A
Individu B
Seuils de croisement pour point 1
Seuils de croisement pour point 2
Seuils de croisement pour point 3
Fig. 4 – Combinaison multiple.
Il est cependant `a signaler qu’un choix doit ˆetre fait concernant la probabilit´e de mutation. Soit on proc`ede par morceaux de chromosome repr´esentant la position d’un point (ou l’une de ses coordonn´es), ou la chaine chromosomique compl`ete.
1.4 Mise ` a jour de la population
Diff´erentes start´egies peuvent ˆetre envisag´ees. Pour ceux qui veulent ´etudier l’´evolution de l’algorithme, aucune contrainte particuli`ere n’est `a poser, en particulier on ne s’attachera pas `a garder l’individu (l’abre) pr´esentant la lon- gueur la plus petite, on fera ”confiance l’algorithme”. ceux d´esireux obtenir une solution et ne pas la perdre au cours du processus de recherche, veilleront
`a construire une nouvelle population en y incluant au moins l’individu le plus prometteur.
2 Deuxi` eme question
2.1 Mod´ elisation
Le probl`eme de la recherche d’un arbre de longueur minimal a une struc- ture particuli`erement bien adapt´ee pour un algorithme de recherche par com- binaison. En effet, les op´erateurs de croisement et de mutation peuvent avoir un effet direct (compr´ehenbile). La figure (fig 5) illustre l’op´erateur de croi- sement. Au lieu de coder une structure chromosomique, on code la structure
Fig. 5 – Croisement entre deux arbres.
d’un arbre.
2.2 Mutation
L’introduction d’une perturbation peut tre faire en modifiant la structure d’un arbre. La permutation de deux branches au sein d’un arbre peut tre consid´er´ee comme une bonne alternative (voir figure 6).
Fig. 6 – Mutation d’un arbre.
3 Addendum
Le code matlab ci-dessous montre comment on peut programmer un al- gorithme sur le probl`eme associ´e de recherche de la position des points de Steiner ´etant donn´ee la structure de l’arbre (codage binaire).
3.1 Programme principal
% Program TD1
%clear PopInit bounds x Fitness NFitness Pop PopNouv
%clear Enf1 Enf2 Enfm1 Enfm2 clear all
%
global lambda n lchromosome global centres
%
fid=fopen(’temoin.txt’,’w’); rand(’seed’,sum(100*clock)) fonction=’fct1’; ncouples=10; lambda=2*ncouples;
Liste=zeros(1,lambda); n=2; centres=100*rand(1,n); duree=50;
precision=0.001; Pcroisement=0.9; Pmutation=0.01;
bounds(:,1)=zeros(n,1); bounds(:,2)=bounds(:,1)+(100*ones(n,1));
lchromosome=calcbits(bounds,precision); taille=sum(lchromosome);
Pop=round(rand(lambda,taille)); for j=1:lambda
x=b2f(Pop(j,:),bounds,lchromosome);
Fitness(j)=feval(fonction,x);
end InitFitness=Fitness; Quot=Fitness/sum(Fitness); [fmin fmoy fmax]=statistiques(Pop,Fitness,Quot); Fmin=[fmin]; Fmax=[fmax];
Fmoy=[fmoy];
% fin initialisation generation=1;
%
fprintf(fid,’fin initialisation\n’); while(generation<duree) generation=generation+1;
PopNouv=[];
for i=1:ncouples
[Par1 Par2]=selection(Pop,Quot);
Liste(Par1)=Liste(Par1)+1;
Liste(Par2)=Liste(Par2)+1;
[Enf1 Enf2]=croisement(Par1,Par2,Pop,Pcroisement);
[Em1 Em2]=mutation(Enf1,Enf2,Pmutation);
PopNouv=[PopNouv;Em1;Em2];
fprintf(fid,’generation:[%d] \t couple:%d/%d\n’,generation,i,ncouples);
end
for j=1:lambda
x=b2f(PopNouv(j,:),bounds,lchromosome);
NFitness(j)=feval(fonction,x);
end
Pop=rajeunissement(Pop,Fitness,PopNouv,NFitness);
for j=1:lambda
x=b2f(Pop(j,:),bounds,lchromosome);
if(j==lambda) xbetter=x;
end
NFitness(j)=feval(fonction,x);
end
fbetter=NFitness(lambda) Quot=NFitness/sum(NFitness);
[fmin fmoy fmax]=statistiques(Pop,NFitness,Quot);
Fmin=[Fmin fmin]; Fmax=[Fmax fmax]; Fmoy=[Fmoy fmoy];
Fitness=NFitness;
% disp([xbetter’ fbetter])
plot([1:generation],Fmax,[1:generation],Fmoy,[1:generation],Fmin) drawnow
end
plot([1:generation],Fmax,[1:generation],Fmoy,[1:generation],Fmin) fclose(fid);
3.2 Croisement
function [Enf1,Enf2]=croisement(Par1,Par2,Pop,Pcross)
%
global n lchromosome
%
cc=[0 cumsum(lchromosome)]; if(rand<Pcross) for i=1:n
seuil=cc(i)+floor(rand*lchromosome(i));
for j=cc(i)+1:seuil Enf1(j)=Pop(Par2,j);
Enf2(j)=Pop(Par1,j);
end
for j=seuil+1:cc(i+1) Enf1(j)=Pop(Par1,j);
Enf2(j)=Pop(Par2,j);
end end else
Enf1=Pop(Par1,:);
Enf2=Pop(Par2,:);
end
3.3 Mutation
function [x1,x2]=mutation(Enf1,Enf2,Pmut)
%
global n lchromosome x1=Enf1; x2=Enf2;
%
for j=1:sum(lchromosome) if(rand<Pmut)
x1(j)=~Enf1(j);
end
if(rand<Pmut) x2(j)=~Enf2(j);
end end
3.4 Selection
function [p1,p2]=selection(P,f)
%
global lambda
%
seuil=rand; somme=0; while(somme<seuil) p1=1+floor(rand*lambda);
somme=somme+f(p1);
end
%
seuil=rand; somme=0; while(somme<seuil) p2=1+floor(rand*lambda);
somme=somme+f(p2);
end
%
3.5 Rajeunissement de la population
function Nr=rajeunissement(Np,Fp,P,F) global lambda
%
%Ft=[Fp;F];
%Popt=[Np;P];
%[Ft I]=sort(Ft);
%k=0;
%for i=lambda+1:2*lambda
% k=k+1;
% Nr(k,:)=Popt(I(i),:);
%end
%Fp=Ft(lambda+1:2*lambda);
% deuxime mode Nr=P;
3.6 Statistiques
function [fmin,fmoy,fmax]=statistiques(Pop,F,Quot)
%
fmin=min(F); fmax=max(F); fmoy=mean(F); sigma=sum(F);
Quot=F/sigma;
3.7 Conversion du binaire vers les flottants
function [fval] = b2f(bval,bounds,bits)
scale=(bounds(:,2)-bounds(:,1))’./(2.^bits-1); %The range of the variables numV=size(bounds,1); cs=[0 cumsum(bits)]; size(bval); for i=1:numV
a=bval((cs(i)+1):cs(i+1));
fval(i)=sum(2.^(size(a,2)-1:-1:0).*a)*scale(i)+bounds(i,1);
end
3.8 Calcul de la longueur de la chaˆıne chromosomique
function [bits]=calcbits(bounds,precision)
%
bits=ceil(log2((bounds(:,2)-bounds(:,1))’ ./ precision));
3.9 Fonction objectif
Dans le cas o`u l’on consid`ere l’arbre tel que d´efinit sur la figure (7), la fonction peut se programmer comme suit d´ecrit ci dessous.
La figure (8) montre une evolution de la population duarnt un processus de recherche et la figure (9) un r´esultat interm´ediaire durant le calcul.
1
2 3 4
6 5 A
B C D
Fig. 7 – Cas particulier.
function y=steiner_6_4(x)
P1x=0; P1y=0; P2x=0; P2y=1; P3x=1; P3y=1; P4x=2; P4y=1; P5x=2;
P5y=0; P6x=1; P6y=0; y=0; y= sqrt( (x(1) - P1x)^2) + sqrt(
(x(2) - P1y)^2); y=y + sqrt( (x(1) - P2x)^2) + sqrt( (x(2) - P2y)^2) ; y=y + sqrt( (x(1) - x(3))^2) + sqrt( (x(2) - x(4))^2);
y=y + sqrt( (x(3) - P3x)^2) + sqrt( (x(4) - P3y)^2) ; y=y + sqrt(
(x(3) - x(5))^2) + sqrt( (x(4) - x(6))^2) ; y=y + sqrt( (x(5) -
0 10 20 30 40 50 60 70 80 90 100 0.04
0.06 0.08 0.1 0.12 0.14 0.16
Fig. 8 – Une ´evolution non contrˆol´ee permet lapopulation de s’am´eliorer.
L’individu le meilleur n’est pas gard´e. ici lapopulation est renouvell´ee tota- lement.
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Fig. 9 – Un r´esultat interm´ediaire de calcul.
P6x)^2) + sqrt( (x(6) - P6y)^2) ; y=y + sqrt( (x(5) - x(7))^2) + sqrt( (x(6) - x(8))^2) ; y=y + sqrt( (x(7) - P4x)^2) + sqrt(
(x(8) - P4y)^2) ; y=y + sqrt( (x(7) - P5x)^2) + sqrt( (x(8) - P5y)^2);
y=1/(1+y);