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

📄 replace_chromosome.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 f  = replace_chromosome(intermediate_chromosome,pro,pop)</title>      <meta name="generator" content="MATLAB 7.0">      <meta name="date" content="2006-03-16">      <meta name="m-file" content="replace_chromosome"><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 f  = replace_chromosome(intermediate_chromosome,pro,pop)</h1>      <p>This function replaces the chromosomes based on rank and crowding distance. Initially until the population size is reached         each front is added one by one until addition of a complete front which results in exceeding the population size. At this         point the chromosomes in that front is added subsequently to the population based on crowding distance.      </p><pre class="codeinput">[N, m] = size(intermediate_chromosome);<span class="comment">% Get the index for the population sort based on the rank</span>[temp,index] = sort(intermediate_chromosome(:,M + V + 1));clear <span class="string">temp</span> <span class="string">m</span><span class="comment">% Now sort the individuals based on the index</span><span class="keyword">for</span> i = 1 : N    sorted_chromosome(i,:) = intermediate_chromosome(index(i),:);<span class="keyword">end</span><span class="comment">% Find the maximum rank in the current population</span>max_rank = max(intermediate_chromosome(:,M + V + 1));<span class="comment">% Start adding each front based on rank and crowing distance until the</span><span class="comment">% whole population is filled.</span>previous_index = 0;<span class="keyword">for</span> i = 1 : max_rank    <span class="comment">% Get the index for current rank i.e the last the last element in the</span>    <span class="comment">% sorted_chromosome with rank i.</span>    current_index = max(find(sorted_chromosome(:,M + V + 1) == i));    <span class="comment">% Check to see if the population is filled if all the individuals with</span>    <span class="comment">% rank i is added to the population.</span>    <span class="keyword">if</span> current_index &gt; pop        <span class="comment">% If so then find the number of individuals with in with current</span>        <span class="comment">% rank i.</span>        remaining = pop - previous_index;        <span class="comment">% Get information about the individuals in the current rank i.</span>        temp_pop = <span class="keyword">...</span>            sorted_chromosome(previous_index + 1 : current_index, :);        <span class="comment">% Sort the individuals with rank i in the descending order based on</span>        <span class="comment">% the crowding distance.</span>        [temp_sort,temp_sort_index] = <span class="keyword">...</span>            sort(temp_pop(:, M + V + 2),<span class="string">'descend'</span>);        <span class="comment">% Start filling individuals into the population in descending order</span>        <span class="comment">% until the population is filled.</span>        <span class="keyword">for</span> j = 1 : remaining            f(previous_index + j,:) = temp_pop(temp_sort_index(j),:);        <span class="keyword">end</span>        <span class="keyword">return</span>;    <span class="keyword">elseif</span> current_index &lt; pop        <span class="comment">% Add all the individuals with rank i into the population.</span>        f(previous_index + 1 : current_index, :) = <span class="keyword">...</span>            sorted_chromosome(previous_index + 1 : current_index, :);    <span class="keyword">else</span>        <span class="comment">% Add all the individuals with rank i into the population.</span>        f(previous_index + 1 : current_index, :) = <span class="keyword">...</span>            sorted_chromosome(previous_index + 1 : current_index, :);        <span class="keyword">return</span>;    <span class="keyword">end</span>    <span class="comment">% Get the index for the last added individual.</span>    previous_index = current_index;<span class="keyword">end</span></pre><p class="footer"><br>         Published with MATLAB&reg; 7.0<br></p>      <!--##### SOURCE BEGIN #####

%% function f  = replace_chromosome(intermediate_chromosome,pro,pop)
% This function replaces the chromosomes based on rank and crowding
% distance. Initially until the population size is reached each front is
% added one by one until addition of a complete front which results in
% exceeding the population size. At this point the chromosomes in that
% front is added subsequently to the population based on crowding distance.

[N, m] = size(intermediate_chromosome);

% Get the index for the population sort based on the rank
[temp,index] = sort(intermediate_chromosome(:,M + V + 1));

clear temp m

% Now sort the individuals based on the index
for i = 1 : N
    sorted_chromosome(i,:) = intermediate_chromosome(index(i),:);
end

% Find the maximum rank in the current population
max_rank = max(intermediate_chromosome(:,M + V + 1));

% Start adding each front based on rank and crowing distance until the
% whole population is filled.
previous_index = 0;
for i = 1 : max_rank
    % Get the index for current rank i.e the last the last element in the
    % sorted_chromosome with rank i. 
    current_index = max(find(sorted_chromosome(:,M + V + 1) == i));
    % Check to see if the population is filled if all the individuals with
    % rank i is added to the population. 
    if current_index > pop
        % If so then find the number of individuals with in with current
        % rank i.
        remaining = pop - previous_index;
        % Get information about the individuals in the current rank i.
        temp_pop = ...
            sorted_chromosome(previous_index + 1 : current_index, :);
        % Sort the individuals with rank i in the descending order based on
        % the crowding distance.
        [temp_sort,temp_sort_index] = ...
            sort(temp_pop(:, M + V + 2),'descend');
        % Start filling individuals into the population in descending order
        % until the population is filled.
        for j = 1 : remaining
            f(previous_index + j,:) = temp_pop(temp_sort_index(j),:);
        end
        return;
    elseif current_index < pop
        % Add all the individuals with rank i into the population.
        f(previous_index + 1 : current_index, :) = ...
            sorted_chromosome(previous_index + 1 : current_index, :);
    else
        % Add all the individuals with rank i into the population.
        f(previous_index + 1 : current_index, :) = ...
            sorted_chromosome(previous_index + 1 : current_index, :);
        return;
    end
    % Get the index for the last added individual.
    previous_index = current_index;
end##### SOURCE END #####-->   </body></html>

⌨️ 快捷键说明

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