-
Notifications
You must be signed in to change notification settings - Fork 1
/
Contraints.m
85 lines (83 loc) · 2.06 KB
/
Contraints.m
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
function con_val = Contraints(Algorithm,Var,varargin)
%contra - Constraint handling in BioGP, EvoNN and cRVEA
% Version 0.5
% Syntax: con_val = contra(input)
%
% Long description
switch Algorithm
case 'BioGP'
F1 = varargin{1};
F2 = varargin{2};
con_val = [F1 F2];
con_val = contra(Var,F1,F2);
case 'EvoNN'
F1 = varargin{1};
F2 = varargin{2};
con_val = [F1 F2];
con_val = contra(Var,F1,F2);
case 'cRVEA'
Obj = varargin{1};
eqCon = varargin{2};
ieqCon = varargin{3};
objective = varargin{4};
con_val = zeros(size(Obj,1));
con_val = contra_cRVEA(Var,Obj,eqCon,ieqCon,objective);
end
end
function Fout = contra(Prey, F1, F2) % constraint function
global obj LB_F UB_F
penalty = 1e1;
F = [F1 F2];
flag = 0;
for i = 1:length(F1)
for j = 1:length(F(1,:))
if F(i,j) < LB_F(j) || F(i,j) > UB_F(j)
flag = 1;
end
end
if flag
F1(i) = F1(i) + obj(1)*penalty;
F2(i) = F2(i) + obj(2)*penalty;
end
flag = 0;
Fout = [F1 F2];
end
end
function con_val = contra_cRVEA(Var, Obj, eqCon, ieqCon,objective)
numVar = size(Var,2);
numObj = size(Obj,2);
Obj = Obj .* objective;
numEC = length(eqCon);
numIC = length(ieqCon);
eqSum = zeros(length(Var),1);
ieqSum = eqSum;
if numEC == 1
if length(eqCon{1}) == 0
numEC = 0;
end
end
if numIC == 1
if length(ieqCon{1}) == 0
numIC = 0;
end
end
for i = 1:numVar
eval(['var' num2str(i) ' = Var(:,' num2str(i) ');']);
end
for i = 1:numObj
eval(['obj' num2str(i) ' = Obj(:,' num2str(i) ');']);
end
for i = 1:numEC
eval(['eqVal' num2str(i) ' = ' eqCon{i} ';']);
eval(['eqVal' num2str(i) '(eqVal' num2str(i) '<0) = -eqVal' num2str(i) '(eqVal' num2str(i) '<0);']);
eval(['eqSum = eqSum + eqVal' num2str(i) ';']);
end
for i = 1:numIC
eval(['ieqVal' num2str(i) ' = ' ieqCon{i} ';']);
eval(['ieqVal' num2str(i) '(ieqVal' num2str(i) '>0) = 0;']);
eval(['ieqVal' num2str(i) '(ieqVal' num2str(i) '<0) = -ieqVal' num2str(i) '(ieqVal' num2str(i) '<0);']);
eval(['ieqSum = ieqSum + ieqVal' num2str(i) ';']);
end
con_val = eqSum + ieqSum;
%disp(con_val)
end