【生产调度优化】使用simulink实现生产调度优化
1.软件版本
MATLAB2013b
2.本算法理论知识
在一个企业里,三种不一样的产品, 分别定义为A, B, C,每个产品生产周期已知(表一), 需要在三个不一样容量的机器里生产,容量分别为20 30 50。每个产品在不一样机器里生产,所产生的初始时间不一样, 而且更换不一样的机器也产生5个小时的延迟。
根据每天的订单的数量(表二, 10天订单已知,订单会持续到达形成排列等待生产) 根据交货时间和其他要求,你怎样做出决定每一个产品生产在每一个机器里.达到时间最小化?
条件:
每一个机器同时只能生产一种产品(但可以批量生产,例如同时生产几天,订单总数接近或者等于容量总数为有效)直到生产完成后才可以生产不一样的产品,但是需要产生5小时的延迟,或者继续生产上一次的产品,没有延迟。同时,每次生产完毕后,必须清洗机器,每台机器的清洗时间分别为2,3,5 小时。
容量:
机器一:20,机器二:30,机器三:50,
每次生产完毕清洁时间 (小时)
机器一:2,机器二:3,机器三:5,
大概流程如下图:
三个产品10天内订单已知,每个产品生产周期已知,订单数量和交货期已知,因此怎样做出决策让订单在三个平行机器里生产达到最优化。怎样用数学建立公式, 必须满足已知条件, 然后需用simulink实现.
这里,搭建一个数学模型,即如何安排不同的机器生产不同的产品,使得总的完成时间最短,并且满足交付时间的约束条件。
我们将这个课题的问题总结一下如下:
机器类型 |
A(交货期7) |
B(交货期10) |
C(交货期20) |
机器1(C:20) |
初始1,周期72 |
初始2,周期96 |
初始3,周期120 |
机器2(C:30) |
初始2,周期72 |
初始3,周期96 |
初始4,周期120 |
机器3(C:50) |
初始3,周期72 |
初始4,周期96 |
初始5,周期120 |
此外,当某种产品更换奇迹生产,则会产生5小时的延迟。另外,每次生产完毕后必须清晰机器。
具体的三种产品ABC的每天的订货量由随机模块产生得到。
其中公式第一部分是某种产品对应某种机器进行生产,所需要的时间。
第二部分是完成一个批次生产之后,需要清洗,然后重新开始生产需要的初始化。
第三部分是完成一个批次生产之后,有不同的产品需要生产,那么则需要清洗,延迟,初始化三个部分的延迟。
下面,我们需要根据决策算法得到最优的生产方式,使得最后的时间成本最低,且满足每件产品的交付期限。
这里首先分析一下什么情况下,需要使用别的机器,要求中提到:直到生产完成后才可以生产不一样的产品。
情况一:
一种产品未生产完,另外两种生产好了,且未完成的产品剩余的量较大,此时需要开动别的机器帮助生产。
情况二:
二中产品未生产完,另外一种生产好了,那么分析两种产品的剩余量,对比那种产品进行协助生产速度更快,最后生产完后剩下一种产品的时候,再根据情况一分析;
情况三:
这里,即当一种产品生产好了,然后后面还有订单量,但是订单量没有达到生产需求,此时生产该产品的机器是停滞的,然后由于该产品没有达到生产量的需求,所以用该机器去生产其他产品,等该产品满足生产需求后,再重新开动生产这个产品。
这里举个例子,比如A产品,订单每次只有1个,显然按生产量标准来看,达不到开动要求,然后假设此时A去生产B或者C,先考虑B,B的周期是96小时,4天。然后重新生成新的设备,需要延迟5小时,初始化2小时,清晰2小时,共9小时,然后再回过来生产,同时产生延迟5小时,初始化1小时,清洗2小时,共8小时,于是,共产生了96+17小时,那么也就是说如果在A产品订单量较少的时候,可以采取这个方案进行生产。
3.部分核心代码
clc;
clear;
close all;
warning off;
pack;
addpath 'func\'
addpath 'func\toolbox\' %一下是系统的一些参数
%一下是系统的一些参数
%订单个数
Num = 100; %机器个数
Num_machine = 3;global ProduceA;
global ProduceB;
global ProduceC;
global Time_OverA;
global Time_OverB;
global Time_OverC;
global isover;%这个变量用来说明是否超期
global Time_iniA;
global Time_iniB;
global Time_iniC;
global A_delays_diff;
global B_delays_diff;
global C_delays_diff;
global A_delays_same;
global B_delays_same;
global C_delays_same;%生产周期
ProduceA = 72;
ProduceB = 96;
ProduceC = 120;
%三种商品的交货期限
Time_OverA = 7;
Time_OverB = 10;
Time_OverC = 20;%定义初始化时间
Time_iniA = [1,2,3];
Time_iniB = [2,3,4];
Time_iniC = [3,4,5];%更换机器产生的延迟
Time_delay = 5;%清洗时间
Time_wash = [2,3,5];%机器容量
Cap = [20,30,50];%设置三种产品的随机值得随机数种子
Seek_A = 1;
Seek_B = 2;
Seek_C = 3;%%%%%%%%%%%%%%此处在Simulink等效替换%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% RandStream.setDefaultStream(RandStream('mt19937ar','seed',Seek_A));
A_source = randint(1,Num,[1,10]);% RandStream.setDefaultStream(RandStream('mt19937ar','seed',Seek_B));
B_source = randint(1,Num,[5,30]);% RandStream.setDefaultStream(RandStream('mt19937ar','seed',Seek_C));
C_source = randint(1,Num,[30,60]);TASKer = [A_source',B_source',C_source']; %生产完一批,下一批换产品导致的延迟
A_1 = Time_iniA(1) + Time_wash(1) + Time_delay;
A_2 = Time_iniA(2) + Time_wash(2) + Time_delay;
A_3 = Time_iniA(3) + Time_wash(3) + Time_delay;
A_delays_diff = [A_1,A_2,A_3];B_1 = Time_iniB(1) + Time_wash(1) + Time_delay;
B_2 = Time_iniB(2) + Time_wash(2) + Time_delay;
B_3 = Time_iniB(3) + Time_wash(3) + Time_delay;
B_delays_diff = [B_1,B_2,B_3];C_1 = Time_iniC(1) + Time_wash(1) + Time_delay;
C_2 = Time_iniC(2) + Time_wash(2) + Time_delay;
C_3 = Time_iniC(3) + Time_wash(3) + Time_delay;
C_delays_diff = [C_1,C_2,C_3];
%生产完一批,下一批还是生产同样的产品
A_1 = Time_iniA(1) + Time_wash(1);
A_2 = Time_iniA(2) + Time_wash(2);
A_3 = Time_iniA(3) + Time_wash(3);
A_delays_same = [A_1,A_2,A_3];B_1 = Time_iniB(1) + Time_wash(1);
B_2 = Time_iniB(2) + Time_wash(2);
B_3 = Time_iniB(3) + Time_wash(3);
B_delays_same = [B_1,B_2,B_3];C_1 = Time_iniC(1) + Time_wash(1);
C_2 = Time_iniC(2) + Time_wash(2);
C_3 = Time_iniC(3) + Time_wash(3);
C_delays_same = [C_1,C_2,C_3];for i = 1:NumMachine_sel{i,1} = [1,1,1];Machine_sel{i,2} = [2,2,2];Machine_sel{i,3} = [3,3,3];
end%根据每个机器的容量,来等效出每个单个订单的生产时间,但在后面计算过程中,当期满足判决条件的时候,时间则为72,96或者120
for i = 1:NumMachine_time{i,1} = [A_source(i)/Cap(1)*ProduceA,B_source(i)/Cap(1)*ProduceB,C_source(i)/Cap(1)*ProduceC];Machine_time{i,2} = [A_source(i)/Cap(2)*ProduceA,B_source(i)/Cap(2)*ProduceB,C_source(i)/Cap(2)*ProduceC];Machine_time{i,3} = [A_source(i)/Cap(3)*ProduceA,B_source(i)/Cap(3)*ProduceB,C_source(i)/Cap(3)*ProduceC];
end%一下是遗传算法的一些参数
%个体
Num_gene = 40;
%遗传次数
Iteration = 120;
%代沟
DG = 0.9;
%交叉率
cross_rate= 0.8;
%变异率
by_rate = 0.6;
%计数器
Cnter = 0; [Nums_time,Num_ABC] = size(Machine_sel);
Best_save = zeros(2, Iteration);
All_Number = Nums_time*Num_ABC;
Number = zeros(1,Nums_time);
for i=1:Nums_timeNumber(i)=Num_ABC;
endRandom_save_machine = zeros(Num_gene,2*All_Number);
for j=1:Num_geneNumber2=Number;for i=1:All_Number%产品编号ABC - > 123val = unidrnd(Nums_time);while Number2(val)==0val = unidrnd(Nums_time);end%产品编号Random_save_machine(j,i) = val;Number2(val) = Number2(val)-1;%机器编号Temp = Machine_sel{val,Num_ABC-Number2(val)};SizeTemp = length(Temp);%随机产品机器Random_save_machine(j,i+All_Number) = unidrnd(SizeTemp);end
end
%定义fitness
[Value_Product,ObjV,Product,Genes] = func_fitness(Random_save_machine,Num_machine,Machine_time,Machine_sel); %开始优化迭代
while Cnter <= IterationCnterisover = 0;%适应度值Value_fit = ranking(ObjV); %选择GA_Oper = select('rws', Random_save_machine, Value_fit, DG); %交叉GA_Oper = func_Gene_cross(GA_Oper,cross_rate,Machine_sel,Machine_time); %变异GA_Oper = func_aberrance(GA_Oper,by_rate,Machine_sel,Machine_time); %适应度值[Value_Product,Obj_Product,Product,Genes] = func_fitness(GA_Oper,Num_machine,Machine_time,Machine_sel); %新种群[Random_save_machine,ObjV] = reins(Random_save_machine, GA_Oper,1, 1, ObjV, Obj_Product); Cnter = Cnter + 1; %保存最值Best_save(1,Cnter) = min(ObjV); Best_save(2,Cnter) = mean(ObjV); %记录最佳值if Cnter == 1Values1 = Value_Product;Values2 = Product;MinVal = min(ObjV); STemp = Genes;endif MinVal > Best_save(1,Cnter)Values1 = Value_Product;Values2 = Product;MinVal = Best_save(1,Cnter);STemp = Genes;end%延期判决if isover == 1Cnter = Cnter-1;%重新开始本次迭代elseCnter =Cnter; end
end%当前最佳值
Value_Product = Values1;
Product = Values2;
Genes = STemp;%描绘解的变化
figure;
plot(Best_save(1,:),'Linewidth',3);
hold on;
plot(Best_save(2,:),'r-');grid;
legend('解的变化','种群均值的变化');
4.操作步骤与仿真结论A06-13
A06-13
【生产调度优化】使用simulink实现生产调度优化相关推荐
- 基于鲸鱼优化算法的Simulink仿真模型参数优化
目录 1.鲸鱼优化算法(WOA) 1.1算法原理 1.1.1 包围猎物 1.1.2 狩猎行为 1.1.3 搜索猎物 1.4 算法流程 2.如何用matlab .m文件脚本调用simulink模型并传入 ...
- struts启动时加载_iOS优化篇之App启动时间优化
原文:橘子不酸丶http://www.zyiner.com/article/5 前言 最近由于体验感觉我们的app启动时间过长,因此做了APP的启动优化.本次优化主要从三个方面来做了启动时间的优化,m ...
- linux启动时间极限优化,Linux启动时间的极限优化
在上次完成嵌入式应用的Linux裁减后,Linux的启动时间仍需要7s左右,虽然勉强可以接受,但仍然没有达到我个人所追求的目标--2s以内.况且,在实际的商用环境中,设备可靠性的要求可是"5 ...
- psql where里有自定义函数慢_阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结...
MySQL优化概述 MySQL数据库常见的两个瓶颈是:CPU和I/O的瓶颈. CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候. 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应 ...
- 双目标帕累托优化_结构力学中的优化分析(3) —— 结构优化分析
引言 上文中,我们主要介绍了优化分析的基本类型. 蒙特遇见卡罗:结构力学中的优化分析(1) -- 优化方法基本概念zhuanlan.zhihu.com 蒙特遇见卡罗:结构力学中的优化分析(2) -- ...
- mysql数据库优化课程---15、mysql优化步骤(mysql中最常用最立竿见影的优化是什么)...
mysql数据库优化课程---15.mysql优化步骤(mysql中最常用最立竿见影的优化是什么) 一.总结 一句话总结:索引优化最立竿见影 索引优化:不然有多少行要扫描多少次,1亿行大概是5到10分 ...
- 【深度学习】新的深度学习优化器探索(协同优化)
[深度学习]新的深度学习优化器探索(协同优化) 文章目录 1 RAdam VS Adam 2 自适应优化 3 LookAhead3.1 "侵入式"优化器3.2 LookAhead ...
- 网络推广软文浅谈网站优化过程中图片的优化技巧和注意事项!
在网站优化的过程中,网络推广软文介绍到不仅要做好关键词的优化,也更要做好图片优化,在网站不断地利用图文模式时,做好图片优化对网站的排名提升也有很大的帮助.那么对于图片优化都有哪些技巧呢?下面网络推广软 ...
- 宁波网络推广介绍几点容易被优化人员忽略的图片优化技巧!
所谓"细节决定成败",在网站SEO优化里也体现的淋漓尽致,宁波网络推广指出,越是注重细节优化的网站,就会越备受欢迎,更会吸引更多的用户和流量.所以,优化人员需要掌握的SEO优化的技 ...
- 多目标优化蚁群算法的matlab_深入浅出多目标优化10分钟多目标优化入门
多目标优化快速入门 多目标优化--引子 正如生活中,你想买一辆车,又想汽车的性能好,外观不错,价格还比较低,对于这同时满足这三个条件,我们应该如何进行考虑呢? 在投资的时候,我们想投入的资金最少,所付 ...
最新文章
- html自动刷新倒计时,基于JavaScript实现自动更新倒计时效果
- Delphi 两个应用程序(进程)之间的通信
- Java程序员需要掌握的计算机底层知识(一):CPU基本组成、指令乱序执行、合并写技术、非同一访问内存 NUMA
- Java高级篇——深入浅出Java类加载机制
- php strchr 截断,PHP strchr() 函数
- 996 都升不了职的程序员该如何拯救?
- BeautifulSoap库入门
- 多因素deseq2 formula 怎么理解 如何设置design 哈佛大学——差异表达分析(七)设计公式(Design formulas)多因素差异分析 多个影响因子会影响差异分析结果 多因子
- 机器学习应用——导学part
- uniapp中scroll-view的下拉刷新
- 推荐 4 款超好用的内网穿透工具,总有一款适合你
- android recyclerview监听滑动状态
- 【数据分析】电商平台入驻商用户画像分析
- linux mysql 备份 恢复_[转]linux下如何备份与恢复mysql数据库。
- 使用matlab深度学习工具箱实现CNN卷积神经网络训练仿真
- Matlab实现乘幂法
- iframe加载白屏问题
- python利用opencv简单识别红绿灯
- ABAP function exporting importing
- “弹”走网络安全威胁
热门文章
- PPT怎么做出好看的九宫格图片?每天一个办公小技巧!
- JPA(Java Persistence API )
- JS逆向之webpack打包网站实战
- 国庆居家观影指南请收好,美家市场陪你在家用投影仪看高分电影
- 6.循环条件判断及字符串格式化处理
- linux常驻进程与非常驻进程,Daemontools和Supervisor管理linux常驻进程
- The Cisco Systems,Inc. Service has not been started. Please start this service and try again.
- MC51F003A4——ADC
- NVM的卸载与node重装之间的碰撞
- PIC单片机与触摸屏串行通信MODBUS协议