J'utilise beaucoup les algorithmes génétiques dans mes recherches et j'ai rencontré une question intéressante sur la meilleure façon d'effectuer vos opérations génétiques sur un génome. Supposons que vous ayez une fonction définie par f (x, y) = a x^n + b x^n-1 + ... + c y^m + d y^m-1 ... etc. C'est juste une fonction multivariable qui est assez chère à calculer, donc vous essayez d'être aussi efficace que possible avec vos opérations génétiques.Impact des performances de différentes façons d'effectuer des opérations génétiques sur le génome d'un algorithme génétique multivariable
Si vous utilisez une représentation binaire du génome, j'ai compris qu'il y a 2 façons raisonnables d'effectuer les opérations génétiques. Regardons juste la scène du crossover.
Voici le code pour une sélection de tournois vectorisé dans Matlab (pour le contexte de noms de variables)
%% Tournament Selection
T = round(rand(2*popSize,S)*(popSize-1)+1); % Tournaments
[~,idx] = max(F(T),[],2); % Index of Winners
W = T(sub2ind(size(T),(1:2*popSize)',idx)); % Winners
Vous avez donc 2 variables différentes qui sont en cours d'optimisation et ma question est de savoir si vous voulez diviser la opérations génétiques de sorte que vous avez un crossover appliqué à chaque variable individuellement et concaténer ensuite les tableaux de retour ensemble qui ressemblerait à ceci pour un crossover 2 points:
%% 2 Point Crossover
Pop2 = Pop(W(1:2:end),:); % Set Pop2 = Pop Winners 1
P2A = Pop(W(2:2:end),:); % Assemble Pop2 Winners 2
% Split Pop2 for x and y genomes
xPop2 = Pop2(:,1:genome/2);
yPop2 = Pop2(:,genome/2 + 1:end);
% Split P2A for x and y genomes
xP2A = P2A(:,1:genome/2);
yP2A = P2A(:,genome/2+2:end);
% For x genome
Ref = ones(popSize,1)*(1:genome/2); % Reference Matrix
CP = sort(round(rand(popSize,2)*(genome/2-1)+1),2); % Crossover Points
xidx = CP(:,1)*ones(1,genome/2)<Ref & CP(:,2)*ones(1,genome/2)>Ref; % Logical Index
xPop2(xidx) = xP2A(xidx); % Recombine Winners
% For y genome
Ref = ones(popSize,1)*(1:genome/2); % Reference Matrix
CP = sort(round(rand(popSize,2)*(genome/2-1)+1),2); % Crossover Points
yidx = CP(:,1)*ones(1,genome/2)<Ref & CP(:,2)*ones(1,genome/2)>Ref; % Logical Index
yPop2(yidx) = yP2A(yidx); % Recombine Winners
Pop2 = horzcat(xPop2,yPop2);
P2A = horzcat(xP2A,yP2A);
ou traitez-vous le génome comme une opération de croisement unique d juste effectuer le croisement de 2 points comme si elle était un seul génome variables comme celui-ci:
Pop2 = Pop(W(1:2:end),:); % New Pop is Winners of old Pop
P2A = Pop(W(2:2:end),:); % Assemble Pop2 Winners 2
Ref = ones(popSize,1)*(1:genome); % Ones Matrix
CP = sort(round(rand(popSize,2)*(genome-1)+1),2); % Crossover Points
idx = CP(:,1)*ones(1,genome)<Ref&CP(:,2)*ones(1,genome)>Ref; % Index
Pop2(idx)=P2A(idx); % Recombine Winners
Est-ce que quelqu'un sait de toute la recherche qui a été fait qui montre la différence entre les 2 différentes façons de représenter les génomes? Je n'ai pas pu trouver quelque chose publié à ce sujet, mais c'est peut-être parce que je ne savais pas comment écrire intelligemment ma question dans google.
Merci
Cette branche d'étude est vraiment très intéressant, et, bien sûr , il existe des procédures standard, éprouvées, triviales pour aborder, résoudre et analyser cette catégorie de problèmes. Tout d'abord, je voudrais savoir: 1. Quelle est votre question concrète: un cadre pour résoudre ou optimiser la solution?/une méthode de sélection de la procédure de mutation? une méthode de sélection des fonctions objectives? 2. En réalité, la fonction objectif multinomial n'est pas une fonction complexe à résoudre -c'est C0, .., Cn continu :), ou faudra-t-il réellement appliquer GA sur des fonctions non C0, ... Cn, comme des procédures discrètes? – hyprfrcb
3. Êtes-vous incliné sur la classe de méthodes GA? Pouvez-vous étendre à d'autres? 4. Juste comme référence, sous quelle discipline votre travail de question est concentré, IT, Mathématiques, Ingénierie? – hyprfrcb
Donc, ma question principale est de savoir comment représenter une fonction multivariable en binaire au cours de la phase de transition.J'ai présenté 2 techniques différentes pour le croisement le premier croise simplement naïvement le génome entier et la deuxième technique divise d'abord le génome en ses variables individuelles et les traverse séparément. Je suis curieux de savoir s'il y a une recherche qui montre laquelle est la meilleure? Je devinerais qu'avec trop de variables vous ne voudriez pas les séparer, mais pour un cas de 2 variables j'obtiendais une convergence légèrement plus rapide –