王玉莲 黄林显 桑国庆等
关键词:地下水管理模型;自适应罚函数;遗传算法(GA);MODFLOW
中图分类号:P641.2 文献标志码:A
doi:10.3969/j.issn.1000-1379.2022.03.014
引用格式:王玉蓮,黄林显,桑国庆,等.基于自适应罚函数遗传算法求解地下水管理模型[J].人民黄河,2022,44(3):69-73.
近几十年来,地下水管理模型被广泛应用于地下水资源优化管理工作中[1-3],对于无约束优化问题的求解产生许多成熟的方法,如基于梯度寻优的方法等。但地下水资源优化管理往往涉及复杂的环境、水文地质和经济等约束条件,并且其代价函数往往不连续可导,对于约束优化问题(特别是非线性约束优化问题),传统的梯度寻优类方法通常很难取得好的优化效果[4-7]。
国内外学者对利用遗传算法求解地下水管理模型进行了许多研究。利用遗传算法求解约束优化问题的难点在于有效合理选取罚函数,最简单的罚函数使用方法是对违反限制条件的解施加某种固定罚因子,使其适应度函数变差[8],但是如何合理有效选取罚因子成为制约该方法优化效果的难点。罚因子取值过大容易造成算法过早地收敛于局部极值点,取值过小又可能造成算法的收敛性能变差。Wu等[9]提出了一种可以人为进化罚因子和目标函数的自适应罚函数方法,Lin等[10-11]提出了一种新型自适应罚函数方法用于解决约束条件优化问题,Powell等[12]提出了一种罚函数构造方法并指出可行域解优先度高于非可行域解。以上几种方法同样需要人为确定罚因子数值,同时当种群含有较多非可行域解时,过度降低非可行域解的优先度会大大影响搜索效率[8]。Cai等[13]、Wang等[14]和Afshari等[15]提出了多目标优化技术用来求解约束条件优化问题。在各种多目标优化方法中,约束条件优化问题被转化为最小化(或最大化)目标函数和最小化约束条件违反程度的双目标优化问题。多目标优化方法的主要缺点是其需要耗费大量计算资源,同时需要人为提供一些计算参数。
基于以上分析,本文提出一种自适应罚函数遗传算法用于求解有约束条件的地下水管理优化问题,并进行实际案例验证。该算法将地下水流数值模型MODFLOW嵌入到优化算法GA中,数值模型模拟结果返回到优化算法中作为约束条件,优化过程通过GA求解;同时,该算法能够根据求解过程中可行域个体的数量来自动选择合适的罚因子值,克服了一般遗传算法中罚因子取值的困难。
1方法原理
本研究提出的自适应罚函数遗传算法模型利用MODFLOW模拟地下水流运移的物理过程;自适应罚函数算法根据遗传算法种群中可行域解所占的比例自动选取罚因子值的大小,并计算适应度函数;GA优化算法根据适应度函数,通过选择、交叉和变异3个过程,按照优胜劣汰、适者生存的自然法则,最终搜索到全局最优的个体。3个模块通过计算机程序实现相互之间的链接,并通过变量实现数据交换。模型的主要结构及不同模块之间的链接见图1(其中BAS、LPF和WEL等为MODFLOW的子程序包,如WEL为模拟井流子程序包,见参考文献[16])。
1.1地下水控制方程
根据能量守恒、质量守恒以及Darcy定律,在不考虑水密度变化条件下,孔隙介质中地下水三维流动偏微分方程可以用下式表示[16]:
本研究中,地下水水流模拟程序MODFLOW被用来模拟地下水渗流场的时空分布状况。
1.2优化模型
在一定的等式约束和不等式约束条件下,优化模型往往表现为补给量或抽水量的最大化或抽水成本的最小化及最优井位分布。本研究的实例为抽水量最大化,但在数值模型MODFLOW中抽水量为负值,因此其目标函数可表示为
2基于自适应罚函数的遗传算法
2.1遗传算法(GA)
遗传算法(GA)是由美国Holland教授于20世纪70年代提出的建立在自然选择和遗传学机理基础上的全局随机进化和搜索算法,目前已得到了广泛应用[17]。与传统的基于梯度寻优方法相比,遗传算法寻优不需优化函数连续可导,且能收敛到全局最优解,因此能够克服一些基于梯度寻优方法的缺点。遗传算法在每次迭代过程中都生成一个群体,群体中的每个个体对应一组决策变量,按照某种标准从群体中选取较优的个体,通过选择、交叉和变异对种群进行进化,产生新一代种群;如此反复,通过种群的不断进化,使个体逐代向全局最优解空间转移,直到达到某种收敛指标为止。GA算法计算流程见图2。
2.2自适应罚函数法
罚函数法主要用来解决约束条件下的最优化问题,通过把约束条件变为罚函数使有约束的目标函数变为无约束的目标函数;违反约束条件的个体将被附加一个罚函数值,从而使其适应度值降低,减小其被选择的概率。对于式(2)~式(4)的求解可以转化为下列无约束问题:
传统罚函数法的最大弊端是无法有效地选择罚因子值,而如果罚因子值选取不恰当,适应度值就可能在可行域之外达到某一平衡值或者陷入不成熟收敛而终止搜索。比如,内罚函数法和外罚函数法若罚因子值无限增大则容易引起优化结果对于输入过度敏感的病态问题;乘子法通过引入拉格朗日乘子,可克服罚因子值无限增大的问题,但需要通过解决一系列无约束极小值问题来获得最优乘子和最优解,从而增大了计算的复杂程度。
自适应罚函数算法不需要人为选取罚因子值,而是根据优化算法求解过程中可行域个体的数量来选择合适的罚因子值:①对于可行域个体只考虑个体的标准化适应度;②当种群中可行域个体为0时,则只考虑个体的标准化偏离值,这样设计的目的是首先找到位于可行域中的解,然后再去寻找最优解;③当位于可行域中的个体数量较少甚至接近于0(即rf很小或接近于0)时,则非可行域个体的标准化偏离值越大,惩罚的程度就越大;④当位于可行域中的个体数量很大(即rf很大)时,则非可行域个体的标准化适应度值越大,惩罚的程度就越大。
由于自适应罚函数法可以在优化过程中根据实际情况实时调整罚因子值,因此能够更加迅速、有效地收斂到全局最优解。自适应罚函数GA算法的计算流程见图3。
3案例研究
案例研究采用McKinney等[18]提出的一个拟建水源地实例,见图4。该研究区为一个10000m×4500m的矩形区域,地下水流为二维潜水稳定流;含水层底板水平,高程为980m;东部和西部边界均为山体,可以概化为隔水边界;南部和北部边界均为地表水体,可以概化为给定水头边界(水位均为1000m)。假设潜水层单位面积上的补给强度B=0.001m/d,含水介质为均质各向同性,渗透系数K=50m/d。水源地拟建10口开采井,每口开采井的最大允许开采量为7000m3/d,最低允许水位为0m。对研究区进行概化,如图5所示。McKinney等[18]利用遗传算法对该地下水管理实例进行了求解,本文利用所提出的自适应罚函数遗传算法对该问题进行求解,并与McKinney等的计算结果进行比较。
设置进化代数为100代,每一个群体包含200个个体,交叉概率为0.7,变异概率为0.05,优化结果见表1。
由表1可以看出,相比McKinney等的遗传算法,自适应罚函数遗传算法能够收敛到更加精确的全局最优解,原因主要是自适应罚函数遗传算法可以根据种群中可行域解的数量自动调节罚因子值的大小,且能够同时保留可行域解和非可行域解的有用信息。对比不同的编码精度可以看出,通过提高遗传算法的编码精度可以提高优化结果的精度。
总开采量(即优化模型的目标函数)随进化代数的变化见图6。可以看出,当进化代数较少时,总开采量较小,优化模型无法收敛到全局最优解;随着进化代数的增加,总开采量不断增大,在进化85代后基本达到稳定,说明通过增加进化代数可以收敛到全局最优解,且该优化模型求解的收敛速度较快。但需要注意的是,进化代数的增加会带来较大的计算负担,因此需要耗费更长的时间去获得最优解,需要进一步研究解决计算效率问题。
4结论
(1)自适应罚函数遗传算法可以根据可行域解的数量自主选取罚因子值,克服了一般遗传算法中罚因子值选取的困难,能够同时保留可行域解和非可行域解的搜索信息,确保获得可行域上的全局最优解,与传统的一般遗传算法相比,该算法求解精度更高。
(2)通过接口程序,实现了优化算法GA和地下水水流模拟程序MODFLOW的链接,使得优化过程中数据交换由文件读取改进为内部变量传递,大大提高了优化模型的计算效率。
(3)通过案例测试,自适应罚函数遗传算法收敛速度快、稳定性好,在进化代数较少的情况下就能够收敛到全局最优解。
(4)随着进化代数的增加,能够提高求解精度,但计算负担也会加大,需要进一步研究解决计算效率问题。
【责任编辑 张华兴】