Gurobi 生产计划调度学习案例(含代码实现) (生产切换、装配计划)

作者:[email protected]

一、前言

利用数学规划建立和解决生产计划调度问题,已经是运筹学成熟应用领域之一。各种书籍、案例、最佳实践不胜枚举。

大部分数学规划方法在建立生产计划和调度模型时,假设以某个自然的时间间隔为建模时间单位,例如小时、日、天、周或者班次等。在建模时间单位内统计可用工时、初始库存和原料等,再优化每个时间单位内的加工种类和数量、工时分配、人员安排等。如果有一定次序关系,例如工序或者BOM等,次序隐含在以建模时间单位为最小单元的计划中。用到的设备和模具的产能是否满足一般是以累积工时的方式进行判断,也就是我们所说的“标量加和”,而不是“矢量加和“。这种建模思路比较适合件小量大场合。

二、案例场景

本文中的二个案例,也是生产计划和调度常见的二个场景。一个涉及到产线切换,一个涉及到多模式装配计划。为了方便理解,案例进行了简化,但保留了现实问题中的特点和重点。具体如下

(一)案例一:生产切换

场景:

(1)    二条产线 L1, L2,产能为 L1:24, L2:24

(2)    四种产品:A1, A2, B1, B2, 需求量:A1: 14, A2: 10, B1:12, B2: 12

(3)    四种产品切换的成本是

A1

A2

B1

B2

A1

0

1

4

4

A2

1

0

4

4

B1

4

4

0

1

B2

4

4

1

0

(4)初始条件:上个班次最后的加工状态是 L1:A1, L2:A2

目标:

如何分配产品到产线上,在完成需求量的同时,切换成本最小

(二)案例二:装配计划

场景:

(1)多个客户装配订单:O1,O2,O3,O4

(2)每个订单有三道工序 [1,2,3],处理时间不同。

工序1

工序2

工序3

O1

10

20

30

O2

40

30

20

O3

20

20

30

O4

40

40

30

(3)加工资源有 R1, R2,模具有M1,M2

(4)每道工序需要的加工资源和模具也不相同。这个范例假设每道工序都需要配备一台资源和一个模具才能开始加工。

(5)每道工序的资源和模具允许存在多种选择。例如对于加工资源

工序

资源

可选?

O1

1

R1

Y

O1

1

R2

Y

O1

2

R1

Y

O1

2

R2

N

(完整数据请参考后续代码)

O1 的工序1既可以选择R1,也可以选择R2,但O1的工序2只能选择R1,不能选择R2,以此类推。模具的选择也类似。

目标:

优化目标是完成全部订单的时间最短,这样可以最大化利用全部资源和模具。

三、建模思路

以上二个案例如果沿用传统的数学规划建模方式,那么可能需要

(1)对计划周期进行离散化,确定建模时间单位。例如以10分钟、20分钟、60分钟等作为时间单位,将所有时长变成建模时间单位的整倍数。

(2)在每个建模时间单位上,判断每个设备或者模具的占用率,确保不超过100%

(3)每道工序或者加工需要确保在多个建模时间单位上连续加工,一般不允许出现中间有中断。

(4)加工次序将变成如何找到适合某道工序的时间起始位置。

但离散化带来的负面影响也是非常明显,会造成:

(1)决策变量急剧增加,而且时间单位选择不当会造成优化结果不准确。在生产计划调度建模中,时间往往是最大的敌人。

(2)同时需要引入大量辅助变量,来判断生产的连续性,不重叠性,产生切换与否等情况。

(3)优化难度增加,严重影响优化效率。

对于此类问题,本文范例中引入了“虚拟时段”(slot)的概念。就是将计划周期上设置很多虚拟时段,这些虚拟时段有几个特点:

(1)每个时段内只能容纳单个任务。这个单个任务可以是一道工序,或者一次产品加工,或者一次资源分配

(2)每个时段的起讫时间是可变的,各不相同,但不重叠,也不必连续。

(3)时段的主要作用是为了给各种任务指定合理的次序。

(4)虚拟时段的数量需要涵盖可能发生的总任务数量。例如案例一中,每条产线最多加工4种产品,因此虚拟时段数量为4;

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Matlab和Gurobi是两种常用的优化调度工具,可以用来解决各种复杂的约束问题。 Matlab是一种数学建模软件,可以通过线性规划、整数规划、非线性规划、二次规划等方法,对各种实际问题进行优化求解。Matlab提供了丰富的优化函数和工具箱,可以方便地进行模型建立、参数设置、求解和结果检验。 Gurobi是一种高性能的商业优化库,可以用于求解线性规划、整数规划、混合整数规划、二次规划等优化问题。Gurobi支持多种编程语言,包括Matlab。通过Matlab接口,可以直接调用Gurobi函数来求解优化问题。 使用Matlab和Gurobi进行优化调度代码的步骤如下: 1. 安装Matlab和Gurobi,并确保两者都正常运行。 2. 在Matlab中,使用相应的优化函数建立优化模型,包括目标函数、约束条件和决策变量。 3. 使用Gurobi提供的Matlab接口函数,将优化模型转化为Gurobi可识别的格式,并调用Gurobi函数进行求解。 4. 根据求解结果,分析并优化调度方案。 在使用Matlab和Gurobi进行优化调度代码时,需要注意以下几点: 1. 理解优化问题的性质和目标,选择合适的优化方法和算法。 2. 合理设置模型的参数和约束条件,避免模型过于复杂而导致计算困难。 3. 在使用Gurobi求解时,根据具体问题设置求解时间限制和停止条件,以避免耗费过多的时间和计算资源。 4. 对求解结果进行可视化和分析,验证调度方案的优劣并进一步优化。 通过合理地利用Matlab和Gurobi的优势,可以有效地进行优化调度代码,得到满足约束条件的最优调度方案。以上是关于如何使用Matlab和Gurobi进行优化调度代码的简要介绍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值