一种基于改进离散头脑风暴优化算法的船舶引航排班方法与流程

文档序号:20619548发布日期:2020-05-06 20:38阅读:337来源:国知局
一种基于改进离散头脑风暴优化算法的船舶引航排班方法与流程

本发明属于船舶引航技术领域,具体涉及一种基于改进离散头脑风暴优化算法的船舶引航排班方法。



背景技术:

随着我国经济的飞速发展,人们的生活水平得到很大的提高。而这些伟大成就很大一部分归功于中国港口的飞速发展,因世界经济日益全球化和一体化,港口作为各国间货物运输的主要通道显得更加重要。借助港口城市的先天优势,航运物流成为沿海港口城市经济发展的引擎,引航质量在一定程度上代表着港口的对外开放程度和市场竞争能力,同时引航排班能力也决定着引航服务效果和港口形象。只有提高调度能力,才能从根本上增强整体的引航质量。我国是一个港口大国,然而,在港口迅猛发展的同时,我国港口在引航排班效率上相对落后,这严重制约了港口的核心竞争力,也造成了较大的资源浪费,迫切需要建立一个高效可行的引航排班方法与系统实现引航资源的优化配置,提高港口竞争力。研究引航排班的建模优化和有效的解决方法,成为亟待解决的关键理论问题。

引航排班问题属于np难的组合优化问题,非常适合采用智能优化算法进行求解。目前应用于组合优化的算法主要有局部搜索法,模拟退火算法,遗传算法,神经网络等。

现有引航排班方法存在以下问题:

现有算法在搜索过程中易产生不可行解,需添加必要的排除非可行解策略,加大算法的设计难度;

现有方法只考虑了在引航规则范围内找到可行排班结果,未综合考虑到引航任务之间等待时间,引航任务组时间均衡,引航任务组始末地点转移带来的成本问题。

头脑风暴优化算法,作为一种新型群体智能优化算法,主要采用聚类思想搜索局部最优,通过局部最优的比较产生全局最优的思想,非常适合用于求解引航排班任务调度问题。但头脑风暴优化算法存在启发性不足,容易陷入局部最优,收敛速度慢的缺点。



技术实现要素:

本发明的目的在于提供一种基于改进离散头脑风暴优化算法的船舶引航排班方法,在分析引航排班各种规则和习惯的基础上,提出了引航排班问题的数学模型,并把该模型转化为伪旅行商问题模型,较好地解决了采用智能优化算法直接求解模型存在大量不可行解的问题。

为达到上述目的,本发明采用的技术方案如下:

一种基于改进离散头脑风暴优化算法的船舶引航排班方法,包括:

确定船舶引航排班问题的约束条件;

根据船舶引航排班问题的约束条件建立船舶引航排班模型;

将船舶引航排班模型转化为伪旅行商问题模型;

基于改进离散头脑风暴优化算法对所述伪旅行商问题模型进行求解,找出最优船舶引航排班计划;

根据确定的最优船舶引航排班计划进行船舶引航排班。

进一步的,所述确定船舶引航排班问题的约束条件,包括:

(2a)在一个引航排班任务组中,前一个引航排班任务的到达地点必须等于下一个引航排班任务的开始地点;前一个引航排班任务的到达时间必须早于等于下一个引航排班任务的开始时间;下一个引航排班任务的开始时间减去前一个引航排班任务的到达时间为等待时间,等待过程将会产生等待费用,各引航排班任务间的等待时间必须小于等于等待时间阈值;

(2b)一个引航排班任务组的最后一个引航排班任务的到达地点必须与第一个引航排班任务的开始地点相同,如果引航排班任务组的开始地点与到达地点不同,则产生过夜费用;

(2c)一个引航排班任务组的总引航时间必须小于等于工作时间阈值;

(2d)一个引航排班任务只能属于一个引航排班任务组;

(2e)一个引航排班任务组在各时间段引航的费用是不一样的。

进一步的,所述根据船舶引航排班问题的约束条件建立船舶引航排班模型,包括:

其中,m表示引航排班任务数,n表示引航排班任务组数,w1,w2,w3,w4为权系数,costij表示引航完第i个引航排班任务后接着进行第j个引航排班任务所产生的费用,xijk表示第k个引航排班任务组引航完第i个引航排班任务后是否接着进行第j个引航排班任务,twaitk为第k个引航排班任务组的等待时间,postk为第k个引航排班任务组的外站过夜费用,tworkk为第k个引航排班任务组的工作时间,tave为一个引航排班任务组的平均工作时间。

进一步的,所述权系数w1,w2,w3,w4取值为:100,1,30,200。

进一步的,

所述costij计算如下:

costijij=t1+q1t2+q2t3

其中,i,j为0代表引航服务中心,t1,t2,t3分别代表第j个引航排班任务的引航时间处于白班、晚班、早班的时间段,q1,q2分别代表晚班、早班权系数;

所述xijk取值为:xijk=1表示第k个引航排班任务组引航完第i个引航排班任务后接着进行第j个引航排班任务,否则xijk=0;

所述twaitk计算方式为:由引航排班任务组中第二个引航排班任务至最后一个引航排班任务的等待时间之和求得,各引航排班任务等待时间由后一个引航排班任务的开始时间减去前一个引航排班任务的到达时间求得;

所述postk取值方式为:postk=1表示第k个引航排班任务组的到达地点与开始地点不相同,否则postk=0。

进一步的,所述将船舶引航排班模型转化为伪旅行商问题模型,包括:

将各船舶引航排班任务看作旅行商问题的各城市,将船舶引航排班任务的费用看作城市间的距离,将引航排班对各引航任务的访问看作是对旅行商问题城市的遍历,从而把船舶引航排班问题数学模型转化为旅行商问题模型;所述旅行商问题模型其不仅与组成引航排班任务组的各引航排班任务有关,还与各引航排班任务组的附加费用有关,故为一伪旅行商问题模型。

进一步的,所述基于改进离散头脑风暴优化算法对所述伪旅行商问题模型进行求解,找出最优船舶引航排班计划,包括:

(4a)读入引航排班任务数m,各引航排班任务的开始地点与到达地点,开始时间与到达时间;

(4b)设置种群规模为nbso,每个个体有m个结点,聚类数为m;

(4c)随机初始化种群,产生nbso个个体;

(4d)根据目标函数对个体进行评估;

(4e)根据评估结果对个体进行升序排列;

(4f)将个体聚类为m类;

(4g)选择各聚类目标函数值最小的个体作为该类的聚类中心;

(4h)进行聚类中心的更新;

(4i)进行个体的更新;

(4j)如果已产生nbso个新的个体,则转步骤(4k),否则转入步骤(4i);

(4k)如果达到最大迭代次数则停止,否则转步骤(4d);

(4l)输出最优个体和最佳目标函数值。

进一步的,所述根据目标函数对个体进行评估,采用基于伪旅行商问题的译码方法,包括:

(4d1):设gtask=1,nodtask=1,gtask=1代表当前引航排班任务组序号,nodtask=1代表当前个体的结点号,置当前引航排班任务组的开始和到达时间、开始和到达地点分别为个体当前结点对应引航排班任务的开始和到达时间、开始和到达地点,置当前引航排班任务组的等待时间twait=0;

(4d2):将当前个体的结点号nodtask对应引航排班任务放入gtask任务组;nodtask加1,进入下一步,如果nodtask>m,则转入步骤(4d4);

(4d3):访问当前结点nodtask,如果满足当前访问的引航排班任务的开始地点等于之前访问的引航排班任务的到达地点,当前访问的引航排班任务的开始时间不早于前一引航排班任务的到达时间且其差值小于等于等待时间阈值twait,从当前访问的引航排班任务组的第一个引航排班任务的开始时间到当前访问的引航排班任务的到达时间间隔小于工作时间阈值twork,则把该引航排班任务放入gtask任务组,更新引航排班任务组等待时间twait,nodtask加1,转入步骤(4d4);否则,gtask加1,把当前引航排班任务放入更新的gtask引航排班任务组,nodtask加1,进入下一步;

(4d4):如果nodtask小于等于m,则转入步骤(4d3);否则,进入下一步;

(4d5):根据目标函数计算引航排班问题的总费用,即为个体目标函数值。

进一步的,所述将个体聚类为m类,包括:

由后一个个体目标函数值减去前一个个体的目标函数值,求得nbso-1个相邻个体目标函数值的差值;找出m-1个最大的相邻个体目标函数值的差值,并记录各差值对应的序号;根据求得的m-1个序号进行切分,把已排序后个体中序号小于等于该序号的个体划分为一类,大于该序号的个体划分到另一类。

进一步的,所述进行聚类中心的更新,包括:

随机产生一个0到1间的数值r1;

如果r1<概率参数p1,则,

随机选择一个聚类中心,然后随机产生一个个体代替该聚类中心;进入下一步;

否则直接进入下一步。

进一步的,所述进行个体的更新,包括:

(4i1)随机产生一个0到1间的数值r2,

如果r2小于概率参数p2,则,

随机选择一个聚类,随机产生一个0到1间的数值r3;

如果r3小于概率参数p3,则选择聚类中心加上随机扰动产生一个新个体,进入步骤(4i2);否则,随机产生一个0到1间的数值r4;

如果r4小于概率参数p4,从该聚类中随机选择一个个体,加上随机扰动产生一个新个体,进入步骤(4i2);否则,从该聚类中随机选择2个个体互相融合,加上随机扰动产生两个新个体,进入步骤(4i2);

如果r2大于等于概率参数p2,则随机选择两个类,然后,

随机产生一个0到1间的数值r5;

如果r5小于概率参数p5,则将两个类的聚类中心互相融合,加上随机扰动产生两个新个体,进入步骤(4i2);否则,随机产生一个0到1间的数值r6;

如果r6小于概率参数p6,则将第一个类的聚类中心与从第二个类中随机选择的一个个体互相融合,加上随机扰动产生两个新个体,进入步骤(4i2);否则,分别从两个类中选择一个个体互相融合,加上随机扰动产生两个新个体,进入步骤(4i2);

(4i2)计算新产生的个体的目标函数值,与当前个体相比,目标函数值小的个体作为下次迭代的新的个体。

进一步的,所述概率参数p1,p2,p3,p4,p5,p6为0.1,0.6,0.5,0.8,0.5,0.2;所述概率参数p1为聚类更新过程中的概率参数。

进一步的,所述个体的更新中,

两个个体的融合通过对两个个体进行交叉操作实现;

对个体加随机扰动通过对该个体进行变异操作实现。

本发明的有益效果是:

本发明在分析引航排班各种规则和习惯的基础上,提出了引航排班问题的数学模型,并提出了把该模型转化为伪旅行商问题模型的方法,较好地解决了采用智能优化算法直接求解模型存在大量不可行解的问题。

本发明采用改进离散头脑风暴优化算法求解该伪旅行商问题模型该算法搜索速度快,搜索精度高,稳定性强。

附图说明

图1是本发明基于改进离散头脑风暴优化算法的船舶引航排班方法的流程图;

图2是本发明中船舶引航排班模型译码流程图;

图3是本发明中船舶引航排班模型转化为伪旅行商问题模型示意图;

图4是本发明中交叉操作中随机选择两个个体示意图;

图5是图4的两个个体生成的子代示意图;

图6是图4的最终交叉结果示意图;

图7是本发明中变异操作随机选择的个体示意图;

图8是图7的个体变异操作后结果示意图。

具体实施方式

下面对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。

参见图1,本发明提供一种基于改进离散头脑风暴优化算法的船舶引航排班方法,包括以下步骤:

步骤1:建立本地数据库,进行数据预处理,具体如下:

(11)读入引航排班任务数;各引航排班任务开始地点、到达地点;各引航排班任务开始时间、到达时间;

(12)置等待时间阈值twait、工作时间阈值twork、晚班引航权系数与早班引航权系数。

步骤2:根据问题描述,确定问题约束条件,建立船舶引航排班数学模型;

其中,船舶引航排班问题必须考虑以下约束条件:

(2a)在一个引航排班任务组中,前一个任务的到达地点必须等于下一个任务的开始地点;前一个任务的到达时间必须早于等于下一个任务的开始时间;下一个任务的开始时间减去前一个任务的到达时间为等待时间,等待过程将会产生等待费用,各任务间的等待时间必须小于等于等待时间阈值;

(2b)一个引航排班任务组的最后一个任务的到达地点必须与第一个任务的开始地点相同,如果引航排班任务组的开始地点与到达地点不同,将会产生过夜费用;

(2c)一个引航排班任务组的总引航时间必须小于等于工作时间阈值,以保证引航员得到休息,防止疲劳引航;

(2d)一个引航排班任务只能属于一个引航排班任务组;

(2e)一个引航排班任务组在各时间段引航的费用是不一样的,越辛苦的班次费用越高,即早班(0:00-8:00)大于晚班(16:00-24:00),晚班大于白班(8:00-16:00)。

根据以上约束条件,建立引航排班问题数学模型如下:

目标函数由五部分组成,第一部分为引航排班任务费用;第二部分为引航排班任务组数量费用,且组数越大,费用越高;第三部分为等待时间费用,表示一个可行的引航排班任务组组合中各引航排班任务组的等待时间费用之和;第四部分为过夜费用,表示一个可行的引航排班任务组组合中各引航排班任务组的外站过夜费用之和;第五部分为引航排班任务组工作时间一致性费用,表示一个可行的引航排班任务组组合中各引航排班任务组工作时间的标准差。

公式(1)中,m代表引航排班任务数,n代表引航排班任务组数,无需预先知道。w1,w2,w3,w4为权系数,优选为100,1,30,200。

公式(1)中,costij表示引航完第i个任务后接着进行第j个任务所产生的费用,其值为第j个任务的引航时间与权系数的乘积,公式为:

costij=t1+q1t2+q2t3(2)

其中,i,j为0代表引航服务中心,t1,t2,t3分别代表第j个任务的引航时间处于白班、晚班、早班的时间段,q1,q2分别代表晚班、早班权系数,本发明中,优选为1.3与1.5。

公式(1)中,xijk表示第k个引航排班任务组引航完第i个任务后是否接着进行第j个任务,

xijk=1表示第k个引航排班任务组引航完第i个任务后接着进行第j个任务,其他情况xijk=0。

需满足以下约束条件:

其中,yik=1表示第i个引航排班任务属于第k个引航排班任务组,其他情况yik=0。

表示每一个引航排班任务只属于一个引航排班任务组。

公式(1)中,twaitk为第k个引航排班任务组的等待时间,由引航排班任务组中第二个任务至最后一个任务的等待时间之和求得,各任务等待时间由后一个任务的开始时间减去前一个任务的到达时间求得。

公式(1)中,postk为第k个引航排班任务组的外站过夜费用,其取值为:

postk=1表示第k个引航排班任务组的到达地点与开始地点不相同,其他情况postk=0。

公式(1)中,tworkk为第k个引航排班任务组的工作时间,tave为一个引航排班任务组的平均工作时间,

计算公式如下:

步骤3:将船舶引航排班问题数学模型转化为伪旅行商问题模型,结合图3,其具体实现方式为:

将各船舶引航排班任务看作旅行商问题的各城市,将船舶引航排班任务的费用看作城市间的距离,将引航排班对各引航任务的访问看作是对旅行商问题城市的遍历,从而把船舶引航排班问题数学模型转化为旅行商问题模型。由于一个可行的引航排班计划由多个可行的引航排班任务组组成,且其费用不光与组成引航排班任务组的各任务有关,还与各引航排班任务组的附加费用有关,故船舶引航排班问题数学模型转化所得旅行商问题模型为一伪旅行商问题模型。

步骤4:基于改进离散头脑风暴优化算法对所得的伪旅行商问题模型进行求解,找出最优引航排班计划;具体如下:

(4a)读入引航排班任务数m,各引航排班任务的开始地点与到达地点,开始时间与到达时间;

(4b)设置种群规模为nbso,每个个体有m个结点,聚类数为m,m优选为5;

(4c)随机初始化种群,产生nbso个个体;

(4d)根据目标函数对个体进行评估;

根据目标函数对个体进行评估,采用的是基于伪旅行商问题的译码方法,参见图2,其具体过程如下:

(4d1):设gtask=1,nodtask=1,gtask=1代表当前引航排班任务组序号,nodtask=1代表当前个体的结点号,置当前引航排班任务组的开始和到达时间、开始和到达地点分别为个体当前结点对应引航排班任务的开始和到达时间、开始和到达地点,置当前引航排班任务组的等待时间twait=0;

(4d2):将当前个体的结点号nodtask对应引航排班任务放入gtask任务组;nodtask加1,进入下一步,如果nodtask>m,则转入步骤(4d4);

(4d3):访问当前结点nodtask,如果满足当前访问的引航排班任务的开始地点等于之前访问的引航排班任务的到达地点,当前访问的引航排班任务的开始时间不早于前一引航排班任务的到达时间且其差值小于等于等待时间阈值twait,从当前访问的引航排班任务组的第一个引航排班任务的开始时间到当前访问的引航排班任务的到达时间间隔小于工作时间阈值twork,则把该引航排班任务放入gtask任务组,更新引航排班任务组等待时间twait,nodtask加1,转入步骤(4d4);否则,gtask加1,把当前引航排班任务放入更新的gtask引航排班任务组,nodtask加1,进入下一步;

(4d4):如果nodtask小于等于m,则转入步骤(4d3);否则,进入下一步;

(4d5):根据目标函数计算引航排班问题的总费用,即为个体目标函数值。

参见图3,设一个个体共有10个结点,1~10是结点编号,其中,箭头代表引航排班任务组在服务完前一结点对应引航排班任务后可接着服务下一结点的对应引航排班任务,虚线代表在服务完前一结点对应引航排班任务后不可接着服务下一结点的对应引航排班任务,需要更换引航排班任务组。根据如上译码方式,可确定本个体10个结点对应引航排班任务需要组成4个引航排班任务组,并得到各引航排班任务组的组成列表。其中第一个引航排班任务组的组成结点列表为[1],该引航排班任务组由结点号为1对应的引航排班任务单独组成;第二个引航排班任务组的组成结点列表为[2,3,4,5],依次服务结点号为2,3,4,5对应的引航排班任务;第三个引航排班任务组的组成结点列表为[6,7],依次服务结点号为6,7对应的引航排班任务;第四个引航排班任务组的组成结点列表为[8,9,10],依次服务结点号为8,9,10对应的引航排班任务。

(4e)根据评估结果对个体进行升序排列;

(4f)聚类为m类:由后一个个体目标函数值减去前一个个体的目标函数值,求得nbso-1个相邻个体目标函数值的差值;找出m-1个最大的相邻个体目标函数值的差值,并记录各差值对应的序号;根据求得的m-1个序号进行切分,把已排序后个体中序号小于等于该序号的个体划分为一类,大于该序号的个体划分到另一类;

(4g)选择各聚类目标函数值最小的个体作为该类的聚类中心;

(4h)进行聚类中心更新:

随机产生一个0到1间的数值r1;

如果r1<概率参数p1,则随机选择一个聚类中心,然后随机产生一个个体代替该聚类中心;否则,直接进入下一步;

(4i)进行个体的更新:

(4i1)随机产生一个0到1间的数值r2,

如果r2小于概率参数p2,则,

随机选择一个聚类,随机产生一个0到1间的数值r3;

如果r3小于概率参数p3,则选择聚类中心加上随机扰动产生一个新个体,进入步骤(4i2);否则,随机产生一个0到1间的数值r4;

如果r4小于概率参数p4,从该聚类中随机选择一个个体,加上随机扰动产生一个新个体,进入步骤(4i2);否则,从该聚类中随机选择2个个体互相融合,加上随机扰动产生两个新个体,进入步骤(4i2);

如果r2大于等于概率参数p2,则随机选择两个类,然后,

随机产生一个0到1间的数值r5;

如果r5小于概率参数p5,则将两个类的聚类中心互相融合加上随机扰动产生两个新个体,进入步骤(4i2);否则,随机产生一个0到1间的数值r6;

如果r6小于概率参数p6,则将第一个类的聚类中心与从第二个类中随机选择的一个个体互相融合,加上随机扰动产生两个新个体,进入步骤(4i2);否则,分别从两个类中选择一个个体互相融合,加上随机扰动产生两个新个体,进入步骤(4i2);

(4i2)计算新产生的个体的目标函数值,与当前个体相比,目标函数值小的个体作为下次迭代的新的个体。

(4j)如果已产生nbso个新的个体,则转入步骤(4k),否则转入步骤(4i);

(4k)如果达到最大迭代次数则停止,否则转步骤(4d);

(4l)输出最优个体和最佳目标函数值。

进一步的,所述步骤(4i1)中,进行个体更新的方法在一个类中心中产生新个体时,不是采用基本头脑风暴优化算法从该聚类中随机选择一个个体,加上随机扰动产生一个新个体的方法,而是采用改进头脑风暴优化算法,根据概率,一部分个体从该聚类中随机选择一个个体,加上随机扰动产生一个新个体,另一部分个体从该聚类中随机选择两个个体,互相融合加上随机扰动产生两个新个体的方法;进行个体更新的方法在两个类中心中产生新个体时,不是采用基本头脑风暴优化算法从两个聚类中随机各选择一个个体互相融合,加上随机扰动产生两个新个体的方法,而是采用改进头脑风暴优化算法,根据概率,一部分个体从第一个聚类的聚类中心与第二个聚类中随机选择的一个个体互相融合,加上随机扰动产生两个新个体,另一部分个体从两个聚类中随机各选择一个个体,互相融合加上随机扰动产生两个新个体;

其中,p1,p2,p3,p4,p5,p6优选为0.1,0.6,0.5,0.8,0.5,0.2。

进一步的,对于步骤4基于改进离散头脑风暴优化算法对所得的伪旅行商问题模型进行求解,找出最优引航排班计划,其采用算法为离散头脑风暴优化算法,所述算法中涉及2个个体的融合,是通过对2个个体进行交叉操作实现的;算法中涉及对个体加随机扰动,是通过对该个体进行变异操作实现的。

对于交叉操作,本发明中采用顺序交叉操作,具体为:

第一步,随机选择两个个体(父代)中几个结点的起止位置(两个个体被选位置相同),如图4;

第二步,生成一个子代,并保证子代中被选中的结点的位置与父代相同,如图5;

第三步,先找出第一步选中的结点在另一个父代中的位置,再将其余结点按顺序放入上一步生成的子代中,如图6。

需要注意的是,这种算法同样会生成两个子代,另一个子代生成过程完全相同,只需要将两个父代交换位置,第一步选中的结点位置相同,本实施例中的另一个子代为:254913678。

对于变异操作,本发明中采用结点位置互换变异,具体如下:

随机选择一个个体(父代)中两个结点的位置如图7,将其对换位置;

对换位置后如图8。

步骤5:根据确定的最优引航排班计划进行引航排班。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1