首页 > 其他分享 >FSP流水车间调度问题

FSP流水车间调度问题

时间:2024-05-22 14:56:44浏览次数:28  
标签:machQty end jobQty Palmer 调度 FSP 车间 data nowMachId

FSP流水车间调度问题

1.流水车间调度问题Flow Shop

FSP的基本特点:

  1. 车间要进行多个批次(多个种类)产品的生产;
  2. 这些批次(种类)的产品工艺路径相同,不同的是在每台机器上的加工时间。
  3. 每种机器只有一台。

特别:置换流水车间调度问题PFSP中,作业在每台设备上的加工顺序都相同。

2.FSP典型问题-算例

算例:

https://people.brunel.ac.uk/~mastjjb/jeb/info.html

3. 启发式算法求解

3.1类型

  1. Palmer算法:sum_{j=1}^{m} {(2j-m-1)*t_ij/2} m代表机器数数量。

3.2典型启发式算法实现

  1. Palmer算法Matlab实现:
    1. 初始化测试数据;
    2. 编写排序程序,得到排序结果;
    3. 根据排序结果,生成具体的生产调度方案。
    4. 获得最短完工时间。
function Palmer4FSP()
    clc;clear
    %初始化数据
    data=initDataCar1();
    %利用Palmer算法进行排序
    seq=Palmer(data);
    %根据排序结果,生成详细调度方案
    sch=createSchedule(seq,data);
    %获得最短完工时间
    fit=fitness(sch);
end

%最大完工时间
function fit=fitness(schedule)
    fit=max(schedule(:,5));
end


%根据排序,生成具体调度方案
function schedule=createSchedule(seq,data)
    [jobQty,cols]=size(data);
    machQty=cols/2;
    schedule=zeros(jobQty*machQty,5);
    jobCanSTime=zeros(jobQty,1);
    machCanSTime=zeros(machQty,1);
    schIdx=1;
    for i=1:machQty
        for j=1:jobQty
            nowJobId=seq(j);
            nowMachId=i;
            myStartTime=max(jobCanSTime(nowJobId),machCanSTime(nowMachId));
            myEndTime=myStartTime+data(nowJobId,2*nowMachId);
            jobCanSTime(nowJobId)=myEndTime;
            machCanSTime(nowMachId)=myEndTime;
            schedule(schIdx,:)=[nowJobId,nowMachId,nowMachId,myStartTime,myEndTime];
            schIdx=schIdx+1;
        end
    end     
end



%Palmer算法
function sequence=Palmer(data)
    [jobQty,cols]=size(data);
    machQty=cols/2;
    s=zeros(jobQty,1);
    for i=1:jobQty
        for j=1:machQty
            s(i)=s(i)+(2*j-machQty-1)*data(i,2*j)/2;
        end
    end
    %排序   降序
    [~,sequence]=sortrows(s,-1);   
end

%初始化算例数据
function data=initDataCar1()
    data=[   0 375 1  12 2 142 3 245 4 412;
             0 632 1 452 2 758 3 278 4 398;
             0  12 1 876 2 124 3 534 4 765;
             0 460 1 542 2 523 3 120 4 499;
             0 528 1 101 2 789 3 124 4 999;
             0 796 1 245 2 632 3 375 4 123;
             0 532 1 230 2 543 3 896 4 452;
             0  14 1 124 2 214 3 543 4 785;
             0 257 1 527 2 753 3 210 4 463;
             0 896 1 896 2 214 3 258 4 259;
             0 532 1 302 2 501 3 765 4 988];
    for i=1:size(data,2)
        if mod(i,2)==1
            data(:,i)=data(:,i)+1;
        end
    end
end      

标签:machQty,end,jobQty,Palmer,调度,FSP,车间,data,nowMachId
From: https://www.cnblogs.com/ssl-study/p/18206250

相关文章

  • Kubernetes Pod调度:从基础到高级实战技巧
    本文深入探讨了Kubernetes中的Pod调度机制,包括基础概念、高级调度技术和实际案例分析。文章详细介绍了Pod调度策略、Taints和Tolerations、节点亲和性,以及如何在高流量情况下优化Pod调度和资源管理。关注【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10......
  • kettle从入门到精通 第六十一课 ETL之kettle 任务调度器,轻松使用xxl-job调用kettle中
    1、大家都知道kettle设计的job流程文件有个缺点:只能设置简单的定时任务,无法设置复杂的如支持cron表达式的job。 今天给大家分享一个使用xxl-job调度carte的流程文件的示例。整个调度流程图如下: 1)xxl-job-admin,页面可视化配置任务。2)xxl-job-executor,job执行器,通过调用carte......
  • Springcloud学习笔记67--springboot 整合 任务调度框架Quartz
    1.背景定时任务Job的作业类中无法注入Service等由Spring容器所管理的Bean。例如下面这种情况,TaskCronJobService就无法成功注入。importjava.util.Iterator;importjavax.annotation.Resource;importorg.quartz.Job;importorg.quartz.JobExecutionContext;importor......
  • 在Kubernetes中,您可以通过几种方式来禁止某个Pod调度
    在Kubernetes中,您可以通过几种方式来禁止某个Pod调度到节点上。以下是一些方法:NodeSelector:您可以使用NodeSelector来限制Pod只能调度到带有特定标签的节点上。如果您希望完全禁止Pod调度到某些节点上,可以确保这些节点不拥有所需的标签,这将阻止Pod调度到这些节点。例如,要禁止P......
  • 高效调度新篇章:详解DolphinScheduler 3.2.0生产级集群搭建
    转载自tuoluzhe8521导读:通过简化复杂的任务依赖关系,DolphinScheduler为数据工程师提供了强大的工作流程管理和调度能力。在3.2.0版本中,DolphinScheduler带来了一系列新功能和改进,使其在生产环境中的稳定性和可用性得到了显著提升。为了帮助读者更好地理解和应用这一版本,我们精......
  • 解决k8s调度不均
    在近期的工作中,我们发现k8s集群中有些节点资源使用率很高,有些节点资源使用率很低,尝试重新部署应用和驱逐Pod,发现并不能有效解决负载不均衡问题。调度不均衡的问题可能有多个原因导致,下面是一些可能的原因:节点资源分配不均:某些节点可能被分配了更多的资源(如CPU、内存)而导致......
  • 自己动手实现一个轻量无负担的任务调度ScheduleTask
    至于任务调度这个基础功能,重要性不言而喻,大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz,Hangfire,Coravel这里我们不讨论三方的库如何使用而是从0开始自己制作一个简易的任务调度技术栈用到了:BackgroundService和NCrontab库第一步我们定义一个简单的任务约定......
  • 从0到1,百亿级任务调度平台的架构与实现
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • Cron表达式-任务调度
    当我们谈论任务调度时,cron(Cron表达式)是一种非常常见和常用的方式。它是一种用于在特定时间间隔内定期执行任务的调度表达式。cron表达式由6个字段组成,分别代表分钟、小时、日期、月份、星期几和要执行的命令或脚本。下面是cron表达式的每个字段的含义:09***command分钟(0-5......
  • 在Linux中,如何使用cron进行任务调度?
    Cron是Linux系统中用于任务调度的一个强大工具,它允许用户安排命令或脚本在特定的时间周期性地自动执行,无需用户干预。Cron作业可以按分钟、小时、日期、月份、星期几来设置执行时间。以下是使用cron进行任务调度的基本步骤:1.编辑Crontab文件Crontab(crontable)文件包含了所有计......