遗传算法优化连续泊位调度问题概述

2024-01-30 04:12

本文主要是介绍遗传算法优化连续泊位调度问题概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、问题描述

随着航运业务量的增长,港口泊位资源的有效配置与利用成为一个重要的问题。传统的泊位调度方法是将泊位分成固定的格子,船只只能停靠在格子位置,但这样会造成泊位利用率低下的问题。针对此问题,我们提出采用遗传算法来进行连续泊位调度,即考虑船只的实际长度和宽度,允许船只停靠在任意泊位位置,而不仅限定于固定格子,从而提高泊位利用率。

二、模型描述

泊位编码

我们将泊位空间划分成一个二维网格,每个网格单元代表一个最小泊位单元。对于每个船只i,用一个二维向量表示其停靠位置,向量元素代表网格单元的编号。

适应度函数

我们定义适应度函数为泊位占用率与船只重叠程度的综合考虑。泊位占用率用停靠船只占据的网格单元数除以总网格单元数得到。船只重叠程度用停靠船只之间相交网格单元数除以重叠船只总网格单元数得到。

遗传操作

采用选择、交叉和变异三种遗传操作。选择采用轮盘赌选择,交叉采用单点交叉,变异采用位置移动变异。

三、算法流程

初始化种群,随机生成一定数量的个体作为初代种群;

计算每一个个体的适应度;

重复执行以下操作直到满足停止条件:

(1) 根据适应度进行选择,选择适应度高的个体;

(2) 按一定概率对选择出的个体进行交叉和变异,形成新一代种群;

(3) 对新一代种群计算个体的适应度;

在所有代中选择适应度最高的个体作为优化结果。

四、结果与分析

代码

采用MATLAB模拟运行算法,设置种群规模为100,最大进化代数为200代。

数据:

船舶i

预计到港时间/h

装卸量/TEU

船长(包括安全距离)/m

船舶0

0

1400

250

船舶1

2.5

800

150

船舶2

6.5

1900

360

船舶3

8

700

140

船舶4

9.2

2000

310

船舶5

13.6

600

150

船舶6

17.5

1300

250

船舶7

20

1500

280

船舶8

22.5

800

150

船舶9

25.3

1100

240

船舶10

26.2

1800

360

船舶11

30

1300

260

船舶12

32.6

900

170

船舶13

35.5

1400

280

船舶14

37.2

2100

300

船舶15

38

1200

250

船舶16

40.1

700

160

船舶17

45.3

900

150

船舶18

49.6

800

150

船舶19

53.5

1500

290

船舶20

56.9

800

150

程序结果:

最优目标函数

bestValue =

    61

最优染色体

bestChrom =

  1 至 28 列

     3     5     4     7    11     1     6     8    14     9    12    13    15    17     2    10    18    16    19    21    20    15   366   271   347   645   290   463

  29 至 42 列

   165   380   103   588   675   770    59   344   685   154   403    50   659    59

优先顺序

S =

     3     5     4     7    11     1     6     8    14     9    12    13    15    17     2    10    18    16    19    21    20

泊位

M1 =

    15   366   271   347   645   290   463   165   380   103   588   675   770    59   344   685   154   403    50   659    59

outcell =

    '船编号'    '泊位'

    [    1]    [  15]

    [    2]    [ 366]

    [    3]    [ 271]

    [    4]    [ 347]

    [    5]    [ 645]

    [    6]    [ 290]

    [    7]    [ 463]

    [    8]    [ 165]

    [    9]    [ 380]

    [   10]    [ 103]

    [   11]    [ 588]

    [   12]    [ 675]

    [   13]    [ 770]

    [   14]    [  59]

    [   15]    [ 344]

    [   16]    [ 685]

    [   17]    [ 154]

    [   18]    [ 403]

    [   19]    [  50]

    [   20]    [ 659]

    [   21]    [  59]

outcell =

    '船id'    '泊位'    '到港时间'    '开始时间'    '结束时间'

    [   3]    [ 271]    [    6.5]    [    6.5]    [     16]

    [   5]    [ 645]    [    9.2]    [    9.2]    [   19.2]

    [   4]    [ 347]    [      8]    [     16]    [   19.5]

    [   7]    [ 463]    [   17.5]    [   19.5]    [     26]

    [  11]    [ 588]    [   26.2]    [   26.2]    [   35.2]

    [   1]    [  15]    [      0]    [      0]    [      7]

    [   6]    [ 290]    [   13.6]    [   19.5]    [   22.5]

    [   8]    [ 165]    [     20]    [   22.5]    [     30]

    [  14]    [  59]    [   35.5]    [   35.5]    [   42.5]

    [   9]    [ 380]    [   22.5]    [     30]    [     34]

    [  12]    [ 675]    [     30]    [   35.2]    [   41.7]

    [  13]    [ 770]    [   32.6]    [   41.7]    [   46.2]

    [  15]    [ 344]    [   37.2]    [   37.2]    [   47.7]

    [  17]    [ 154]    [   40.1]    [   42.5]    [     46]

    [   2]    [ 366]    [    2.5]    [   47.7]    [   51.7]

    [  10]    [ 103]    [   25.3]    [     46]    [   51.5]

    [  18]    [ 403]    [   45.3]    [   51.7]    [   56.2]

    [  16]    [ 685]    [     38]    [   46.2]    [   52.2]

    [  19]    [  50]    [   49.6]    [   51.5]    [   55.5]

    [  21]    [  59]    [   56.9]    [   56.9]    [   60.9]

    [  20]    [ 659]    [   53.5]    [   53.5]    [     61]

>>

五、结论

本文提出采用遗传算法来解决连续泊位调度问题,并给出完整的模型描述和算法流程。通过模拟实验可以效果可以验证该方法的有效性。未来工作可以考虑引入更多约束条件,如船只类型、吃水线高度等,进一步优化泊位利用率。

这篇关于遗传算法优化连续泊位调度问题概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/659066

相关文章

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

pip install jupyterlab失败的原因问题及探索

《pipinstalljupyterlab失败的原因问题及探索》在学习Yolo模型时,尝试安装JupyterLab但遇到错误,错误提示缺少Rust和Cargo编译环境,因为pywinpty包需要它... 目录背景问题解决方案总结背景最近在学习Yolo模型,然后其中要下载jupyter(有点LSVmu像一个

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2