多目标粒子群优化算法(MOPSO)是一种用于解决多目标优化问题的进化算法。它基于粒子群优化算法(PSO),通过引入多个目标函数和非支配排序来处理多目标问题。
MOPSO的基本思想是将问题转化为在多维搜索空间中寻找一组最优解的问题。每个解被称为一个粒子,它在搜索空间中移动,并根据自身的经验和群体的经验进行调整。粒子的位置表示解的候选解,速度表示解的搜索方向和步长。
MOPSO的算法流程如下:
初始化粒子群的位置和速度。
计算每个粒子的适应度值,即目标函数值。
根据非支配排序和拥挤度距离计算,对粒子进行排序。
更新粒子的速度和位置,以便更好地探索搜索空间。
重复步骤2-4,直到达到停止条件。
MOPSO的优点是能够找到一组近似最优解,这些解分布在整个帕累托前沿上,提供了多个可行的解决方案供决策者选择。它还具有较好的全局搜索能力和收敛性能。
MOPSO的应用领域包括工程优化、机器学习、数据挖掘等。它已经在许多实际问题中取得了良好的效果。
ZDT1、ZDT2、ZDT3、ZDT4和ZDT6是一些常用的多目标优化测试函数。它们被广泛用于评估多目标优化算法的性能和效果。
ZDT1函数是一个双目标优化函数,它具有一个全局最优解和一个局部最优解。该函数的定义如下:
f 1 ( x ) = x 1 f 2 ( x ) = g ( x ) ? h ( f 1 ( x ) , g ( x ) ) g ( x ) = 1 + 9 n ? 1 ? ∑ i = 2 n x i h ( f 1 ( x ) , g ( x ) ) = 1 ? f 1 ( x ) g ( x ) ? f 1 ( x ) g ( x ) ? sin ? ( 10 π f 1 ( x ) ) f_1(x) = x_1 \\ f_2(x) = g(x) \cdot h(f_1(x), g(x)) \\ g(x) = 1 + \frac{9}{n-1} \cdot \sum_{i=2}^{n} x_i \\ h(f_1(x), g(x)) = 1 - \sqrt{\frac{f_1(x)}{g(x)}} - \frac{f_1(x)}{g(x)} \cdot \sin(10 \pi f_1(x)) f1?(x)=x1?f2?(x)=g(x)?h(f1?(x),g(x))g(x)=1+n?19??i=2∑n?xi?h(f1?(x),g(x))=1?g(x)f1?(x)???g(x)f1?(x)??sin(10πf1?(x))
其中, x = ( x 1 , x 2 , . . . , x n ) x = (x_1, x_2, ..., x_n) x=(x1?,x2?,...,xn?)是决策变量向量, n n n是决策变量的维度。ZDT1函数的全局最优解是 x ? = ( 0 , 1 , . . . , 1 ) x^* = (0, 1, ..., 1) x?=(0,1,...,1),对应的目标函数值为 f ? = ( 0 , 1 ? 0 , . . . , 1 ? 1 ? 1 n 2 ) f^* = (0, 1 - \sqrt{0}, ..., 1 - \sqrt{1 - \frac{1}{n^2}}) f?=(0,1?0?,...,1?1?n21??)。
ZDT2函数也是一个双目标优化函数,它具有一个全局最优解和一个局部最优解。该函数的定义如下:
f 1 ( x ) = x 1 f 2 ( x ) = g ( x ) ? h ( f 1 ( x ) , g ( x ) ) g ( x ) = 1 + 9 n ? 1 ? ∑ i = 2 n x i h ( f 1 ( x ) , g ( x ) ) = 1 ? ( f 1 ( x ) g ( x ) ) 2 f_1(x) = x_1 \\ f_2(x) = g(x) \cdot h(f_1(x), g(x)) \\ g(x) = 1 + \frac{9}{n-1} \cdot \sum_{i=2}^{n} x_i \\ h(f_1(x), g(x)) = 1 - (\frac{f_1(x)}{g(x)})^2 f1?(x)=x1?f2?(x)=g(x)?h(f1?(x),g(x))g(x)=1+n?19??i=2∑n?xi?h(f1?(x),g(x))=1?(g(x)f1?(x)?)2
其中, x = ( x 1 , x 2 , . . . , x n ) x = (x_1, x_2, ..., x_n) x=(x1?,x2?,...,xn?)是决策变量向量, n n n是决策变量的维度。ZDT2函数的全局最优解是 x ? = ( 0 , 1 , . . . , 1 ) x^* = (0, 1, ..., 1) x?=(0,1,...,1),对应的目标函数值为 f ? = ( 0 , 1 ? 0 2 , . . . , 1 ? 0 2 ) f^* = (0, 1 - 0^2, ..., 1 - 0^2) f?=(0,1?02,...,1?02)。
ZDT3函数是一个双目标优化函数,它具有一个全局最优解和一个局部最优解。该函数的定义如下:
f 1 ( x ) = x 1 f 2 ( x ) = g ( x ) ? h ( f 1 ( x ) , g ( x ) ) g ( x ) = 1 + 9 n ? 1 ? ∑ i = 2 n x i h ( f 1 ( x ) , g ( x ) ) = 1 ? f 1 ( x ) g ( x ) ? f 1 ( x ) g ( x ) ? sin ? ( 10 π f 1 ( x ) ) f_1(x) = x_1 \\ f_2(x) = g(x) \cdot h(f_1(x), g(x)) \\ g(x) = 1 + \frac{9}{n-1} \cdot \sum_{i=2}^{n} x_i \\ h(f_1(x), g(x)) = 1 - \sqrt{\frac{f_1(x)}{g(x)}} - \frac{f_1(x)}{g(x)} \cdot \sin(10 \pi f_1(x)) f1?(x)=x1?f2?(x)=g(x)?h(f1?(x),g(x))g(x)=1+n?19??i=2∑n?xi?h(f1?(x),g(x))=1?g(x)f1?(x)???g(x)f1?(x)??sin(10πf1?(x))
其中, x = ( x 1 , x 2 , . . . , x n ) x = (x_1, x_2, ..., x_n) x=(x1?,x2?,...,xn?)是决策变量向量, n n n是决策变量的维度。ZDT3函数的全局最优解是 x ? = ( 0 , 1 , . . . , 1 ) x^* = (0, 1, ..., 1) x?=(0,1,...,1),对应的目标函数值为 f ? = ( 0 , 1 ? 0 , . . . , 1 ? 1 ? 1 n 2 ) f^* = (0, 1 - \sqrt{0}, ..., 1 - \sqrt{1 - \frac{1}{n^2}}) f?=(0,1?0?,...,1?1?n21??)。
ZDT4函数是一个双目标优化函数,它具有一个全局最优解和一个局部最优解。该函数的定义如下:
f 1 ( x ) = x 1 f 2 ( x ) = g ( x ) ? h ( f 1 ( x ) , g ( x ) ) g ( x ) = 1 + 10 ( n ? 1 ) + ∑ i = 2 n ( x i 2 ? 10 cos ? ( 4 π x i ) ) h ( f 1 ( x ) , g ( x ) ) = 1 ? f 1 ( x ) g ( x ) f_1(x) = x_1 \\ f_2(x) = g(x) \cdot h(f_1(x), g(x)) \\ g(x) = 1 + 10(n-1) + \sum_{i=2}^{n} (x_i^2 - 10 \cos(4 \pi x_i)) \\ h(f_1(x), g(x)) = 1 - \sqrt{\frac{f_1(x)}{g(x)}} f1?(x)=x1?f2?(x)=g(x)?h(f1?(x),g(x))g(x)=1+10(n?1)+i=2∑n?(xi2??10cos(4πxi?))h(f1?(x),g(x))=1?g(x)f1?(x)??
其中, x = ( x 1 , x 2 , . . . , x n ) x = (x_1, x_2, ..., x_n) x=(x1?,x2?,...,xn?)是决策变量向量, n n n是决策变量的维度。ZDT4函数的全局最优解是 x ? = ( 0 , 1 , . . . , 1 ) x^* = (0, 1, ..., 1) x?=(0,1,...,1),对应的目标函数值为 f ? = ( 0 , 1 ? 0 , . . . , 1 ? 1 ? 1 n 2 ) f^* = (0, 1 - \sqrt{0}, ..., 1 - \sqrt{1 - \frac{1}{n^2}}) f?=(0,1?0?,...,1?1?n21??)。
ZDT6函数是一个双目标优化函数,它具有一个全局最优解和一个局部最优解。该函数的定义如下:
f 1 ( x ) = 1 ? exp ? ( ? 4 x 1 ) ? sin ? 6 ( 6 π x 1 ) f 2 ( x ) = g ( x ) ? h ( f 1 ( x ) , g ( x ) ) g ( x ) = 1 + 9 ( ∑ i = 2 n x i n ? 1 ) 0.25 h ( f 1 ( x ) , g ( x ) ) = 1 ? ( f 1 ( x ) g ( x ) ) 2 f_1(x) = 1 - \exp(-4x_1) \cdot \sin^6(6 \pi x_1) \\ f_2(x) = g(x) \cdot h(f_1(x), g(x)) \\ g(x) = 1 + 9 \left(\frac{\sum_{i=2}^{n} x_i}{n-1}\right)^{0.25} \\ h(f_1(x), g(x)) = 1 - \left(\frac{f_1(x)}{g(x)}\right)^2 f1?(x)=1?exp(?4x1?)?sin6(6πx1?)f2?(x)=g(x)?h(f1?(x),g(x))g(x)=1+9(n?1∑i=2n?xi??)0.25h(f1?(x),g(x))=1?(g(x)f1?(x)?)2
其中, x = ( x 1 , x 2 , . . . , x n ) x = (x_1, x_2, ..., x_n) x=(x1?,x2?,...,xn?)是决策变量向量, n n n是决策变量的维度。ZDT6函数的全局最优解是 x ? = ( 0 , 1 , . . . , 1 ) x^* = (0, 1, ..., 1) x?=(0,1,...,1),对应的目标函数值为 f ? = ( 1 ? exp ? ( ? 4 ? 0 ) ? sin ? 6 ( 6 π ? 0 ) , 1 ? ( 0 g ( x ) ) 2 ) f^* = (1 - \exp(-4 \cdot 0) \cdot \sin^6(6 \pi \cdot 0), 1 - \left(\frac{0}{g(x)}\right)^2) f?=(1?exp(?4?0)?sin6(6π?0),1?(g(x)0?)2)。
import numpy as np
import matplotlib.pyplot as plt
from MOPSO import *
from FunInfo import FunInfo
# 参数设置
#testProblem可取1 2 3 4 5 ,分别对应测试函数ZDT1、ZDT2、ZDT3、ZDT4、ZDT6
testProblem=1#测试问题
num_particles = 100#种群大小
num_iterations = 100#最大迭代次数
#获取测试函数信息
GetFun=FunInfo(testProblem)
Fun,dim,bounds=GetFun.GetFunDetail()
#Fun 目标函数
#dim 变量维度
#bounds 变量上下界
# 运行MOPSO
pareto_POF,pareto_POS = mopso(num_particles, bounds, num_iterations,Fun)
# pareto_POF 算法得到的POF
# pareto_POS 算法得到的POS
# 绘制Pareto前沿
plt.scatter(pareto_POF[:, 0], pareto_POF[:, 1])
plt.xlabel('Objective 1')
plt.ylabel('Objective 2')
plt.title('Pareto Front')
plt.show()
MOPSO求解ZDT1结果:
MOPSO得到的POF
0.259709 2.28455
0.00690907 3.05093
0.140244 2.52921
0.194179 2.40473
0.291803 2.23196
0.0478809 2.8041
0.020577 2.91755
0.193925 2.4124
0.00368497 3.08368
0.0265255 2.89159
0.124372 2.54897
0.0903595 2.65361
0.111091 2.59651
0.336201 2.17209
0.111091 2.59651
0.161572 2.47243
0.229625 2.32815
0.250301 2.30713
0.232698 2.32376
0.0380952 2.83465
0 3.16703
MOPSO得到的POS
0.259709 0.206563 0.262395 0.330207 0.221909 0.216457 0.240484 0.264247 0.17576 0.202084 0.221106 0.344181 0.186364 0.365219 0.308246 0.258176 0.147316 0.232802 0.307594 0.256584 0.295267 0.200903 0.230752 0.192236 0.323826 0.215109 0.259054 0.0988141 0.292785 0.2181
0.00690907 0.211317 0.256477 0.325657 0.222955 0.217783 0.235375 0.265844 0.177133 0.206249 0.224223 0.344072 0.186536 0.363423 0.30815 0.254027 0.15113 0.231961 0.306133 0.260573 0.288718 0.203908 0.229322 0.197834 0.324551 0.210232 0.259513 0.102299 0.29228 0.229964
0.140244 0.209385 0.259959 0.325469 0.242118 0.21635 0.244421 0.265091 0.178215 0.198313 0.223158 0.342554 0.194254 0.360312 0.306776 0.25008 0.149257 0.232551 0.306461 0.261635 0.279619 0.218785 0.225743 0.195812 0.321215 0.207302 0.258903 0.096942 0.29398 0.221051
0.194179 0.214838 0.262193 0.330877 0.228047 0.217031 0.242723 0.262535 0.179099 0.203259 0.222455 0.342149 0.191791 0.359764 0.308456 0.251294 0.146416 0.231824 0.306736 0.256115 0.283306 0.206591 0.21982 0.19925 0.320917 0.211023 0.256579 0.107627 0.29019 0.21027
0.291803 0.212691 0.257844 0.328295 0.233754 0.214182 0.23723 0.261915 0.176184 0.207861 0.222565 0.344456 0.181742 0.365396 0.307452 0.25766 0.147542 0.233276 0.306793 0.254134 0.29341 0.208863 0.23002 0.199517 0.324387 0.209632 0.259011 0.0990098 0.294026 0.213493
0.0478809 0.216651 0.259367 0.328331 0.225924 0.21971 0.233748 0.26238 0.173839 0.19711 0.224381 0.34515 0.185305 0.370065 0.308524 0.249986 0.146289 0.233748 0.304661 0.26142 0.309225 0.208122 0.22857 0.19579 0.320692 0.215698 0.252064 0.0977351 0.290713 0.208368
0.020577 0.211338 0.263892 0.3257 0.224883 0.215093 0.237443 0.265578 0.173969 0.208836 0.220684 0.341641 0.178408 0.365913 0.31156 0.249342 0.145116 0.233583 0.305689 0.249973 0.28547 0.198957 0.223196 0.197133 0.32544 0.214477 0.255934 0.0941949 0.294107 0.184575
0.193925 0.219111 0.258146 0.322174 0.235035 0.217441 0.234505 0.264163 0.176674 0.199034 0.22554 0.344312 0.184618 0.367491 0.308294 0.247647 0.14965 0.231847 0.306192 0.254032 0.28892 0.203227 0.229194 0.199631 0.325727 0.211907 0.254263 0.100237 0.292071 0.238396
0.00368497 0.224424 0.25708 0.323866 0.22451 0.215232 0.23764 0.264902 0.176306 0.201394 0.221482 0.343175 0.182486 0.362194 0.306539 0.24927 0.145425 0.232709 0.301954 0.258643 0.28667 0.213959 0.227241 0.198545 0.320097 0.212448 0.259151 0.0956305 0.289055 0.23154
0.0265255 0.211455 0.259075 0.327028 0.223942 0.218628 0.232437 0.264829 0.179138 0.202931 0.224285 0.346091 0.188079 0.362184 0.305754 0.24654 0.148866 0.233215 0.300781 0.255995 0.295698 0.199071 0.226223 0.199459 0.320269 0.212326 0.254811 0.0969461 0.290454 0.204752
0.124372 0.20631 0.250273 0.327286 0.219569 0.216739 0.236174 0.265401 0.179914 0.212409 0.225485 0.344351 0.181512 0.359042 0.307393 0.24636 0.147341 0.233483 0.302924 0.256876 0.280286 0.204643 0.224814 0.196346 0.320323 0.210301 0.25607 0.0960217 0.291356 0.217787
0.0903595 0.208954 0.258207 0.327603 0.219796 0.214741 0.241616 0.265889 0.183275 0.205012 0.231383 0.344135 0.186505 0.361994 0.305353 0.245125 0.146247 0.235472 0.301444 0.256822 0.292551 0.211136 0.224011 0.188892 0.321556 0.213671 0.263218 0.102339 0.289198 0.21227
0.111091 0.219589 0.258602 0.328482 0.220599 0.219097 0.238901 0.26553 0.176584 0.203425 0.222938 0.342918 0.182056 0.3617 0.308329 0.246941 0.145366 0.232822 0.307161 0.255054 0.289235 0.207224 0.227698 0.197414 0.324049 0.21524 0.263934 0.0936788 0.292116 0.21641
0.336201 0.210147 0.253185 0.329699 0.230958 0.217181 0.246957 0.266151 0.173272 0.207811 0.224127 0.343148 0.201096 0.362611 0.308671 0.256933 0.148152 0.233259 0.307048 0.258539 0.295292 0.218889 0.228196 0.201061 0.32706 0.215266 0.254991 0.100065 0.291135 0.213834
0.111091 0.219589 0.258602 0.328482 0.220599 0.219097 0.238901 0.26553 0.176584 0.203425 0.222938 0.342918 0.182056 0.3617 0.308329 0.246941 0.145366 0.232822 0.307161 0.255054 0.289235 0.207224 0.227698 0.197414 0.324049 0.21524 0.263934 0.0936788 0.292116 0.21641
0.161572 0.206942 0.256324 0.327177 0.226492 0.212188 0.235765 0.26377 0.183307 0.208893 0.22106 0.34436 0.183867 0.363299 0.305054 0.245914 0.146366 0.233952 0.305987 0.257221 0.295124 0.191074 0.231637 0.196806 0.322469 0.214167 0.257816 0.094567 0.292087 0.234287
0.229625 0.213752 0.257872 0.327651 0.226505 0.216504 0.239037 0.266452 0.176805 0.193425 0.223454 0.342063 0.186955 0.360861 0.303297 0.249873 0.147119 0.232815 0.307298 0.257899 0.29564 0.213307 0.230063 0.197194 0.322162 0.210373 0.252905 0.0961514 0.291 0.19594
0.250301 0.209934 0.259245 0.327228 0.223694 0.217319 0.242386 0.265627 0.172347 0.203962 0.226645 0.344826 0.182849 0.363607 0.30785 0.251644 0.149048 0.235367 0.306089 0.258399 0.293732 0.202077 0.226202 0.198748 0.321367 0.210169 0.259056 0.119815 0.291665 0.225856
0.232698 0.207125 0.262217 0.324577 0.227735 0.218066 0.241686 0.265291 0.175778 0.191417 0.222441 0.34431 0.184552 0.363536 0.307944 0.247031 0.148662 0.232538 0.303817 0.258539 0.291736 0.213453 0.227322 0.200518 0.320485 0.215539 0.25051 0.0962299 0.291011 0.205196
0.0380952 0.211421 0.26015 0.32823 0.222307 0.216014 0.232901 0.264362 0.177917 0.207362 0.224776 0.344691 0.184918 0.361147 0.306546 0.248686 0.14813 0.234018 0.305535 0.257587 0.28813 0.197549 0.231341 0.197543 0.3215 0.216229 0.25434 0.0980952 0.290496 0.201749
0 0.21406 0.260849 0.325909 0.222573 0.216186 0.236121 0.262781 0.177787 0.20603 0.222695 0.344806 0.183774 0.35879 0.310419 0.243456 0.145568 0.231378 0.303405 0.253002 0.281373 0.199173 0.226147 0.195574 0.322139 0.212987 0.256166 0.0673191 0.291236 0.210951