⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tournament_selection.html

📁 演化、遗传计算方法NSGA2的源代码
💻 HTML
字号:
<html xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd">   <head>      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">         <!--This HTML is auto-generated from an M-file.To make changes, update the M-file and republish this document.      -->      <title>function tournament_selection(chromosome, pool_size, tour_size)</title>      <meta name="generator" content="MATLAB 7.0">      <meta name="date" content="2006-03-16">      <meta name="m-file" content="tournament_selection"><style>body {  background-color: white;  margin:10px;}h1 {  color: #990000;   font-size: x-large;}h2 {  color: #990000;  font-size: medium;}p.footer {  text-align: right;  font-size: xx-small;  font-weight: lighter;  font-style: italic;  color: gray;}pre.codeinput {  margin-left: 30px;}span.keyword {color: #0000FF}span.comment {color: #228B22}span.string {color: #A020F0}span.untermstring {color: #B20000}span.syscmd {color: #B28C00}pre.showbuttons {  margin-left: 30px;  border: solid black 2px;  padding: 4px;  background: #EBEFF3;}pre.codeoutput {  color: gray;  font-style: italic;}pre.error {  color: red;}/* Make the text shrink to fit narrow windows, but not stretch too far in wide windows.  On Gecko-based browsers, the shrink-to-fit doesn't work. */ p,h1,h2,div {  /* for MATLAB's browser */  width: 600px;  /* for Mozilla, but the "width" tag overrides it anyway */  max-width: 600px;  /* for IE */  width:expression(document.body.clientWidth > 620 ? "600px": "auto" );}    </style></head>   <body>      <h1>function tournament_selection(chromosome, pool_size, tour_size)</h1>      <introduction>         <p>is the selection policy for selecting the individuals for the mating pool. The selection is based on tournament selection.            Argument <tt>chromosome</tt> is the current generation population from which the individuals are selected to form a mating pool of size <tt>pool_size</tt> after performing tournament selection, with size of the tournament being <tt>tour_size</tt>. By varying the tournament size the selection pressure can be adjusted. But for NSGA-II the tour_size is fixed to two, but            the user may feel free to experiment with different tournament size. Also it has been observed that a tournament size of more            than five has no significant meaning.         </p>      </introduction>      <h2>Contents</h2>      <div>         <ul>            <li><a href="#1">Tournament selection process</a></li>         </ul>      </div>      <h2>Tournament selection process<a name="1"></a></h2>      <p>In a tournament selection process n individuals are selected at random, where n is equal to <tt>tour_size</tt>. From these individuals only one is selected and is added to the mating pool, where size of the mating pool is <tt>pool_size</tt>. Selection is performed based on two criteria. First and foremost is the rank or the front in which the solutions reside.         Individuals with lower rank are selected. Secondly if the rank of two individuals are the same then, the crowding distance         is compared. Individuals with greater crowding distance is selcted.      </p><pre class="codeinput"><span class="comment">% Get the size of chromosome. The number of chromosome is not important</span><span class="comment">% while the number of elements in chromosome are important.</span>[pop, variables] = size(chromosome);<span class="comment">% The peunltimate element contains the information about rank.</span>rank = variables - 1;<span class="comment">% The last element contains information about crowding distance.</span>distance = variables;<span class="comment">% Until the mating pool is filled, perform tournament selection</span><span class="keyword">for</span> i = 1 : pool_size    <span class="comment">% Select n individuals at random, where n = tour_size</span>    <span class="keyword">for</span> j = 1 : tour_size        <span class="comment">% Select an individual at random</span>        candidate(j) = round(pop*rand(1));        <span class="comment">% Make sure that the array starts from one.</span>        <span class="keyword">if</span> candidate(j) == 0            candidate(j) = 1;        <span class="keyword">end</span>        <span class="keyword">if</span> j &gt; 1            <span class="comment">% Make sure that same candidate is not choosen.</span>            <span class="keyword">while</span> ~isempty(find(candidate(1 : j - 1) == candidate(j)))                candidate(j) = round(pop*rand(1));                <span class="keyword">if</span> candidate(j) == 0                    candidate(j) = 1;                <span class="keyword">end</span>            <span class="keyword">end</span>        <span class="keyword">end</span>    <span class="keyword">end</span>    <span class="comment">% Collect information about the selected candidates.</span>    <span class="keyword">for</span> j = 1 : tour_size        c_obj_rank(j) = chromosome(candidate(j),rank);        c_obj_distance(j) = chromosome(candidate(j),distance);    <span class="keyword">end</span>    <span class="comment">% Find the candidate with the least rank</span>    min_candidate = <span class="keyword">...</span>        find(c_obj_rank == min(c_obj_rank));    <span class="comment">% If more than one candiate have the least rank then find the candidate</span>    <span class="comment">% within that group having the maximum crowding distance.</span>    <span class="keyword">if</span> length(min_candidate) ~= 1        max_candidate = <span class="keyword">...</span>        find(c_obj_distance(min_candidate) == max(c_obj_distance(min_candidate)));        <span class="comment">% If a few individuals have the least rank and have maximum crowding</span>        <span class="comment">% distance, select only one individual (not at random).</span>        <span class="keyword">if</span> length(max_candidate) ~= 1            max_candidate = max_candidate(1);        <span class="keyword">end</span>        <span class="comment">% Add the selected individual to the mating pool</span>        f(i,:) = chromosome(candidate(min_candidate(max_candidate)),:);    <span class="keyword">else</span>        <span class="comment">% Add the selected individual to the mating pool</span>        f(i,:) = chromosome(candidate(min_candidate(1)),:);    <span class="keyword">end</span><span class="keyword">end</span></pre><p class="footer"><br>         Published with MATLAB&reg; 7.0<br></p>      <!--##### SOURCE BEGIN #####

%% function tournament_selection(chromosome, pool_size, tour_size) 
% is the selection policy for selecting the individuals for the mating 
% pool. The selection is based on tournament selection. Argument 
% |chromosome| is the current generation population from which the 
% individuals are selected to form a mating pool of size |pool_size| after 
% performing tournament selection, with size of the tournament being 
% |tour_size|. By varying the tournament size the selection pressure can be
% adjusted. But for NSGA-II the tour_size is fixed to two, but the user may
% feel free to experiment with different tournament size. Also it has been
% observed that a tournament size of more than five has no significant
% meaning. 
%
%% Tournament selection process
% In a tournament selection process n individuals are selected at random,
% where n is equal to |tour_size|. From these individuals only one is selected
% and is added to the mating pool, where size of the mating pool is
% |pool_size|. Selection is performed based on two criteria. First and
% foremost is the rank or the front in which the solutions reside.
% Individuals with lower rank are selected. Secondly if the rank of two
% individuals are the same then, the crowding distance is compared.
% Individuals with greater crowding distance is selcted. 

% Get the size of chromosome. The number of chromosome is not important
% while the number of elements in chromosome are important.
[pop, variables] = size(chromosome);
% The peunltimate element contains the information about rank.
rank = variables - 1;
% The last element contains information about crowding distance.
distance = variables;

% Until the mating pool is filled, perform tournament selection
for i = 1 : pool_size
    % Select n individuals at random, where n = tour_size
    for j = 1 : tour_size
        % Select an individual at random
        candidate(j) = round(pop*rand(1));
        % Make sure that the array starts from one. 
        if candidate(j) == 0
            candidate(j) = 1;
        end
        if j > 1
            % Make sure that same candidate is not choosen.
            while ~isempty(find(candidate(1 : j - 1) == candidate(j)))
                candidate(j) = round(pop*rand(1));
                if candidate(j) == 0
                    candidate(j) = 1;
                end
            end
        end
    end
    % Collect information about the selected candidates.
    for j = 1 : tour_size
        c_obj_rank(j) = chromosome(candidate(j),rank);
        c_obj_distance(j) = chromosome(candidate(j),distance);
    end
    % Find the candidate with the least rank
    min_candidate = ...
        find(c_obj_rank == min(c_obj_rank));
    % If more than one candiate have the least rank then find the candidate
    % within that group having the maximum crowding distance.
    if length(min_candidate) ~= 1
        max_candidate = ...
        find(c_obj_distance(min_candidate) == max(c_obj_distance(min_candidate)));
        % If a few individuals have the least rank and have maximum crowding
        % distance, select only one individual (not at random). 
        if length(max_candidate) ~= 1
            max_candidate = max_candidate(1);
        end
        % Add the selected individual to the mating pool
        f(i,:) = chromosome(candidate(min_candidate(max_candidate)),:);
    else
        % Add the selected individual to the mating pool
        f(i,:) = chromosome(candidate(min_candidate(1)),:);
    end
end##### SOURCE END #####-->   </body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -