




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
% function nsga_2(pro)% Main Function% Main program to run the NSGA-II MOEA.% Read the corresponding documentation to learn more about multiobjective% optimization using evolutionary algorithms.% initialize_variables has two arguments; First being the population size% and the second the problem number. 1 corresponds to MOP1 and 2% corresponds to MOP2.%inp_para_definition=input_parameters_definition;% Initialize the variables% Declare the variables and initialize their values% pop - population% gen - generations% pro - problem number%clear;clc;tic;pop = 100; % 每一代的种群数gen = 100; % 总共的代数pro = 2; % 问题选择1或者2,见switchswitch pro case 1 % M is the number of objectives. M = 2; % V is the number of decision variables. In this case it is % difficult to visualize the decision variables space while the % objective space is just two dimensional. V = 6; case 2 M = 3; V = 12; case 3 % case 1和case 2 用来对整个算法进行常规验证,作为调试之用;case 3 为本工程所需; M = 2; %(output parameters 个数) V = 8; %(input parameters 个数) K = 10;end% Initialize the populationchromosome = initialize_variables(pop,pro);% Sort the initialized population% Sort the population using non-domination-sort. This returns two columns% for each individual which are the rank and the crowding distance% corresponding to their position in the front they belong. 真是牛 X了。chromosome = non_domination_sort_mod(chromosome,pro);% Start the evolution process% The following are performed in each generation% Select the parents% Perfrom crossover and Mutation operator% Perform Selectionfor i = 1 : gen % Select the parents % Parents are selected for reproduction to generate offspring. The % original NSGA-II uses a binary tournament selection based on the % crowded-comparision operator. The arguments are % pool - size of the mating pool. It is common to have this to be half the % population size. % tour - Tournament size. Original NSGA-II uses a binary tournament % selection, but to see the effect of tournament size this is kept % arbitary, to be choosen by the user. pool = round(pop/2); tour = 2; %下面进行二人锦标赛配对,新的群体规模是原来群体的一半 parent_chromosome = tournament_selection(chromosome,pool,tour); % Perfrom crossover and Mutation operator % The original NSGA-II algorithm uses Simulated Binary Crossover (SBX) and % Polynomial crossover. Crossover probability pc = 0.9 and mutation % probability is pm = 1/n, where n is the number of decision variables. % Both real-coded GA and binary-coded GA are implemented in the original % algorithm, while in this program only the real-coded GA is considered. % The distribution indeices for crossover and mutation operators as mu = 20 % and mum = 20 respectively. mu = 20; mum = 20; % 针对对象是上一步产生的新的个体parent_chromosome %对parent_chromosome 每次操作以较大的概率进行交叉(产生两个新的候选人),或者较小的概率变异(一个新的候选人)操作,这样 %就会产生较多的新个体 offspring_chromosome = genetic_operator(parent_chromosome,pro,mu,mum); % Intermediate population % Intermediate population is the combined population of parents and % offsprings of the current generation. The population size is almost 1 and % half times the initial population. main_pop,temp=size(chromosome); offspring_pop,temp=size(offspring_chromosome); intermediate_chromosome(1:main_pop,:)=chromosome; intermediate_chromosome(main_pop+1:main_pop+offspring_pop,1:M+V)=offspring_chromosome; %intermediate_chromosome=inter_chromo(chromosome,offspring_chromosome,pro); % Non-domination-sort of intermediate population % The intermediate population is sorted again based on non-domination sort % before the replacement operator is performed on the intermediate % population. intermediate_chromosome = . non_domination_sort_mod(intermediate_chromosome,pro); % Perform Selection % Once the intermediate population is sorted only the best solution is % selected based on it rank and crowding distance. Each front is filled in % ascending order until the addition of population size is reached. The % last front is included in the population based on the individuals with % least crowding distance chromosome = replace_chromosome(intermediate_chromosome,pro,pop); if mod(i,10) fprintf(%dn,i); endend% Result% Save the result in ASCII text format.save solution.txt chromosome -ASCII% Visualize% The following is used to visualize the result for the given problem.switch pro case 1 plot(chromosome(:,V + 1),chromosome(:,V + 2),y+); title(MOP1 using NSGA-II); xlabel(f(x_1); ylabel(f(x_2); case 2 plot3(chromosome(:,V + 1),chromosome(:,V + 2),chromosome(:,V + 3),*); title(MOP2 using NSGA-II); xlabel(f(x_1); ylabel(f(x_2); zlabel(f(x_3);end %disp(run time is:)%toc;%function f = initialize_variables(N,problem)% function f = initialize_variables(N,problem)% N - Population size% problem - takes integer values 1 and 2 where,% 1 for MOP1% 2 for MOP2% This function initializes the population with N individuals and each% individual having M decision variables based on the selected problem.% M = 6 for problem MOP1 and M = 12 for problem MOP2. The objective space% for MOP1 is 2 dimensional while for MOP2 is 3 dimensional.% Both the MOPs has 0 to 1 as its range for all the decision variables.min = 0;max = 1;switch problem case 1 M = 6; K = 8; % k=决策变量(M=6)+目标变量(K-M=2)=8 case 2 M = 12; K = 15; case 3 % case 1和case 2 用来对整个算法进行常规验证,作为调试之用;case 3 为本工程所需; M = 8; %(input parameters 个数) K = 10;endfor i = 1 : N % Initialize the decision variables for j = 1 : M f(i,j) = rand(1); % i.e f(i,j) = min + (max - min)*rand(1); end % Evaluate the objective function f(i,M + 1: K) = evaluate_objective(f(i,:),problem);end%function f = evaluate_objective(x,problem)% Function to evaluate the objective functions for the given input vector% x. x has the decision variablesswitch problem case 1 f = ; % Objective function one f(1) = 1 - exp(-4*x(1)*(sin(6*pi*x(1)6; sum = 0; for i = 2 : 6 sum = sum + x(i)/4; end % Intermediate function g_x = 1 + 9*(sum)(0.25); % Objective function one f(2) = g_x*(1 - (f(1)/(g_x)2); case 2 f = ; % Intermediate function g_x = 0; for i = 3 : 12 g_x = g_x + (x(i) - 0.5)2; end % Objective function one f(1) = (1 + g_x)*cos(0.5*pi*x(1)*cos(0.5*pi*x(2); % Objective function two f(2) = (1 + g_x)*cos(0.5*pi*x(1)*sin(0.5*pi*x(2); % Objective function three f(3) = (1 + g_x)*sin(0.5*pi*x(1); case 3 f = ; % Objective function one f(1) = 0; % Objective function one f(2) = 0;end% Non-Donimation Sort %按照目标函数最小了好% This function sort the current popultion based on non-domination. All the% individuals in the first front are given a rank of 1, the second front% individuals are assigned rank 2 and so on. After assigning the rank the% crowding in each front is calculated.function f = non_domination_sort_mod(x,problem)N,M = size(x);switch problem case 1 M = 2; V = 6; case 2 M = 3; V = 12; case 3 % case 1和case 2 用来对整个算法进行常规验证,作为调试之用;case 3 为本工程所需; M = 2; %(output parameters 个数) V = 8; %(input parameters 个数) K = 10;endfront = 1;% There is nothing to this assignment, used only to manipulate easily in% MATLAB.F(front).f = ;individual = ;for i = 1 : N % Number of individuals that dominate this individual 支配i的解的个数 individual(i).n = 0; % Individuals which this individual dominate 被i支配的解 individual(i).p = ; for j = 1 : N dom_less = 0; dom_equal = 0; dom_more = 0; for k = 1 : M if (x(i,V + k) return a increasing orer data sequencetemp,index_of_fronts = sort(x(:,M + V + 1);for i = 1 : length(index_of_fronts) sorted_based_on_front(i,:) = x(index_of_fronts(i),:); % 对解(染色体)进行排序,按照front分层end%到这里分层结束,下面就是计算距离了current_index = 0;% Find the crowding distance for each individual in each front% ,计算不同层的拥挤距离是没有意义的for front = 1 : (length(F) - 1) objective = ; distance = 0; y = ; previous_index = current_index + 1; for i = 1 : length(F(front).f) y(i,:) = sorted_based_on_front(current_index + i,:); end current_index = current_index + i; % Sort each individual based on the objective sorted_based_on_objective = ; for i = 1 : M sorted_based_on_objective, index_of_objectives = sort(y(:,V + i); sorted_based_on_objective = ; for j = 1 : length(index_of_objectives) sorted_based_on_objective(j,:) = y(index_of_objectives(j),:); end f_max = . sorted_based_on_objective(length(index_of_objectives), V + i); %最大值 f_min = sorted_based_on_objective(1, V + i); % 最小值 y(index_of_objectives(length(index_of_objectives),M + V + 1 + i). = Inf; % 最大值放lnf y(index_of_objectives(1),M + V + 1 + i) = Inf; % 最小值放lnf for j = 2 : length(index_of_objectives) - 1 next_obj = sorted_based_on_objective(j + 1,V + i); previous_obj = sorted_based_on_objective(j - 1,V + i); if (f_max - f_min = 0) y(index_of_objectives(j),M + V + 1 + i) = Inf; else y(index_of_objectives(j),M + V + 1 + i) = . (next_obj - previous_obj)/(f_max - f_min); end end end distance = ; distance(:,1) = zeros(length(F(front).f),1); for i = 1 : M distance(:,1) = distance(:,1) + y(:,M + V + 1 + i); end y(:,M + V + 2) = distance; y = y(:,1 : M + V + 2); z(previous_index:current_index,:) = y;endf = z;%function f = replace_chromosome(intermediate_chromosome,pro,pop)% 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,V = size(intermediate_chromosome);switch pro case 1 M = 2; V = 6; case 2 M = 3; V = 12; case 3 % case 1和case 2 用来对整个算法进行常规验证,作为调试之用;case 3 为本工程所需; M = 2; %(output parameters 个数) V = 8; %(input parameters 个数) K = 10;end% Get the index for the population sort based on the ranktemp,index = sort(intermediate_chromosome(:,M + V + 1);% Now sort the individuals based on the indexfor i = 1 : N sorted_chromosome(i,:) = intermediate_chromosome(index(i),:);end% Find the maximum rank in the current populationmax_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 current_index = max(find(sorted_chromosome(:,M + V + 1) = i); if current_index pop remaining = pop - previous_index; temp_pop = . sorted_chromosome(previous_index + 1 : current_index, :); temp_pop_1=temp_pop*(-1); temp_sort_1,temp_sort_index = . sort(temp_pop_1(:, M + V + 2); %在编译的时候出现的问题找到了,主要是对sort(a,descend)并不支持。 temp_sort=temp_sort_1*(-1); for j = 1 : remaining f(previous_index + j,:) = temp_pop(temp_sort_index(j),:); end return; elseif current_index 1 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 for j = 1 : tour_size c_obj_rank(j) = chromosome(candidate(j),rank); % 提取出阶数 c_obj_distance(j) = chromosome(candidate(j),distance); % 提取出距离 end min_candidate =find(c_obj_rank = min(c_obj_rank); % 找出层数最小的那个候选人 if length(min_candidate) = 1 % 发现存在层数相同的候选人,就要比较拥挤度距离了 max_candidate =find(c_obj_distance(min_candidate) = max(c_obj_distance(min_candidate); % 返回具有同样最小层数的,且拥挤距离最大的那个候选人 if length(max_candidate) = 1 max_candidate = max_candidate(1); % 层数,拥挤距离都相同,随便选个就可以了 end f(i,:) = chromosome(candidate(min_candidate(max_candidate),:); else f(i,:) = chromosome(candidate(min_candidate(1),:); endend%function f = genetic_operator(parent_chromosome,pro,mu,mum)% This function is utilized to produce offsprings from parent chromosomes.% The genetic operators corssover and mutation which are carried out with% slight modifications from the original design. For more information read% the document enclosed.%input_parameters=inp_para_definition; %定义了一个输入变量的结构, N,M = size(parent_chromosome); % 注意这里的M其实是个垃圾,后面语句会对其重新赋值利用switch pro case 1 M = 2; V = 6; case 2 M = 3; V = 12; case 3 % case 1和case 2 用来对整个算法进行常规验证,作为调试之用;case 3 为本工程所需; M = 2; %(output parameters 个数) V = 8;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 儿童美育学生课件
- 难点解析-公务员考试《常识》定向练习试题(解析卷)
- 2026届云南省安宁市实验石江学校化学高三上期中教学质量检测试题含解析
- 邻水现代农业发展集团有限公司2025年公开考试招聘工作人员的模拟试卷及完整答案详解1套
- 水库溢洪道设计优化方案
- 城市滨水区整治与更新
- 智能决策支持算法-洞察及研究
- 荧光信号可视化-洞察及研究
- 2025年事业单位笔试-河南-河南卫生事业管理(医疗招聘)历年参考题库典型考点含答案解析
- 高温加速老化研究-洞察及研究
- KW分布式光伏电站技术方案
- 私募基金管理人-廉洁从业管理制度
- 电子制造企业安全风险辨识分级管控清单 (一)
- 西昌社工考试试题及答案
- 设备点检员职业技能题库(中级)
- 网络法律知识
- 航空航天材料与加工技术作业指导书
- 摄像基础知识入门
- 2025年业务开发与商务合作保密协议模板(三篇)
- 农用植保无人机使用安全操作规程
- 2024年老年脆性骨折护理(最终版本)
评论
0/150
提交评论