-
Notifications
You must be signed in to change notification settings - Fork 0
/
rao_2.mlx
110 lines (109 loc) · 2.44 KB
/
rao_2.mlx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
This is a complete program for solving constrained Himmelblau function using Rao-2 algorithm. In
order to run the program, the following code may be copied and pasted, as it is, into the MATLAB
editor file and the same may be executed. This program is only for demonstration purpose. The
numbers assigned to the population size, generations, design variables and maximum function
evaluations in this program need not be taken as default values.
%% Rao-2 algorithm
%% Constrained optimization
%% Himmelblau function
function Rao_2()
clc;
clear all;
RUNS=10; % Number of individual runs
runs=0;
while(runs<RUNS)
pop=10; % population size
var=2; % Number of design variables
maxFes=500000; % Maximum functions evaluation
maxGen=floor(maxFes/pop); % Maximum number of iterations
mini=[-5 -5];
maxi=[5 5];
[row,var]=size(mini);
x=zeros(pop,var);
for i=1:var
x(:,i)=mini(i)+(maxi(i)-mini(i))*rand(pop,1);
end
ch=1;
gen=0;
f=objective(x);
while(gen<maxGen)
xnew=updatepopulation(x,f);
xnew=trimr(mini,maxi,xnew);
fnew=objective(xnew);
for i=1:pop
if(fnew(i)<f(i))
x(i,:)=xnew(i,:);
f(i)=fnew(i);
end
end
disp('%%%%%% Final population%%%%%%%');
disp([x,f]);
fnew=[];xnew=[];
gen=gen+1;
fopt(gen)=min(f);
end
runs=runs+1;
[val,ind]=min(fopt);
Fes(runs)=pop*ind;
best(runs)=val;
end
bbest=min(best);
mbest=mean(best);
wbest=max(best);
stdbest=std(best);
mFes=mean(Fes);
fprintf('\n best=%f',bbest);
fprintf('\n mean=%f',mbest);
fprintf('\n worst=%f',wbest);
fprintf('\n std. dev.=%f',stdbest);
fprintf('\n mean Fes=%f',mFes);
end
function[z]=trimr(mini,maxi,x)
[row,col]=size(x);
for i=1:col
x(x(:,i)<mini(i),i)=mini(i);
x(x(:,i)>maxi(i),i)=maxi(i);
end
z=x;
end
function[xnew]=updatepopulation(x,f)
[row,col]=size(x);
[t,tindex]=min(f);
Best=x(tindex,:);
[w,windex]=max(f);
worst=x(windex,:);
xnew=zeros(row,col);
for i=1:row
k=randi(row);
while (k==i)
k=randi(row);
end
if (f(i)<f(k))
for j=1:col
r=rand(1,2);
xnew(i,j)=x(i,j)+r(1)*(Best(j)-(worst(j)))+r(2)*(abs(x(i,j))-abs(x(k,j)));
end
else
for j=1:col
r=rand(1,2);
xnew(i,j)=x(i,j)+r(1)*(Best(j)-(worst(j)))+r(2)*(abs(x(k,j))-abs(x(i,j)));
end
end
end
end
%%The objective function is given below.
function [f]=objective(x)
[r,c]=size(x);
Z=zeros(r,1);
for i=1:r
x1=x(i,1);
x2=x(i,2);
z=(((x1^2)+x2-11)^2)+((x1+x2^2-7)^2);
g1=26-((x1-5)^2)-((x2)^2);
g2=20-(4*x1)-x2;
p1=10*((min(0,g1))^2); % penalty if constraint 1 is violated
p2=10*((min(0,g2))^2); % penalty if constraint 2 is violated
Z(i)=z+p1+p2; % penalized objective function value
end
f=Z;
end