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实现生产调度优化相关推荐

  1. 基于鲸鱼优化算法的Simulink仿真模型参数优化

    目录 1.鲸鱼优化算法(WOA) 1.1算法原理 1.1.1 包围猎物 1.1.2 狩猎行为 1.1.3 搜索猎物 1.4 算法流程 2.如何用matlab .m文件脚本调用simulink模型并传入 ...

  2. struts启动时加载_iOS优化篇之App启动时间优化

    原文:橘子不酸丶http://www.zyiner.com/article/5 前言 最近由于体验感觉我们的app启动时间过长,因此做了APP的启动优化.本次优化主要从三个方面来做了启动时间的优化,m ...

  3. linux启动时间极限优化,Linux启动时间的极限优化

    在上次完成嵌入式应用的Linux裁减后,Linux的启动时间仍需要7s左右,虽然勉强可以接受,但仍然没有达到我个人所追求的目标--2s以内.况且,在实际的商用环境中,设备可靠性的要求可是"5 ...

  4. psql where里有自定义函数慢_阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结...

    MySQL优化概述 MySQL数据库常见的两个瓶颈是:CPU和I/O的瓶颈. CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候. 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应 ...

  5. 双目标帕累托优化_结构力学中的优化分析(3) —— 结构优化分析

    引言 上文中,我们主要介绍了优化分析的基本类型. 蒙特遇见卡罗:结构力学中的优化分析(1) -- 优化方法基本概念​zhuanlan.zhihu.com 蒙特遇见卡罗:结构力学中的优化分析(2) -- ...

  6. mysql数据库优化课程---15、mysql优化步骤(mysql中最常用最立竿见影的优化是什么)...

    mysql数据库优化课程---15.mysql优化步骤(mysql中最常用最立竿见影的优化是什么) 一.总结 一句话总结:索引优化最立竿见影 索引优化:不然有多少行要扫描多少次,1亿行大概是5到10分 ...

  7. 【深度学习】新的深度学习优化器探索(协同优化)

    [深度学习]新的深度学习优化器探索(协同优化) 文章目录 1 RAdam VS Adam 2 自适应优化 3 LookAhead3.1 "侵入式"优化器3.2 LookAhead ...

  8. 网络推广软文浅谈网站优化过程中图片的优化技巧和注意事项!

    在网站优化的过程中,网络推广软文介绍到不仅要做好关键词的优化,也更要做好图片优化,在网站不断地利用图文模式时,做好图片优化对网站的排名提升也有很大的帮助.那么对于图片优化都有哪些技巧呢?下面网络推广软 ...

  9. 宁波网络推广介绍几点容易被优化人员忽略的图片优化技巧!

    所谓"细节决定成败",在网站SEO优化里也体现的淋漓尽致,宁波网络推广指出,越是注重细节优化的网站,就会越备受欢迎,更会吸引更多的用户和流量.所以,优化人员需要掌握的SEO优化的技 ...

  10. 多目标优化蚁群算法的matlab_深入浅出多目标优化10分钟多目标优化入门

    多目标优化快速入门 多目标优化--引子 正如生活中,你想买一辆车,又想汽车的性能好,外观不错,价格还比较低,对于这同时满足这三个条件,我们应该如何进行考虑呢? 在投资的时候,我们想投入的资金最少,所付 ...

最新文章

  1. html自动刷新倒计时,基于JavaScript实现自动更新倒计时效果
  2. Delphi 两个应用程序(进程)之间的通信
  3. Java程序员需要掌握的计算机底层知识(一):CPU基本组成、指令乱序执行、合并写技术、非同一访问内存 NUMA
  4. Java高级篇——深入浅出Java类加载机制
  5. php strchr 截断,PHP strchr() 函数
  6. 996 都升不了职的程序员该如何拯救?
  7. BeautifulSoap库入门
  8. 多因素deseq2 formula 怎么理解 如何设置design 哈佛大学——差异表达分析(七)设计公式(Design formulas)多因素差异分析 多个影响因子会影响差异分析结果 多因子
  9. 机器学习应用——导学part
  10. uniapp中scroll-view的下拉刷新
  11. 推荐 4 款超好用的内网穿透工具,总有一款适合你
  12. android recyclerview监听滑动状态
  13. 【数据分析】电商平台入驻商用户画像分析
  14. linux mysql 备份 恢复_[转]linux下如何备份与恢复mysql数据库。
  15. 使用matlab深度学习工具箱实现CNN卷积神经网络训练仿真
  16. Matlab实现乘幂法
  17. iframe加载白屏问题
  18. python利用opencv简单识别红绿灯
  19. ABAP function exporting importing
  20. “弹”走网络安全威胁

热门文章

  1. PPT怎么做出好看的九宫格图片?每天一个办公小技巧!
  2. JPA(Java Persistence API )
  3. JS逆向之webpack打包网站实战
  4. 国庆居家观影指南请收好,美家市场陪你在家用投影仪看高分电影
  5. 6.循环条件判断及字符串格式化处理
  6. linux常驻进程与非常驻进程,Daemontools和Supervisor管理linux常驻进程
  7. The Cisco Systems,Inc. Service has not been started. Please start this service and try again.
  8. MC51F003A4——ADC
  9. NVM的卸载与node重装之间的碰撞
  10. PIC单片机与触摸屏串行通信MODBUS协议