1、多目标遗传算法代码 % 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 pr
2、oblem 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; % 总共的代
3、数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和ca
4、se 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 i
5、ndividual 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 Mutat
6、ion 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 t
7、o 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 = t
8、ournament_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.
9、% 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_chromo
10、some %对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 popu
11、lation 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_chrom
12、osome=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_domina
13、tion_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 in
14、cluded 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 t
15、o 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_
16、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%
17、 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 pro
18、blem 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);
19、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) =
20、 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 o
21、ne 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 %按照目
22、标函数最小了好% 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_m
23、od(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% M
24、ATLAB.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 i
25、ncreasing 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% ,计算不同层的拥挤距离是没
26、有意义的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_
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1