一种基于伪旅行商问题的船舶引航排班方法与装置与流程

文档序号:20705917发布日期:2020-05-12 16:25阅读:250来源:国知局
一种基于伪旅行商问题的船舶引航排班方法与装置与流程

本发明属于船舶引航排班中的引航任务排班方法,具体涉及一种船舶引航排班问题模型与基于伪旅行商问题的求解方法。



背景技术:

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

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

智能水滴算法是一种新型群体智能算法,模拟自然界水流和泥沙相互作用形成水道的原理。智能水滴算法具有正反馈机制和较强的鲁棒性。已经成功应用在一些组合优化问题上,像旅行商问题、调度问题、车辆路径规划问题等,但是智能水滴算法存在启发性不足和容易陷入局部最优的缺点。



技术实现要素:

本发明所要解决的技术问题是:

船舶引航排班过程中,现有的智能优化算法求解模型存在大量不可行解的问题。

为解决上述技术问题,本发明提供一种基于伪旅行商问题的船舶引航排班方法,包括以下步骤:

步骤(1a):建立本地数据库,进行数据预处理,具体步骤为:

1a1)读入待引航任务数量;各引航任务开始地点、到达地点;各引航任务开始时间、到达时间;

1a2)置等待时间阈值twait、工作时间阈值twork、晚班引航权系数与早班引航权系数;

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

步骤(1c):将船舶引航排班问题数学模型转化为伪旅行商问题模型;具体方法是将各船舶引航排班任务看作旅行商问题的各城市,将船舶引航排班任务的费用看作城市间的距离,将引航排班对各引航任务的访问看作是对旅行商问题城市的遍历,从而把船舶引航排班问题数学模型转化为旅行商问题模型;由于一个可行的引航排班计划由多个可行的引航任务组组成,且其费用不仅与组成引航任务组的各任务有关,且与各引航任务组的附加费用有关,故船舶引航排班问题数学模型转化所得旅行商问题模型为一伪旅行商问题模型;

步骤(1d):基于伪旅行商问题对步骤(1c)所得伪旅行商问题模型进行求解,找出最优引航排班计划;

步骤(1e):根据确定的最优引航排班计划进行引航排班。

对于所述步骤(1b),根据问题描述,确定问题约束条件,建立船舶引航排班数学模型;具体步骤为:

2a)建立数学模型包括以下限制条件:

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

(2a2)一个任务组的最后一个任务的到达地点必须与第一个任务的出发地点相同,如任务组的出发地点与到达地点不同,将会产生过夜费用;

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

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

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

(2b)根据以上条件,建立引航排班问题数学模型如下:

目标函数中加号连接五部分,第一部分为引航任务费用;第二部分为引航任务组数量费用,且组数越大,费用越高;第三部分为等待时间费用,表示一个可行的引航任务组组合中各引航任务组的时间等待费用之和;第四部分为过夜费用,表示一个可行的引航任务组组合中各引航任务组的外站过夜费用之和;第五部分为引航任务组工作时间一致性费用,表示一个可行的引航任务组组合中各引航任务组工作时间的标准差;w1,w2,w3,w4分别为权系数一、权系数二、权系数三、权系数四;

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

costij=t1+q1t2+q2t3(2)

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

表示第k个引航任务组引航完第i个任务后接着进行第j个任务服务;

表示第i个引航任务属于第k个引航任务组

表示每一个引航任务只属于一个引航任务组;

其中m代表引航任务数,n代表引航任务组数,无需预先知道。

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

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

tworkk为第k个引航排班任务组的工作时间,tave为一个任务组平均工作时间,其计算公式如下:

对于所述步骤(1d):基于伪旅行商问题对步骤(1c)所得伪旅行商问题模型进行求解,得到最优引航排班计划;具体步骤为:

3a)读入引航任务数量m,各引航任务的开始地点与到达地点,开始时间与到达时间;

3b)初始化静态参数:设置水滴数量niwd;结点数量nc;泥沙常量initsoil,速度变化量系数一av,速度变化量系数二bv,速度变化量系数三cv,泥沙变化量系数一as,泥沙变化量系数二bs,泥沙变化量系数三cs;局部泥沙量更新系数ρs;全局泥沙量更新系数ρn;最大迭代次数nmax;初始化任意两个结点间的泥沙量soil(i,j);

3c)根据结点数量随机产生全局最优路线tb,并计算最优目标函数值smin;

3d)初始化动态参数:设置每个水滴的速度veliwd,每个水滴携带的泥沙量soiliwd,每个水滴的访问列表vc(iwd)={},迭代次数置为1;

3e)设置每个水滴的起始出发点,并将该点添加到访问列表vc(iwd);

3f)采用基于最优候选结点子群的选择策略,对每个水滴计算各未访问结点的概率,并选择下一个待访问的结点;更新访问列表vc(iwd);

3g)每个水滴从结点i到结点j后,更新水滴的速度veliwd

其中,veliwd(t)表示水滴在t时刻的速度(或者理解为:位于结点i时的水滴的速度);

veliwd(t+1)表示水滴在t+1时刻的速度(或者理解为:位于结点j时的水滴的速度),soil(i,j)表示结点i到结点j路径中泥沙量;

3h)每个水滴从结点i到结点j后,计算泥沙变化量δsoil(i,j);

其中,time(i,j;veliwd)表示水滴从结点i移动到结点j所需的时间:

其中,εv是正常数,一个很小的正常数,用于避免出现分母为零的情况;||c(i)-c(j)||为结点i与结点j之间的距离;c(i)表示第i个结点的坐标,c(j)表示第j个结点的坐标,||·||表示欧式距离;

3i)每个水滴从结点i到结点j后,更新水滴的泥沙量soiliwd

soiliwd(t+1)=soiliwd(t)+δsoil(i,j)(11)

其中,soiliwd(t)表示水滴在t时刻的携带的泥沙量(或者理解为:位于结点i时的水滴携带泥沙量),soiliwd(t+1)水滴在t+1时刻的携带的泥沙量(或者理解为:位于结点j时的水滴携带泥沙量);

3j)每个水滴从结点i到结点j后,更新结点i到结点j路径中泥沙量soil(i,j);

soil(i,j)=(1-ρs)·soil(i,j)-ρs·δsoil(i,j)(12)

表示等式右边更新等式左边;

3k)对每个水滴重复步骤3f)~步骤3j)直至所有结点被访问,则本次迭代结束;根据目标函数计算所有水滴所对应的目标函数值,选择目标函数值最小的路线作为本次迭代中总成本最小的路线tib;

3l)比较全局最优目标函数值smin与步骤3k)中目标函数值的大小,如果步骤3k)中的目标函数值更小,则更新smin和全局最优路线tb;

3m)使用全局最优路径间的泥沙量信息更新路径中的泥沙量soil(i,j),

3n)判断是否达到最大迭代次数nmax,如果是,输出全局最优路径tb以及全局最优目标函数值smin;否则,迭代次数加一,返回步骤3e)。

所述步骤3b)初始化任意两个结点间的泥沙量soil(i,j)的具体方法为:采用初始泥沙量随机化机制,产生一个(0~1)间的随机数rn,并把随机数rn与泥沙常量initsoil的乘积赋给soil(i,j),作为其初始值。

所述步骤(3c)与步骤(3k),根据目标函数对个体进行评估,采用的是基于伪旅行商问题的译码方法,具体步骤如下:

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

步骤(5b):将当前个体的结点号nodtask对应引航任务放入gtask任务组;结点号nodtask加1,如果结点号nodtask>m,转步骤(5d);

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

步骤(5d):如果结点号nodtask≤m,转步骤(5c);

步骤(5e):按目标函数计算引航排班问题的总费用,即为个体目标函数值。

所述步骤3f)采用基于最优候选结点子群的选择策略,选择下一个待访问的结点的具体过程为:

6a)读取所有未访问的结点,计算出当前结点i到所有候选结点v(iwd)之间的泥沙量,根据泥沙量由低到高,按照选择比例系数γ,选取一定比例的最优候选结点子群elite(iwd)作为候选节点,其公式如下所示:

elite(iwd)=γ·v(iwd)(14)

6b)根据概率公式piiwd(j)计算出每个候选结点的概率,其公式如下所示:

其中,k为候选结点,且为水滴未访问过的结点;f(soil(i,j))为结点i到结点j的路径泥沙量的相关函数,具体表示为如下公式:

其中,εs是正常数,一个很小的正数,用于避免出现分母为零的情况;g(soil(i,j))是将结点i到结点j之间的路径含沙量转换成正数的函数,具体表示为如下公

其中,为当前结点i到所有候选结点间的路径泥沙量的最小值;

6c)根据各个候选节点的概率piiwd(j),使用轮盘赌策略选择下一个结点j;并用所述节点更新访问列表vc(iwd)。

本发明的有益效果是:本发明在分析引航排班各种规则和习惯的基础上,提出了引航排班问题的数学模型,并提出了把该模型转化为伪旅行商问题模型的方法,较好地解决了采用智能优化算法直接求解模型存在大量不可行解的问题。提出了采用智能水滴算法求解该伪旅行商问题模型的方法。所提模型可行,所提算法搜索速度快,搜索精度高,稳定性强。

附图说明

图1是智能水滴算法的流程图;

图2是船舶引航排班方法译码流程图;

图3是船舶引航排班方法转化为伪旅行商问题模型示意图。

具体实施方式

现在结合附图和优选实施例对本发明作进一步的说明。

本发明的基于伪旅行商问题的船舶引航排班装方法,包括以下步骤:

步骤(1a):建立本地数据库,进行数据预处理;其具体步骤为:

1a1)读入待引航任务数量;各引航任务开始地点,到达地点;各引航任务开始时间、到达时间;

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

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

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

步骤(1d):基于伪旅行商问题对步骤(1c)所得伪旅行商问题模型进行求解,找出最优引航排班计划;

步骤(1e):根据确定的最优引航排班计划进行引航排班。

对于所述步骤(1b),根据问题描述,确定问题约束条件,建立船舶引航排班数学模型;其具体步骤为:

2a)建立数学模型必须考虑以下限制条件:

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

(2a2)一个任务组的最后一个任务的到达地点必须与第一个任务的出发地点相同,如任务组的出发地点与到达地点不同,将会产生过夜费用;

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

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

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

(2b)根据以上条件,建立引航排班问题数学模型如下:

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

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

costij=t1+q1t2+q2t3(2)

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

表示第k个引航任务组引航完第i个任务后接着进行第j个任务服务;

表示第i个引航任务属于第k个引航任务组

表示每一个引航任务只属于一个引航任务组;

其中m代表引航任务数,n代表引航任务组数,无需预先知道。

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

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

tworkk为第k个引航排班任务组的工作时间,tave为一个任务组平均工作时间,其计算公式如下:

对于所述步骤(1d):基于伪旅行商问题对步骤(1c)所得伪旅行商问题模型进行求解,找出最优引航排班计划;其具体步骤为:

3a)读入引航任务数量m,各任务的开始地点与到达地点,开始时间与到达时间;

3b)初始化静态参数:设置水滴数量niwd,一般niwd取40-100;结点数量nc,一般nc取预约老人的数量m;泥沙常量initsoil=1000,速度变化量系数av=1000,bv=0.01,cv=1;泥沙变化量系数as=1000,bs=0.01,cs=1;局部泥沙量更新系数ρs=0.9;全局泥沙量更新系数ρn=0.9;最大迭代次数nmax=1000;初始化任意两个结点间的泥沙量soil(i,j);3c)根据结点数量随机产生全局最优路线tb,并计算最优目标函数值smin;

3d)初始化动态参数:设置每个水滴的速度veliwd=200,每个水滴携带的泥沙量soiliwd=0,每个水滴的访问列表vc(iwd)={},迭代次数置为一;

3e)设置每个水滴的起始出发点,并将该点添加到访问列表vc(iwd);

3f)采用基于最优候选结点子群的选择策略,对每个水滴计算各未访问结点的概率,并选择下一个待访问的结点;更新访问列表vc(iwd);

3g)每个水滴从结点i到结点j后,更新水滴的速度veliwd

其中,veliwd(t)表示水滴在t时刻的速度(或者理解为:位于结点i时的水滴的速度),veliwd(t+1)表示水滴在t+1时刻的速度(或者理解为:位于结点j时的水滴的速度),soil(i,j)表示结点i到结点j路径中泥沙量;

3h)每个水滴从结点i到结点j后,计算泥沙变化量δsoil(i,j);

其中,time(i,j;veliwd)表示水滴从结点i移动到结点j所需的时间:

其中,εv是正常数,一个很小的正常数,用于避免出现分母为零的情况;||c(i)-c(j)||为结点i与结点j之间的距离;c(i)表示第i个结点的坐标,c(j)表示第j个结点的坐标,||·||表示欧式距离;

3i)每个水滴从结点i到结点j后,更新水滴的泥沙量soiliwd

soiliwd(t+1)=soiliwd(t)+δsoil(i,j)(11)

其中,soiliwd(t)表示水滴在t时刻的携带的泥沙量(或者理解为:位于结点i时的水滴携带泥沙量),soiliwd(t+1)水滴在t+1时刻的携带的泥沙量(或者理解为:位于结点j时的水滴携带泥沙量);

3j)每个水滴从结点i到结点j后,更新结点i到结点j路径中泥沙量soil(i,j);

soil(i,j)=(1-ρs)·soil(i,j)-ρs·δsoil(i,j)(12)

3k)对每个水滴重复步骤3f)~步骤3j)直至所有结点被访问,则本次迭代结束;

根据目标函数计算所有水滴所对应的目标函数值,选择目标函数值最小的路线作为本次迭代中总成本最小的路线tib;

3l)比较全局最优目标函数值smin与步骤3k)中目标函数值的大小,如果步骤3k)中的目标函数值更小,则更新smin和全局最优路线tb;

3m)使用全局最优路径间的泥沙量信息更新路径中的泥沙量soil(i,j),

3n)判断是否达到最大迭代次数nmax,如果是,那么输出全局最优路径tb以及全局最优目标函数值smin;否则,迭代次数加一,返回步骤3e)。

所述步骤3b)初始化任意两个结点间的泥沙量soil(i,j)的具体方法为:采用初始泥沙量随机化机制,产生一个(0~1)间的随机数rn,并把rn与泥沙常量initsoil的乘积赋给soil(i,j),作为其初始值。

对于所述步骤(3c)与(3k),根据目标函数对个体进行评估,采用的是基于伪旅行商问题的译码方法,其具体步骤如下:

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

步骤(5b):将当前个体的结点号nodtask对应引航任务放入gtask任务组;nodtask加1,如果nodtask>m,转步骤(5d);

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

步骤(5d):如果nodtask≤m,转步骤(5c);

步骤(5e):按目标函数计算引航排班问题的总费用,即为个体目标函数值。

参见图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对应的引航任务。

所述步骤3f)采用基于最优候选结点子群的选择策略,选择下一个待访问的结点的具体过程为:

6a)读取所有未访问的结点,计算出当前结点i到所有候选结点v(iwd)之间的泥沙量,根据泥沙量由低到高,按照选择比例系数γ,选取一定比例的最优候选结点子群elite(iwd)作为候选节点,其公式如下所示:

elite(iwd)=γ·v(iwd)(14)

6b)根据概率公式piiwd(j)计算出每个候选结点的概率,其公式如下所示:

其中,k为候选结点,且为水滴未访问过的结点;f(soil(i,j))为结点i到结点j的路径泥沙量的相关函数,具体表示为如下公式:

其中,εs是正常数,一个很小的正数,用于避免出现分母为零的情况;g(soil(i,j))是将结点i到结点j之间的路径含沙量转换成正数的函数,具体表示为如下公式:

其中,为当前结点i到所有候选结点间的路径泥沙量的最小值;

6c)根据各个候选节点的概率piiwd(j),使用轮盘赌策略选择下一个结点j。并用该节点更新访问列表vc(iwd)。

上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并加以实施,并不能以此限制本发明的保护范围,凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围内。

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