多目标遗传算法研究

来源:互联网 发布:51系列单片机 编辑:程序博客网 时间:2024/03/29 21:59
多目标遗传算法研究    
<script type="text/javascript"> <!--google_ad_client = "pub-3332019644544960"; google_alternate_ad_url = "/google_ad/google_adsense_script.html";google_ad_width = 300;google_ad_height = 250;google_ad_format = "300x250_as";google_ad_channel ="text_image"; //2006-11-06: Article-360*250 google_ad_channel = "4137844296";google_color_border = "FFFFFF";google_color_bg = "FFFFFF";google_color_link = "000000";google_color_url = "000000";google_color_text = "000000";//--></script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script> 转载自easyworm soft

第四章 多目标遗传算法研究
§4.1 多目标优化算法简介
        实际的工程优化问题大多数是多目标优化问题,目标之间一般都是互相冲突的。多目标优化很早就得到了人们的重视,到目前已经发展了较多的求解多目标优化的方法。下面先介绍多目标优化最重要的关于非劣解以及非劣解集的定义。

定义1:若 ( 为多目标优化的可行域),不存在另一个可行点 ,使得 成立( 为目标数),且其中至少有一个严格不等式成立,则称 是多目标优化的一个非劣解(Noninferior Solution)。所有非劣解构成的集叫非劣解集(Noninferior Set)。

        一个多目标优化如果存在非劣解,往往存在无穷多个,形成非劣解集。在求解实际问题时,过多的非劣解是无法直接应用的。决策者只能选择令其最满意的一个非劣解作为最终解。求最终解主要有三类方法,一类是求非劣解的生成法,即先求出大量的非劣解,构成非劣解的一个子集,然后按照决策者的意图找出最终解,另一类为交互法,不先求出很多的非劣解,而是通过分析者与决策者对话的方式,逐步求出最终解。最后一类是事先要求决策者提供目标之间的相对重要程度,算法以此为依据,将多目标问题转化为单目标问题进行求解,该类方法也可以被认为是第一类方法的一个子方法,该类方法的难点在于,如何得到决策者真实的权重信息,本章将提出一种基于模糊逻辑的,能比较好反映决策者权重的多目标遗传算法。

        生成法主要有加权法﹑约束法﹑加权法和约束法结合的混合法以及多目标遗传算法。而交互法主要有用于求解线性约束多目标优化的Geoffrion法﹑求解线性多目标优化的逐步法(STEM)和Zionts-Wallenius方法以及代替价值交换法。

认为相对而言生成法对决策者更有吸引力,首先目前没有比较好的多目标非线性优化的交互法,其次在只给决策者有限信息的前提下,往往要求决策者回答一些似是而非的问题,决策者在交互过程中将会很被动,也就是说交互法在某种程度上将问题的矛盾转嫁给了决策者。如果我们能求得非劣解的一个较好的近似解集,决策者就有了一个对问题比较全面的认识,从而能更好地进行决策和折衷。

生成法中,常用的加权法有其固有的缺点,对于非劣解集的某些区域不可能求出。如图4.1就是一个两个目标的例子,箭头所指非劣解曲线凹的部分无法用加权法求出,出现该现象的原因是,加权法实际上是优化各个目标函数正线性组合而成的单个目标。即采用正加权系数计算的单目标最优必然是非劣解,而某些非劣解可能找不到一组正加权系数来进行求解。采用约束法可以避免该现象,但是计算代价过大,且过程很繁杂,应用前景也不乐观。利用多目标遗传算法求解非劣解集是最近几年新出现的一种求解思路,目前还处在研究

图4.1 加权法无法求出全部非劣解的例子

的初始阶段,但是初步的计算结果非常令人振奋,故本章另一个研究重点就放在了多目标非劣解集算法的研究上。

§4.2基于模糊逻辑的多目标遗传算法
§4.2.1 模糊逻辑简介
        模糊逻辑(Fuzzy Logic)是一种新型的分类方法(分类是集合论的基本概念之一)。模糊逻辑模仿人类的智慧,引入隶属度的概念,描述介于“真”与“假”中间的过渡过程。在模糊逻辑中,事件不以集合的极限值分类,而是给每一个元素赋予一个介于0和1之间的实数,描述其属于一个集合的强度。具体的介绍可以参考文献【116】。

§4.2.2 基于模糊逻辑的多目标遗传算法的思路和具体实现
        通过前面的介绍,我们知道采用模糊逻辑是一种很好的反应决策者主观意愿的工具。可以用模糊逻辑的方法反应决策者对于各个目标之间重要性的“权衡”信息。众所周知,遗传算法是依据个体的适应度进行,可以认为适应度就是决策者对于个体的综合评价,因而可以依据模糊逻辑的方法,直接构造决策者对于遗传个体的适应度的取值,即决策者对个体的综合评价。并以此作为遗传进化的依据和动力。下面是初步的算法步骤:

(1)分别求出各单目标的最优解;

(2)以(1)中的单目标的最优解和决策者协商,给出各个目标满意度的隶属函数;

(3)通过模糊逻辑表达决策者的想法,将各目标的满意度和个体的适应度联系起来;

(4)以(3)定义的适应度为基础采用遗传算法进行求解;

        之所以首先求解各个单目标的最优解,是希望能给决策者一个比较清晰的概念,即如果单独优化某个目标,可能的最优解是多少。有了这个信息,决策者才能给出令人置信的关于不同目标的满意度的隶属曲线。如果求解单目标优化的难度很大,也可以给出对单目标最优的一个估计值。

        具体的计算方法和模糊控制的计算方法基本相同,也分为模糊化(Fuzzification)﹑模糊推理(Fuzzy-Inference)和去模糊化(Defuzzification)三部分组成。在算法中,模糊推理采用的是最大最小法,而去模糊化采用的是面积重心法。详见参考文献【116】。

        下面以十杆桁架双目标优化为例详细叙述算法过程。

         参考图3.4,位移目标是指节点1﹑2﹑3﹑4的最大 向位移最小。这里最大 向位移指的是绝对值最大。

        这样我们就有了两个目标,即同时极小化位移和重量,可以建立比较简单的模糊逻辑如下:

(1)如果重量轻并且位移小那么设计的适应度高;

        显然上式同时对两个目标都提出了要求。而如果我们只关心重量则可以建立如下的模糊逻辑:

(2)如果重量轻不管位移大或小设计的适应度都应高;

        我们可以将模糊逻辑表示得更加精细,更符合决策者实际的想法:

(3-1)如果重量轻而且位移小那么设计的适应度很高;

(3-2)如果重量轻而且位移中等那么设计的适应度高;

(3-3)如果重量轻而且位移大那么设计的适应度一般;

(3-4)如果重量中等而且位移小那么设计的适应度高;

(3-5)如果重量中等而且位移中等那么设计的适应度中等;

(3-6)如果重量中等而且位移大那么设计的适应度低;

(3-7)如果重量大而且位移小那么设计的适应度中等;

(3-8)如果重量大而且位移中等那么设计的适应度低;

(3-9)如果重量大而且位移大那么设计的适应度很低;

        我们可以建立相应的表格表示以上逻辑:

        从上表可以很明显地看出,位移和重量是两个互相冲突的目标。

        在已知单目标极值的情况下我们采取一简单的模糊逻辑来确定个体的适应度,如果重量轻并且位移小那么适应度高。

        为简单起见,假定重量轻的隶属函数为线性的,如图4.2所示。

        假定位移小的隶属函数也为线性,如图4.4所示。

        个体适应度的取值范围定义为[0,1],适应度高的隶属函数也假定为线性,如图4.3所示。

        群体规模取100,代数为500代,复制概率为0.2,变异概率为0.01,随机运行十次得到如下结果:
        从表4.3可以看出采用模糊逻辑的办法是可行的。我们知道采用模糊逻辑的系统实际上就是一个将输入映射到输出的一个变换。如果基于传统的模糊折衷的方法,即将各目标优的隶属度的最小作为个体的适应度,实际上该方法的思路和文献【59】提出的模糊规划的求解方法相似,可以认为文献【59】的算法是模糊逻辑算法的一种简化。采用此方法随机运行十次求得结果如下表。

        从前面的论述和算例可以看出,采用模糊逻辑来表示决策者比较模糊的表达是一种较好的方式,可以期望求得决策者真正“偏好”的解。

§4.3分级多目标非劣解集遗传算法研究
§4.3.1 多目标非劣解集遗传算法简介
        多目标遗传算法是最近几年发展起来的一种求解多目标优化非劣解集的有效方法,目前还处于发展的初始阶段,方法不多,有效的方法就更少。主要有以下一些:分级(Rank)遗传算法﹑两分支竞赛(Two-Branch Tournament)遗传算法以及提出的简单劣解惩罚算法。多目标的非劣解集算法实际上是一个逼近的过程。对于二维问题,就是逼近非劣解曲线的过程。但是,若不知道各单目标的最优解,就不知道最终非劣解曲线端点的位置,也不知道曲线的形状。所以多目标遗传规划比单目标遗传规划从理论上讲要复杂得多。但是从非线性规划的理论可知,最优解一般发生在约束集的边界,而多目标优化的非劣解集一般是可行域中一段连续的边界,即使对于可行域为凹域的问题也常常是成立的。这就是说,非劣解之间有相关性,可以认为是一种特殊的模式。这样就使得非劣点之间的遗传操作的效率相对单目标情况来得更为有效。再加上遗传算法本身就是基于群体的,和求解一个解集的目的是一致的。所以用遗传算法来求解多目标优化问题是适合的。

    从计算的总体性能来看,分级遗传算法属于目前比较好的算法。下面先介绍一下多目标优化中级的概念。

级的概念是定义在目标函数空间中的。目标函数空间中的点如果已被定级,在以后的定级中不被考虑,定级就是找出当前目标函数空间中的非劣点,将其级数定为当前级数 ,然后去掉 级的点,将当前级数加1,然后对剩下的点重复以上定级过程,直到目标函数空间中所有的点均被定级。按照这样的定义,可以得到如下的定理。

定理4.1 对于级 中的任意点,总可以在级 中至少找到一个优于该点的点。

注意这里优于的概念是在向量意义下定义的。定理的证明可以直接用反证法得到。在某个级中,设计点互为非劣点。

       非劣属性属于一种半序,不具有传递性,以图4.5为例,A对B非劣,B对C非劣,但是C却劣于A。

如果对图4.5中的设计点进行分级,结果是:
图4.5

实际上我们也可以把级当成一种半序,即不同级之间的设计点可能是相互非劣的。这一点是采用分级遗传算法的一个必须要考虑的问题。

分级遗传算法就是将设计点的级,设计点的可行性与设计点的适应度结合起来的一种遗传算法。

分级算法的主要缺点是容易出现聚集的现象,出现该现象的原因是,由于某些目标函数的极值相对其他目标函数“容易求得”,从而必然造成最终求出的非劣解集为靠近该目标的区域,而距其他比较“难求”的目标极值较远,在两个载荷作用下的十杆问题就是一个典型的例子。该问题的位移极值较容易求得,而重量极值较难求出。采用分级算法很难求得靠近重量极值的区域。

§4.3.2 稳态分级多目标非劣解集遗传算法
       前面简单介绍了分级遗传算法的基本思路,由于遗传算法本身存在最小欺骗的现象(这也是采用稳态遗传算法的一个最大的原因)。以及我们前面提到的级是半序的客观事实,所以认为如何在多目标非劣解集遗传算法中使得算法具有某种程度的稳态是算法成功的关键。

        在考虑算法具有稳态的同时,还要适当考虑计算出的非劣解集的均匀性。过于聚集的结果用处不大。同时也希望非劣解集中各个单目标的最优能和问题真正的单目标最优比较接近。这几个要求使得构造多目标遗传算法的难度较大。

        众所周知,单目标遗传算法一般采用保留每代最优个体的办法来实现稳态,但是在多目标分级遗传规划中,很难定义最优个体,一种简单的方法就是每次保留当前代中级数为1的个体,但是正如前面指出的那样,级只是一个半序,直接保留当前代中级数为1的个体是不够的。于是考虑将前一代的群体和当前代的群体结合起来进行考虑。

        关于如何将级﹑可行性以及个体适应度结合起来,处理的方法比较简单,即对不可行解,不参与评定级数,直接给予一个很小的适应度。基于级定义了适应度后,应用遗传算法的流程可以得到新的群体,与单目标遗传算法不同的是,此时要保留所有旧群体中的全部个体。

        得到了新旧群体后,需要从中选出个体组成新一代的群体。下面给出提出的几种实现“稳态”的方式。

(1)对于新群体中的所有个体做如下的检查:

        将新群体中的个体加入到旧群体中,重新对旧群体进行分级,得到新个体的级和与新个体编号相同的旧个体的级,分别设为NewRank和OldRank,如果New Rank大于OldRank,我们用旧个体替代新个体。注意在此所谓编号相同是指旧群体和新群体均采用数组的形式实现,编号即对应于数组的下标。过程可以参考图4.6。
(2)将新群体和旧群体合成为一个大群体,进行分级,得到新个体的级和与新个体相同编号的旧个体的级,分别设为NewRank和OldRank,如果NewRank大于OldRank,我们用旧个体替代新个体。过程可以参考图4.7。
        数值计算结果表明,采用形式(1)求解效果相对于形式(2)较好,并且发现,在规划过程中,大多数的新个体的级劣于旧个体,级相同的情况也占有相当的比例,而级得到提高的情况较少。而我们只对新个体的级劣于旧个体的情况进行了处理,即直接保留旧个体。可以得出结论,每次操作从上一代中保留的个体的数量是较大的,同时还发现以上算法只是一种比较粗略的近似算法,可能会出现一些欺骗。

        下面是提出的另外一种形式,也是推荐的一种形式。

(3)将新群体和旧群体合并为一个规模为二倍的大群体,对该群体进行分级,将其中的第一级的非劣解集直接选入一临时群体中,该临时群体的规模大小和新旧群体的大小相同。选入的时候,注意去掉其中重复的个体,这是由于多目标优化对于群体多样性的要求要大于单目标优化,同时去掉其中距离过近的个体,即尽量保持个体在目标函数空间意义下的均匀性。如果在上述过程结束时或是结束之前,临时群体已满,此时可以选择两种做法,一个做法就是直接退出输出临时群体中的个体。另外一个做法就是继续进行求解,这时一些非劣点将被放弃,继续进行求解将导致非劣解集向全局非劣解集收敛,当然我们也可以加大个体目标空间下的最小距离作为去掉非劣点的一种方法。如果临时群体未满,我们接着将第2级﹑第3级的个体加入到临时群体中,加入的原则和加入第1级的个体相同,该过程反复进行直到临时群体满或是大群体已无个体可供选择。最后我们将临时群体中的有效个体随机替换新群体中的个体,如果临时群体满,实际上就是替代掉新群体。过程可以参考图4.8。

临时群体

按第1级﹑2级...的顺序将个体加入临时群体

重新分级

    需要指出的是,关于设计点在目标函数空间的距离的定义,由于各个目标的量纲不同一般不宜直接进行运算,合理的办法是将目标函数值进行正则化,即将其取值范围均换算到[0,1]区间,但是该方法也有一个缺点,以两个目标为例,该方法可能改变非劣解集曲线的形状,在某些情况下将使非劣解集曲线丢失某些比较关键的细节。在以下的算例中,不采用正则化的形式,而直接以各个目标值作为计算距离的根据,距离的意义是普通的欧氏距离。

§4.3.3 算例
        采用形式(3),对两个目标(最轻和最小位移)十杆桁架优化问题进行求解。

       取群体规模为100,复制概率为0.20,变异概率为0.01,最小距离为10.0,采用临时群体一满就退出的策略,迭代40代后临时群体满结束求解,求得的非劣解曲线如图4.9所示。

图4.9

       上图及以后各图中位移的单位均为 ,而重量单位为 。

       将群体规模增加为200,复制概率为0.20,变异概率为0.01,最小距离为10.0,临时群体一满就退出的策略,迭代60代后临时群体满结束求解,求得的非劣解曲线如图4.10所示。

        继续加大群体规模到400,复制概率为0.20,变异概率为0.01,最小距离为10.0,临时群体一满就退出的策略,迭代230代后临时群体满结束求解,求得的非劣解曲线如图4.11所示。


        从求解的效果来看上述算法是可行和有效的,而且需要迭代的代数较少,效率较高。同时由于要求的是一个解集,采用较大的群体规模是必要的。非劣解集中单目标的最优解距离实际的单目标极值还有一定的距离,该结论是预料之中的,这是由于我们依据的信息仅仅只有个体不同的级。从上一章可以知道,适当摄动对于单目标遗传规划是有益的。为此,我们将摄动加入到上述求解过程中,即在处理完新旧群体中重新分级后的个体后,对单目标最优的个体进行概率意义下的单目标摄动寻优,得到改进的个体后,将其随机替代群体中的个体。

非劣解集

       取群体规模为400,复制概率为0.20,变异概率为0.01,最小距离为10.0,采用临时群体一满就退出的策略,单目标最优个体加入摄动,循环摄动的概率设为0.8,迭代128代后临时群体满结束求解。求得的非劣解曲线如图4.12所示。

        从图4.12可以看出,采用摄动后大大地提高了求解的效果,单目标摄动表现出了一种“撑开”非劣解曲线的效果,非劣解集中重量的最小值为1691.478

69lb,最大位移的值为0.98396 ,和单目标最优解相当接近,其求解效果和单目标遗传规划相当,对此的解释是,除了前面所说的非劣解之间具有相关性,如果在求解过程能够得到各个单目标的较优解,将很有利于非劣解集的计算。我们采用摄动的方法,只要增加很少的计算量,即可以较大幅度地提高求解的性能。

        得到上图的非劣解集曲线后,决策者可以说对模型的情况“了如指掌”。举例来说,十杆问题还有一种优化模型是在位移的约束下,即所有自由节点位移限制为 ,由于对该结构拓扑形式,可以容易得到自由节点的垂直位移相对于水平位移为主动约束。有了以上的非劣解集,我们直接寻找2 对应的重量即可以得到近似最优解,由上例我们可以得到两个位移最接近2 的设计,其目标值分别如下所示:

        重量5166.93275 对应位移1.99932 ;

        重量5138.79227 对应位移2.01026 ;

        进行线性插值得到位移为2 时,重量大约为5140.5 ,从上一章知道最优解约为5065.2 ,两者相当接近,这从另一方面说明了图4.12的非劣解曲线已经很接近问题的全局非劣解集。有了图4.12所示的非劣解集曲线,我们不再需要求解无数的单目标优化来验证决策者的想法,决策者可以根据实际情况和自己的偏好迅速得出“偏好解”,或是得到一个较小的偏好区间,得出各个目标之间决策者比较认同的权重信息,将多目标问题转化为单目标问题求解。这里需要解释一下,由于遗传算法求出的结果具有一定的近似性,故在得到了决策者根据非劣解集曲线给出的权重信息后,可以考虑采用精度更高的单目标优化算法求解。

       前面提到,还有一种处理临时群体满的办法是继续进行迭代,直到满足给定的代数后才退出,下面采用该方法进行一次求解。

       取群体规模为400,复制概率为0.20,变异概率为0.01,最小距离为10.0,直到700代结束,单目标最优个体加入摄动,求得的非劣解曲线如图4.13所示。

图4.13

        从上图可以开出,如果不退出,继续迭代的话,求出的解集继续向全局非劣解集逼近。其中非劣解集中位移最小的设计点的目标函数值为:

        重量:15349.4496 ;

        最大位移:0.97749 ;

        该值与单目标位移最小设计(重量15349.4496 ;位移0.97749 )相同。同样,当位移约束为2 时,从非劣解集中可以得到:

        重量:5156.07453 ;最大位移:1.97631 ;

        重量:5086.85734 ;最大位移:2.01602 ;

插值得到位移为2 时的最轻重量为5114.8 ,已知其最优解约为5065.2 ,而前面一个算例的估计的结果为5140.5 ,可以看出,临时群体满继续迭代确实使得非劣解集继续向全局非劣解集逼近。

       前面提到过另外一种处理临时群体满而还有候选个体的方法是加大检查的间距,不过实际计算发现,过大的间距会对求解产生一些不良的影响。原因是由于间距是定义在目标函数空间中,无法反映设计点在设计点空间中的分布。前面提到过非线性多目标优化的非劣解一般出现在可行域一端连续的边界上,这样如果过大地加大目标函数空间中的距离,将导致多目标遗传规划搜索该段边界能力的退化。

        通过以上的算例可以得出结论,采用改进多目标遗传分级算法是成功的,求解的结果相当令人满意的。同时也再一次证明了在遗传算法中引入循环摄动的意义。可以认为采用多目标遗传算法是求解多目标优化的一个非常好的算法。

        另外这里还需要提一下离散变量多目标遗传规划的问题,由于变量的离散性,使得目标之间权重的微小变化可能导致优化结果的较大的变化,故若采用单目标遗传规划的求解思路将存在相当的难度。采用多目标遗传规划的非劣解集算法,求解离散变量多目标优化问题,则具有非常突出的优点。实际上只要采用遗传算法求解优化问题就是在求解离散优化问题,前面的算例同时也在一定程度上验证了算法求解多目标离散优化非劣解的能力。

      在前面的讨论中,可以看出分级程序在多目标遗传规划中被反复地调用,因而必须尽可能地提高分级算法的效率。以下为提出的一种高效的分级算法,算法的关键之处在于尽量减少重复比较的次数,一旦在某轮比较中未产生劣个体,整个的分级过程即结束,下面给出具体流程:

      设当前个体数为nSize,数组ParetoRank存放个体的级数,nCurrentRank为当前进行检查的级,bNeedMoreCheck表示是否需要继续进行分级,nCheckResult为非劣检查程序的返回值。

流程如下:

nCurrentRank = 1;

//假定所有的个体均为级1

for(j = 0; j < nSize; j++)

ParetoRank[j] = nCurrentRank;

//标定所有个体的初始级为级1

//开始分级

do

{

  //假定不再需要进一步的标定

  bNeedMoreCheck = false;

  for(k = 0; k < (nSize-1); k++)

{

   //对个体k进行标定

   if(ParetoRank[k] == nCurrentRank)

  {

     //如果个体k的级数为当前级

     for(j = k + 1; j < nSize; j++)

    {

      if(pnParetoRank[j] == nCurrentRank)

     {

      //只对同级的个体进行非劣的判断

      nCheckResult=pIndividualsObjectives[k].ParetoCheck(pIndividualsObjectives[j]);

      if(nCheckResult == 1)

     {

       //如果个体j劣于个体k,将个体j的级数加1

       pnParetoRank[j] = nCurrentRank + 1;

       //个体的级发生变化,所以需要进一步的标定

       bNeedMoreCheck = true;

     }

     else if(nCheckResult == -1)

{

//如果个体k劣于个体j,将个体k的级数加1

     pnParetoRank[k] = nCurrentRank + 1;

     //个体的级发生变化,所以需要进一步的标定

     bNeedMoreCheck = true;

     //个体k标定完毕,退出循环,标定下一个个体

     break;

    }

   }

  }

}

}

//当前级加1

nCurrentRank++;

}while(bNeedMoreCheck);

        采用该流程进行分级效率较高,对于提高整体算法的计算性能有很大的帮助。

§4.4 结论
本章分别提出了基于模糊逻辑的多目标遗传算法和稳态的分级遗传算法。模糊逻辑是表达决策者对于多个目标之间偏好的一种有效的工具,在本算法中将其与个体的适应度结合起来,计算结果表明该算法是有效和方便的。分级遗传算法是求解多目标优化非劣解集的一种有效的工具,算法的关键是保持“稳态”,本章讨论了几种实现“稳态”的的方式,并提出了一种最有效的方式,给出了进行快速分级的算法,讨论了单目标寻优在多目标非劣解集逼近中的重要性,另外还提出了确保非劣解集的均匀性的方法,计算结果非常令人满意,算法具有实际工程应用。  
原创粉丝点击