准时生产计划问题-模拟退火算法

由于个人本身课程的学习,涉及到了模拟退火算法。在《智能优化方法》第五章有提到一个实例应用。该实例应用为典型的 准时生产计划问题。因此,在学习过程中写一下自己的心得,希望对大家有所帮助。如有错误的地方还望大家指出!
参考书籍:汪定伟老师的《智能优化方法》
论文链接:《准时化生产计划的半无限规划模型与模拟退火方法》

1 准时化生产计划

70 年代末, 准时化( JIT ) 生产技术在日本成功地提出。由于它能大幅度地减少生产和存储 费用, 因此吸引了许多学者去研究JIT 环境下提前/ 拖期生产计划问题。半无限规划模型准确地描述了提前/ 拖期生产计划问题, 只是模型中有无限多非凸约束, 求解比较困难。目前求解 该模型比较有效的方法是遗传算法 , 但是用遗传算法求解半无限规划模型存在一些缺点,。

  • 占用内存大
  • 计算量大、运算时间长
  • 不能保证解的最优性等。

采用模拟退火结合启发式算法和最速下降法求解半无限规划模型, 可以

  • 跳出局部最优解,
  • 以概率 1 收敛于全局最优解。

与遗传算法的计算结果相比较, 可以看出用模拟退火方法得出的结果优于遗传算法。

2 半无限规划模型的建立

假设制造商在[ 0, T ] 计划生产时期内收到n 个订货。在JIT 环境下, 决策者希望计划生产 完成时间尽可能接近顾客要求的交货期。通过使用一个二次惩罚函数, 可以得出提前 / 拖期生产计划的半无限规划模型。
目标函数

  • xi是计划完成时间

  • di是顾客要求的交货期

  • αi 是惩罚系数
    在这里插入图片描述

  • Ri(t, xi) , t ∈[0,T]为资源需求函数,即在t时刻订货i所需要的资源

  • G(t)为t 时刻可采用的资源
    在这里插入图片描述

  • Li 是订货 i 的生产周期
    计划完成的时间要大于生产周期且小于最大的计划生产时刻

根据生产实际, 假设资源 需求函数是近似于正态分布的曲线,资源需求函数具体如下:
在这里插入图片描述

其图像为:
在这里插入图片描述

设开始可采用的资源是g0, 它随时间的增加以速率β增长。假设在[ 0, T ] 内有m 个遗留工作, 其中每一个工作需要一定的资源, 由下 面的近似等式确定( j = 1, 2, …, m) 。遗留工作的资源需求公式为:

在这里插入图片描述

  • 其中q j ,gj,hj使用与上文中的ai,bi, ci的方法求得。

则在t时刻:可使用的资源=总资源-遗留工作所消耗的资源

在这里插入图片描述

3 模拟退火算法

现代的模拟退火算法是由Kirkpatrick 在1983年提出的,在求解组合优化方面的使用非常成功。在本文中使用模拟退火方法求解半无限规划模型,分三个阶段。

  1. 先用启发式算法得到一个较好的初始解。
  2. 用模拟退火算法结合最速下降法对初始解中时间xi的顺序进行优化。
  3. 用模拟退火算法对二阶段的结果进行微调,求得最优解。

由于模拟退火算法适用于无约束函数,因此采用一种非精确方法将约束通过惩罚项结合到目标函数中。
Ri(t,xi)(i=1,2,…,n)是近似于正态分布的曲线,所以可以证明式(1)左侧最多有n个局部最大值,并且位于[xi-Li,xi](i=1,2,…,n)。

  • 注:因为资源需求函数为近似正态分布,[xi-Li,xi],为订货i最晚开始时间,到工作结束时间。因此在每个这样的区间中总有一个资源消耗最大值处。总共有n个订货,因此最多有n个最大值。后续使用该函数计算每一时刻的订货资源需要,从R1(t0,x1)到Rn(t0,xn),每一时刻至多有n个资源需求,求其总和则为该时刻总的订货资源需求。

设tj为所用资源需求总消耗与总资源的最大差值的时刻。
在这里插入图片描述
Φ( tj , X ) > 0就意味着违反约束(1),即上文中的公式(1)。将约束结合到目标函数中,则此时目标函数为:
在这里插入图片描述

  • 其中 μ是足够大的惩罚系数

3.1 用启发式方法求初始解

如果同模拟退火算法一样随机产生一个初始解,则高温退火过程比较长,运算时间较长。为了减少运算时间,用较快的启发式退火代替高温退火,得出一个相对较好的初始解。根据实际经验,为了减少总的惩罚,对于惩罚大的、资源需求少的订货,应尽量减少提前/拖期时间。即以αi/Pi(1,2,…,n)的值确定优先级,比值越大的越优先考虑。具体算法步骤如下:

  1. 确定计划水平T,即最长工作时间;
    在这里插入图片描述
  2. 计算 ui = αi/ Pi( i = 1, 2, …, n) , 并对 ui 从大到小排序得 ui , u2, …, un ;
  3. 以 ui , u2, …, un为优先级分别求各订货的生产完成时间 xj ,先让xj = dj,如果Φ( tj , X ) > 0 (tj∈[dj-Lj,dj] ),则转到步骤4;
  4. 对k= 1, 2, …, dj - Lj , 依次计算yj = dj - k 直到Φ( tj , Y) < 0,计算提前惩罚a = αj ( dj - yj) , 转 到步骤5 ; 否则 a = M( M 是大的数) ;
  5. 对k = 1, 2, …, T - dj , 依次求zj = dj + k, 直到 Φ( tj , Z) < 0,计算拖期惩罚b = αj ( zj - dj ) ; 否则 b = M ;
  6. 比较a、b, 取最小惩罚的 xj。如果 a ≤ b, 则 xj = yj ; 否则 xj = zj

:其中步骤4、5主要就是为了计算在j时刻,当资源需求达到最大时且保证惩罚最小时,xj可以提前/拖期多少时间。
步骤4详解:根据步骤2排好的顺序,依次让其对应的di减k,yi = di-k 起初k=1,则从d1到dn依次减1,用yi替换xi,并计算tj时刻的Φ,直到Φ( tj , Y) < 0,若不小于0,则k依次增加,继续上述减k操作,直到Φ( tj , Y) < 0。此时的k即为在资源需求不超过上限时,可提前k天开工。此时,再计算每一个的提前惩罚a。如果当k=di-Li时,Φ( tj , Y)依旧不小于0,则将a置为一个非常大的数,以表示不能提前,否者惩罚巨大。
步骤5详解:同步骤4类似,依次让其对应的di加k,zi=di+k,用zi替换xi,并计算tj时刻的Φ,直到Φ( tj , Z) < 0。此时的k即为在资源需求不超过上限时,可拖期k天交工。此时,再计算每一个拖期惩罚b。同样,如果当k=T-di时,Φ( tj , Z)依旧不小于0,则将b置为一个非常大的数,以表示不能拖期,否者惩罚巨大。
步骤6详解:之后对比提前和拖期的两个惩罚,选择较小的一个,并令xi等于较小者对应的yi/zi

3.2 用模拟退火方法调优 xi( i = 1, 2, …, n) 顺序

由于模拟退火方法接受使目标值变坏的解, 所以最终解有可能比计算过程中遇到的最好解坏。对模拟退火方法稍加改进, 即保存遇到的最好可行解。对模拟退火方法中涉及到的降温 规则和热平衡条件做如下规定:

  1. 降温规则: 通过对 Tk 乘以一个接近 1 的数r 来减少 Tk
  2. 热平衡条件: 在每种温度下, 转换次数应该等于邻域的大小, 本算法中, 任意 xi 与 xj 交换一次作为邻域中的一个解, 故至少应交换 Cn2 次。
3.2.1 第一阶段退火 SA1
  1. 由启发式算法得初始解 X0 = ( x1, x2 , …, xn)T , 计算 X0 点目标函数值 f(x0) , 并将 X0 作为最好解保存;
  2. 设定初始温度 T0, 终止温度 Tf , 令k = 0, Tk = T0 ;
  3. 产生随机解(任意交换xi, xj ) X1, k = k + 1, 计算 △f = f( X1) - f(X0) ;
  4. 如果 △f < 0, 令 X0 = X1 , f (X0) = f (X1) , 必要时更新最好解,转步6。
  5. 产生 ξ∈U( 0, 1) , 如果 exp( -△f / Tk ) > ξ, 则 X0 = X1, f (X0) = f (X1 ) ;
  6. 如果 k = C2n, 则令 k = 0 转步 7, 否则转步 3;
  7. 令 Tk ≤ rTk , 如果 Tk ≤ Tf , 停止; 否则转步 3。

第 3 步交换xi 与 xj 后, 即使是最佳顺序, 目标函数值也可能产生惩罚, 所以每得出一个顺 序, 如果 △f > 0, 先用最速下降法求该顺序下的近优解, 得出的结果作为X1, 继续后面的步骤。

3.2.2 第二阶段退火 SA2

首先需要将连续问题离散化。因为模拟退火方法适用于解决离散问题,即自变量取离散的点。而半无限规划是连续型问题,其自变量xi∈[0,T](i=1,2,…,n),所以,在xi的领域(xi-δ,xi+δ)(δ<=1)内取离散的点,从而将连续问题离散化。即xi的领域为:
在这里插入图片描述
由此得到第二阶段模拟退火算法步骤如下:

  1. 以 SA1 计算结果作为初始解 X0, 并作为最好解保存, 计算 f(X0) ;

  2. 设定 T0, Tf , 令 k = 0, Tk = T0;

  3. 在X0 邻域内产生随机解 Y = ( y1 , y2, …, yn ) T, 计算△f = f(Y) - f(X0) , k = k + 1;

  4. 与算法 SA1 的步 4—7 相同。

4 举个栗子

一个建筑公司收到 10 个建造楼房的订货, 主要资源约束是人力。现有人力水平是 100 千小时 / 周, 并预计以 B= 0.005 的速率增加。有两个以前计划中遗留的工作A 和B , 对 A , 人 力需求是 200 千小时, 它必须在第 40 周完成, 需要 20 周的加工时间; 对 B , 人力需求 300 千小 时, 它必须在第 70 周完成, 需要 40 周加工时间。建筑周期, 人力需求, 合同价格( 即惩罚系数) 及对每个订货顾客要求的交货期见表 1。两种方法的运算结果在表 1 的后两列。用遗传算法 ( GA) 计算的目标函数值是114779 , 用模拟退火( SA ) 方法计算的目标函数值是112797.6。 对 6 个订货的例子, 其订货和计算结果见表2, 用遗传算法求解的目标值是15154, 用模拟退火 方法求解的目标值是 14355.9。
在这里插入图片描述在这里插入图片描述
所得出的xi为计划完成时间,表中给出的并未进行优先级排序。通过模拟退火对排序进行优化。微调,以至于目标函数达到最优结果。

5 总结

用模拟退火方法结合启发式方法和最速下降法求解提前/ 拖期生产计划的半无限规划模型, 可以得出比较好的结果, 而且占用内存少, 在某些方面优于遗传算法。同时尝试了用模拟退火方法求解连续型问题, 结果证明是可行的。不足之处是当订货数太多时, 运算时间长。

希望对大家有所帮助,制作不易,还望大家给点个赞哦~~~~

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值