多目标遗传算法

多目标遗传算法(Multi-Objective Genetic Algorithm,MOGA)

本次提供的代码是一个科技论文的代码,是组内师兄的代码!
Github地址

多目标遗传算法(MOGA)详细介绍

  1. 基本概念

    • 多目标优化是同时优化多个互相冲突的目标函数。在许多实际问题中,常常需要在不同目标之间进行权衡,比如在工程设计中,既要考虑成本,又要考虑性能。
  2. 遗传算法的基本原理

    • 遗传算法是一种基于自然选择和遗传学原理的优化算法。其基本步骤包括:
      1. 种群初始化:生成一个随机的解集(种群)。
      2. 适应度评估:根据目标函数计算每个解的适应度。
      3. 选择:根据适应度选择较优的个体进行繁殖。
      4. 交叉和变异:通过交叉和变异生成新的个体,模拟自然进化过程。
      5. 更新种群:用新生成的个体替换掉旧的个体,形成新的种群。
      6. 终止条件:检查是否满足终止条件(如达到最大代数或找到满意解),如果未满足,回到适应度评估。
  3. 多目标优化的特点

    • 在多目标优化中,目标函数之间通常存在冲突。例如,在设计产品时,增加性能可能会导致成本上升。因此,MOGA的目标是找到一组解,这些解在所有目标上均衡,形成一个被称为帕累托前沿(Pareto Front)的解集。
    • 帕累托最优解是指无法通过改善一个目标而不牺牲另一个目标的解。MOGA通过迭代进化,逐步逼近这一前沿。
  4. 优势

    • MOGA能够处理复杂的多目标问题,适用于非线性和高维空间。
    • 它不依赖于目标函数的可微性,适合处理离散和连续的优化问题。
  5. 应用

    • MOGA在工程设计、资源管理、金融投资组合优化、环境科学等多个领域得到广泛应用。

总体而言,多目标遗传算法是一种强大的优化工具,能够有效解决许多实际问题中的复杂目标函数优化问题。

fitness.m 文件的详细中文注释版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
% 适应度函数
% 输入:
% x - 变量输入向量,包含优化问题中的决策变量
% 输出:
% f - 适应度值向量,包含多个目标函数的输出值

function f = fitness(x)
% 调用 my_model1 函数计算目标函数的值
% 该函数返回多个目标 y1, y2, y3
[y1, y2, y3] = my_model1(x);

% 将目标函数的值组合成一个向量 f
f = [y1, y2, y3];
end

my_model1.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
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
function [y1,y2,y3] = my_model1(x)
% 这是一个混合能量系统模型,结合了PEMFC(质子交换膜燃料电池)和AGMD(空气间隙膜蒸馏)
% 输入参数x是一个包含10个系统参数的优化变量向量
% 输出:
% y1: -功率密度(负值用于最大化)
% y2: -放大系数(负值用于最大化)
% y3: 投资成本(最小化)

% ---------- 系统基本参数初始化(基于优化变量x的映射) ----------
T = 343 + x(1)*(363 - 343); % 操作温度(K),范围343-363K
P = 2 + x(2)*(5 - 2); % 操作压力(bar),范围2-5bar
sigma_mem = 0.1 + x(3)*(0.3 - 0.1); % 膜电导率,范围0.1-0.3
tmem = 0.02 + x(4)*(0.05 - 0.02); % 膜厚度(cm),范围0.02-0.05cm
dp = 1.00E-07 + x(5)*(6.00E-07 - 1.00E-07); % 膜孔径(m),范围1e-7到6e-7m
dm = 0.0001 + x(6)*(0.0005 - 0.0001); % 膜厚度(m),范围0.0001-0.0005m
eps = 0.5 + x(7)*(0.9 - 0.5); % 膜孔隙率,范围0.5-0.9
da = 0.001 + x(8)*(0.006 - 0.001); % 气隙厚度(m),范围0.001-0.006m
Tc = 300 + x(9)*(308 - 300); % 冷却温度(K),范围300-308K
c3 = 0.002; % 常数参数
j = 0.2 + x(10)*(2 - 0.2); % 电流密度(A/cm^2),范围0.2-2A/cm^2

% ---------- 热力学参数计算 ----------
T0 = 298.15; % 标准参考温度(K)
% 计算反应焓变(J/mol)
detaH = -285830 + 75.44*(T-T0) - 0.5*(29.96*(T-T0) + 0.5*0.00418*(T^2-T0^2) + 167000*(1/T-1/T0)) ...
- (27.28*(T-T0) + 0.5*0.00326*(T^2-T0^2) - 50000*(1/T-1/T0));
% 计算反应熵变(J/mol·K)
detaS = 69.95 + 75.44*log(T/T0) - (130.68 + 0.00326*(T-T0) + 27.28*log(T/T0) - 0.5*50000*(T^(-2)-T0^(-2))) ...
- 0.5*(205 + 29.96*log(T/T0) + 0.00418*(T-T0) + 0.5*167000*(T^(-2)-T0^(-2)));
detaG = detaH - T*detaS; % 吉布斯自由能变化(J/mol)

% ---------- 基本物理常数定义 ----------
Rg = 8.314; % 通用气体常数(J/mol·K)
ne = 2; % 电子转移数
A = 16; % PEMFC有效面积(cm^2)
F = 96485; % 法拉第常数(C/mol)
jL = 2; % 极限电流密度(A/cm^2)
c2 = 0.001; % 常数参数

% ---------- 水蒸气压力计算 ----------
t = T - 273.15; % 温度转换为摄氏度(℃)
% 计算水蒸气饱和压力(bar),基于经验公式
PsatH2O = 10^(-2.1794 + 0.02953*t - 9.1837*10^(-5)*t^2 + 1.4454*10^(-7)*t^3);
xsatH2O = PsatH2O/P; % 饱和水蒸气摩尔分数

% ---------- 海水换热系统参数 ----------
ue = 0.02; % 海水流速(m/s)
Th_ei = 300; % 海水入口温度(K)
Cp_sea = 4064; % 海水比热容(J/kg·K)
At = 2*(10)^(-5); % 管道截面积(m^2)
Rolp_sea = 1013; % 海水密度(kg/m^3)
me = ue*Rolp_sea*At; % 海水质量流量(kg/s)

% ---------- AGMD系统参数 ----------
Dh = 1*10^(-3); % 水力直径(m)
tau_m = (2-eps)^2/eps; % 膜的弯曲度因子
Lm = 0.07; % 膜长度(m)
Am = 0.002; % 膜有效面积(m^2)
Rg = 8.3145; % 气体常数(J/mol·K)
KB = 1.38*10^(-23); % 玻尔兹曼常数(J/K)
alpha_m = 0.3; % 膜的吸收系数
Pair = 101*10^3; % 标准大气压(Pa)
Km = 0.2; % 膜的导热系数(W/m·K)
hm = Km/dm; % 膜的导热系数(W/m^2·K)
molw = 0.018; % 水的摩尔质量(kg/mol)

% ---------- 进料侧参数(f) ----------
Uf = 0.02; % 进料侧流速(m/s)
muf = 0.000749; % 海水粘度(Pa·s)
Kf = 0.638624; % 海水导热系数(W/m·K)
Cpf = 4064; % 海水比热容(J/kg·K)
rhof = 1013; % 海水密度(kg/m^3)
Prf = muf*Cpf/Kf; % 普朗特数
Ref = Uf*rhof*Dh/muf; % 雷诺数
Nuf = 1.86*(Ref*Prf*Dh/Lm)^0.33; % 努塞尔特数
hf = Nuf*Kf/Dh; % 进料侧传热系数(W/m^2·K)

% ---------- 膜蒸馏过程参数 ----------
xw = (1000/18)/(1000/18+13/58.5); % 海水中水的摩尔分数
xNa = (13/58.5)/(1000/18+13/58.5); % 海水中NaCl的摩尔分数
yw = 1-xNa/2-10*xNa^2; % 水的活度系数

% ---------- 气隙参数(cd) ----------
Cpcd = 2446.3; % 水蒸气比热容(J/kg·K)
Kg = 0.025; % 气相热导率(W/m·K)
ha = Kg/da; % 气相传热系数(W/m^2·K)

% ---------- 冷却侧参数(c) ----------
Up = 0.02; % 冷却水流速(m/s)
mup = 0.000868; % 冷却水粘度(Pa·s)
Kp = 0.633201; % 冷却水导热系数(W/m·K)
Cpp = 4182; % 冷却水比热容(J/kg·K)
Rolp = 996; % 冷却水密度(kg/m^3)
Prp = mup*Cpp/Kp; % 冷却水普朗特数
Rep = Up*Rolp*Dh/mup; % 冷却水雷诺数
Nup = 1.86*(Rep*Prp*Dh/Lm)^0.33; % 冷却水努塞尔特数
hc = Nup*Kp/Dh; % 冷却侧传热系数(W/m^2·K)

% ---------- 冷凝水参数(d) ----------
g = 9.8; % 重力加速度(m/s^2)
Rold = Rolp; % 冷凝水密度(kg/m^3)
Kd = Kp; % 冷凝水导热系数(W/m·K)

% ---------- 冷凝板参数(cp) ----------
Kcp = 401; % 冷凝板导热系数(W/m·K)
dcp = 1*10^(-3); % 冷凝板厚度(m)
hcp = Kcp/dcp; % 冷凝板传热系数(W/m^2·K)
mud = mup; % 冷凝水粘度(Pa·s)
Hm = 0.02; % 冷凝板高度(m)

% ---------- PEMFC电压计算 ----------
% 计算理论电压(V0)
PH2 = 0.5*PsatH2O*((exp((1.653*j)/T^1.334)*xsatH2O)^(-1)-1); % 氢气分压(bar)
lambd_air = 2; % 空气化学计量比
xN2in = 0.79*(1-xsatH2O); % 入口氮气摩尔分数
xN2out = (1-xsatH2O)/(1+((lambd_air-1)/lambd_air)*(0.21/0.79)); % 出口氮气摩尔分数
xchannelN2 = (xN2in-xN2out)/(log(xN2in/xN2out)); % 通道内平均氮气摩尔分数

% 计算各组分分压
PO2 = P*(1-xsatH2O-xchannelN2*exp((0.291*j)/T^0.832)); % 氧气有效分压(bar)
PH2O = P*xsatH2O; % 水蒸气分压(bar)

% 计算能斯特电压
V0 = 1.229-8.5*10^(-4)*(T-T0)+4.3085*10^(-5)*T*log(PH2*PO2^0.5/PH2O); % 理论电压(V)

% 计算活化过电位
CO2conc = 1.97*10^(-7)*PO2*exp(498/T); % 氧气浓度(mol/cm^3)
CH2conc = 9.174*10^(-7)*PH2*exp(-77/T); % 氢气浓度(mol/cm^3)
ksi = 0.00286+0.0002*log(A)+0.000043*log(CO2conc); % 经验常数
Vact = 0.9514-ksi*T+0.000187*T*log(j*A)-0.000074*T*log(CO2conc); % 活化过电位(V)

% 计算欧姆过电位
Vohm = j*tmem*(sigma_mem)^(-1); % 欧姆过电位(V)

% 计算浓差过电位
P1 = PO2/0.1173+PsatH2O;
if P1<2
beta1 = (7.16*10^(-4)*T-0.622)*P1-1.45*10^(-3)*T+1.68;
else
beta1 = (8.66*10^(-5)*T-0.068)*P1-1.6*10^(-4)*T+0.54;
end
beta2 = 2;
Vcon = j*((beta1*j)/jL)^beta2; % 浓差过电位(V)

% 计算实际电压
V = V0-Vact-Vohm-Vcon; % 实际电压(V)

if V >= 0 % 判断系统是否可行
% ---------- PEMFC性能计算 ----------
PPEMC = V * j; % 计算比功率输出(单位:W/cm^2)
EFPEM = (ne * F * V) / (-detaH); % 计算电池效率
EXDall = -j * A * detaG / (ne * F) - T * j * A * detaS * (1 - T0 / T) / (ne * F); % 计算总放大值
EXDPEM = -j * detaG / (ne * F) - T * j * detaS * (1 - T0 / T) / (ne * F) - j * V; % 计算PEMFC放大值
XPEM = PPEMC / (EXDall / A); % 计算PEMFC放大系数

% 计算热流 qh,单位为 W
qh = (-A * detaH / (ne * F)) * ((1 - EFPEM) * j - (ne * F * c3 * (T - T0)) / (-detaH));
qw = qh; % 热流
Th_eo = qw / (me * Cp_sea) + Th_ei; % 计算出口温度
Tf = Th_eo; % 进料温度
Tmf = Tf - 1; % 计算膜温度
Tcd = Tc + 1; % 计算冷却温度
Tmf_cal = (Tmf + Tcd) / 2; % 膜温度的初始计算
Tcd_cal = (Tmf + Tcd) / 2; % 冷却温度的初始计算

count = 0; % 迭代计数器
eqs = 1e-6; % 精度要求

while count < 100 % 迭代最多进行100次
% 计算膜和冷却剂的压力
Pmf = exp(1)^(23.328 - 3841 / (Tmf - 45)); % 计算膜侧压力
Pcd = exp(1)^(23.328 - 3841 / (Tcd - 45)); % 计算冷却侧压力
T_ave = (Tmf + Tcd) / 2; % 计算平均温度

% 计算扩散系数
PDwa = 1.895 * 10^(-5) * Tmf^2.072; % 膜侧的扩散系数
Dk = (2 / 3 * (8 / pi)^0.5 * (molw / (Rg * T_ave))^0.5 * (eps * dp)) / (tau_m * dm + da); % 计算扩散率
DM = (PDwa * eps * molw / (Pair * Rg * T_ave)) / (dm * tau_m + da); % 计算扩散率
Dm = (1 / Dk + 1 / DM)^(-1); % 计算有效扩散系数

% 计算渗透通量
Fs = Dm * (xw * yw * Pmf - Pcd); % 渗透通量,单位 kg/m2s
Fh = Fs * 3600; % 将秒转化为小时
Hv = (1.7535 * T_ave + 2024.3) * 1000; % 计算蒸发热

% 计算热量
Qf = (hf + Fs * Cpf) * (Tf - Tmf); % 计算热流 Qf

% 计算冷却的热流
KM = (eps / Kg + (1 - eps) / Km)^(-1); % 计算混合热导率
Qc = (Tmf - Tcd) / (dm / KM + da / Kg); % 计算冷却的热量

% 更新温度
Tpc = Tc + Qc / hc; % 计算冷却侧的温度
Tpa = Tpc + Qc / hcp; % 计算冷却侧的温度

% 更新膜和冷却的温度
hcd = Fs * Cpcd / (1 - exp(-Fs * Cpcd / ha)); % 计算热交换系数
hd = (g * Rold^2 * Hv * Kd^3 / (Hm * mud * (Tcd - Tpa)))^(1/4); % 计算热导率
hp = 1 / (1 / hd + 1 / Kcp + 1 / hc); % 计算有效热导率

% 更新膜和冷却的温度
Tmf_cal = Tf - (1 / (hf * (1 / hf + 1 / hcd + 1 / hp))) * (Tf - Tc + Fs * Hv / hcd); % 更新膜温度
Tcd_cal = Tc + (1 / (hf * (1 / hf + 1 / hcd + 1 / hp))) * (Tf - Tc + Fs * Hv / hcd); % 更新冷却温度

count = count + 1; % 增加计数

% 检查收敛条件
if abs(Tmf - Tmf_cal) < eqs && abs(Tcd - Tcd_cal) < eqs
break; % 如果满足精度要求,则退出循环
end

% 更新温度
Tmf = Tmf_cal;
Tcd = Tcd_cal;
end

% 记录迭代次数和真实值
CCount = count;
Fs = real(Fs);
Tmf = real(Tmf);
Tcd = real(Tcd);
T_ave = (Tmf + Tcd) / 2; % 更新平均温度
Hv = (1.7535 * T_ave + 2024.3) * 1000; % 更新蒸发热

% 计算蒸发热通量
Qv = Fs * Hv; % 蒸发热通量,单位为 W/m2
PDAGMD = Qv * Am / A; % 计算AGMD功率密度,单位 W/cm2
Qc = (Tmf - Tcd) / (dm / KM + da / Kg); % 更新冷却热流

% 计算能量守恒
com = qh - (Qv + Qc) * Am; % 能量守恒,确保AGMD利用的热量不超过废热量

% 经济分析
Ncell = 10; % 电池数量
Am1 = 1; % 统一面积规格
A1 = 160; % 电池面积
ppp = PPEMC * A1 * Ncell * 10^-3; % 计算功率
C1 = 2.5 * PPEMC * A1 * Ncell; % 计算成本
C2 = 36 * Am1 + 60 * Am1; % 计算其他成本
C3 = 19.3 * 5; % 计算设备成本
C4 = 100; % 计算固定成本
C5 = 50; % 计算维护成本
Qre = c2 * A1 * (T - T0); % 计算热回收
LTMDRE = (T - T0) / (log(T / T0)); % 计算热回收效率
Qw = 600; % 最大废热量
LTMDIHE = (Th_eo - Th_ei) / (log(Th_eo / Th_ei)); % 计算输入热效率
Are = Qre / LTMDRE; % 计算热回收面积
Aihe = Qw / LTMDIHE; % 计算输入热面积
C6 = 2681 * (Are)^0.59; % 计算热回收设备成本
C7 = 190 + 130 * Aihe; % 计算输入热设备成本
C8 = 200; % 计算其他杂项费用

% 计算总投资
LCinv = (C1 + C2 + C3 + C4 + C5 + C6 + C7 + C8) / A1; % 总投资,单位为每平方米

% 判断能量和功率的合法性
if com >= 0 && PDAGMD >= 0 % 确保能量守恒
EX_out = PDAGMD * A; % 计算输出功率
Pd_hy = V * j + PDAGMD; % 计算HY侧功率,单位 W/cm2
Xhy = (PPEMC * A + EX_out) / EXDall; % 计算HY侧效率
else
Pd_hy = PPEMC; % 如果不满足条件,使用PEMFC功率
Xhy = XPEM; % 使用PEMFC放大系数
end
else
Pd_hy = 0; % 不可行情况下功率设为0
Xhy = 0; % 不可行情况下效率设为0
LCinv = 1e+18; % 设置极大值作为总投资
end

% 最终输出目标
y1 = -Pd_hy; % 最大化HY侧功率
y2 = -Xhy; % 最大化HY侧效率
y3 = LCinv; % 最小化总投资

output.m 文件的详细中文注释版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
% output.m 文件
% 此脚本用于计算和输出模型参数的初始化值

% 定义决策变量 x 的具体值
x = [0.261853019189095, 0.954033395717644, 0.929755925150390, ...
0.0420539659350538, 0.662361595432101, 0.150500955291545, ...
0.948314964274653, 0.0110000915659857, 0.0856124488473688, ...
0.918417984591724];

% 根据决策变量计算各个参数
T = 343 + x(1) * (363 - 343); % 计算温度 T,范围从 343 到 363
P = 2 + x(2) * (5 - 2); % 计算压力 P,范围从 2 到 5
sigma_mem = 0.1 + x(3) * (0.3 - 0.1); % 计算膜的导电性 sigma_mem,范围从 0.1 到 0.3
tmem = 0.02 + x(4) * (0.05 - 0.02); % 计算膜的厚度 tmem,范围从 0.02 到 0.05
dp = 1.00E-07 + x(5) * (6.00E-07 - 1.00E-07); % 计算孔的平均半径 dp,范围从 1E-7 到 6E-7
dm = 0.0001 + x(6) * (0.0005 - 0.0001); % 计算膜的厚度 dm,范围从 0.0001 到 0.0005
eps = 0.5 + x(7) * (0.9 - 0.5); % 计算膜的孔隙率 eps,范围从 0.5 到 0.9
da = 0.001 + x(8) * (0.006 - 0.001); % 计算气隙的厚度 da,范围从 0.001 到 0.006
Tc = 300 + x(9) * (308 - 300); % 计算冷却液的温度 Tc,范围从 300 到 308
c3 = 0.002; % 设定常数 c3
j = 0.2 + x(10) * (2 - 0.2); % 计算电流密度 j,范围从 0.2 到 2

% 以上变量的计算根据输入的决策变量 x,得到具体的模型参数

main.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
% 变量范围
lb = zeros(1, 10); % 下界:10个决策变量的下限均为0
ub = ones(1, 10); % 上界:10个决策变量的上限均为1

% GA参数
% 设置遗传算法的参数
ga_options = optimoptions(@gamultiobj, ...
'MaxGenerations', 5000, ... % 最大代数
'PopulationSize', 2000, ... % 种群规模
'CrossoverFraction', 0.9, ... % 交叉概率
'MutationFcn', {@mutationgaussian, 0.1}, ... % 变异函数和变异概率
'SelectionFcn', {@selectiontournament, 2}); % 选择函数及其参数

% 求解最优参数
% 使用多目标遗传算法求解最优决策变量 x 和对应的适应度值 fval
[x, fval] = gamultiobj(@fitness, 10, [], [], [], [], lb, ub, ga_options);

% 输出结果
disp(['找到的Pareto前沿数量:' num2str(size(fval, 1))]); % 输出找到的帕累托前沿的数量

% 绘制帕累托前沿
plot3(-fval(:, 1), -fval(:, 2), fval(:, 3), '.'); % 绘制三维帕累托前沿
xlabel('功率'); % x轴标签
ylabel('效率'); % y轴标签
zlabel('成本'); % z轴标签
title('Pareto Front'); % 图标题

% 将适应度值转置以便后续处理
A1 = -fval(:, 1); % 功率
B1 = -fval(:, 2); % 效率
C1 = fval(:, 3); % 成本
optpem = -fval; % 存储优化的适应度值

% 数据,根据设计的权重找到最佳解
Y = -fval(:, 1)'; % 功率的负值
B = -fval(:, 2)'; % 效率的负值
C = fval(:, 3)'; % 成本

% 权重
weights = [0.3165, 0.3670, 0.3165]; % 权重向量,权重之和应为1

% 标准化
normA = Y / norm(Y); % 对功率进行标准化
normB = B / norm(B); % 对效率进行标准化
normC = C / norm(C); % 对成本进行标准化

% 加权标准化矩阵
weighted_normA = weights(1) * normA; % 加权后的功率标准化
weighted_normB = weights(2) * normB; % 加权后的效率标准化
weighted_normC = weights(3) * normC; % 加权后的成本标准化

% 正理想解和负理想解
idealPositive = [max(weighted_normA), max(weighted_normB), min(weighted_normC)]; % 正理想解
idealNegative = [min(weighted_normA), min(weighted_normB), max(weighted_normC)]; % 负理想解

% 计算分离度
distancePositive = sqrt((weighted_normA - idealPositive(1)).^2 + ...
(weighted_normB - idealPositive(2)).^2 + ...
(weighted_normC - idealPositive(3)).^2); % 到正理想解的距离

distanceNegative = sqrt((weighted_normA - idealNegative(1)).^2 + ...
(weighted_normB - idealNegative(2)).^2 + ...
(weighted_normC - idealNegative(3)).^2); % 到负理想解的距离

% 计算相对接近度
relativeCloseness = distanceNegative ./ (distancePositive + distanceNegative); % 相对接近度计算

% 找到最佳点
[bestValue, bestIndex] = max(relativeCloseness); % 找到相对接近度最大的点

% 输出最佳点的信息
fprintf('最佳点的索引是:%d, 相对接近度为:%.4f\n', bestIndex, bestValue); % 输出最佳点的索引和接近度

AAA = abs(fval); % 计算适应度值的绝对值