1. 算法描述

  • 令N1={i∣ai<bi}N_1 = \{i | a_i < b_i \}N1​={i∣ai​<bi​}, N2={i∣ai≥bi}N_2 = \{ i| a_i \geq b_i\}N2​={i∣ai​≥bi​};
  • 将N1N_1N1​中的作业按照aia_iai​的非降序排列,将N2N_2N2​中的作业按照bib_ibi​的非升序排列;
  • N1N_1N1​中的作业拼接N2N_2N2​中的作业构成JohnsonJohnsonJohnson算法的最优作业调度。

2. C/C++代码实现

/**************************************************
*Johnson算法实现流水作业最优调度
***************************************************/
#include<iostream>
#include<algorithm>
using namespace std;const int maxn = 1000;class JobType {public:int key;int index;bool job;bool operator < (const JobType& j)const {return key < j.key;//重载运算符<,以键值key为关键字排序}
};
int FlowShop(int n, int a[], int b[], int c[])
{JobType* d = new JobType[n];for (int i = 0; i < n; i++){d[i].key = a[i] < b[i] ? a[i] : b[i];//记录ai bi中最小值为keyd[i].job = a[i] < b[i]; //ai < bi N1 = {i | ai < bi} N2 = {i | ai >= bi}d[i].index = i;}sort(d, d + n);//并不是简单的快速排序 可能还有堆排序等排序算法  根据数据的规模进行选择int j = 0;int k = n - 1;for (int i = 0; i < n; i++)//因为最后的调度序列是 排序之后的{N1,N2}//前面排序之后N1是非降序  N2也是非降序  //因此在排序之后序列中遍历时  遇到job == 0的下标 主要从c[]最后下标开始 依次递减if (d[i].job) // N1 i按照ai的非降序排列c[j++] = d[i].index;else //N2 i按照bi的非升序排列 c[k--] = d[i].index;//输出调度序列cout << "流水作业调度序列为:";for (int i = 0; i < n; i++)cout << c[i] << " ";cout << endl;//计算最短的流水作业调度时间j = a[c[0]]; //j记录工序ai完成的时间k = j + b[c[0]]; //k记录工序bi完成的时间for (int i = 1; i < n; i++){j += a[c[i]]; //工序a进行到目前用的时间k = j < k ? k + b[c[i]] : j + b[c[i]];//工序a进行到i用的时间j 和 工序b进行到i-1用的时间k  作比较/*若j > k, i-1作业的b工序已经结束了 但是i作业的a工序还没结束 此时b需要等待其结束 那么i作业的b工序完成时间为 k = j + bi*//*否则j <= k, i-1作业的b工序还没结束i作业的a工序就已经结束  此时i作业的b工序则不需要等待直接进行即可  那么i作业的b工序完成时间为k = k + bi*/}delete[]d;return k;
}int main()
{int n;cin >> n;int a[maxn], b[maxn], c[maxn];for (int i = 0; i < n; i++)cin >> a[i] >> b[i];int t = FlowShop(n, a, b, c);cout << "流水作业调度最短完成时间是:" << t << endl;return 0;
}
/*
5
2 5
4 2
3 3
6 1
1 7
*/

3. 运行结果

5
2 5
4 2
3 3
6 1
1 7
流水作业调度序列为:4 0 2 1 3
流水作业调度最短完成时间是:19

4. 具体动态规划推导过程

具体推导过程

Johnson算法实现流水作业最优调度相关推荐

  1. 加工生产调度(Johnson算法 双机流水作业调度问题)

    加工生产调度 题目描述: 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.怎样安排这n ...

  2. 【算法】优先队列的分枝限界算法的流水作业调度问题(C++源码)

    [算法]优先队列的分枝限界算法的流水作业调度问题(C++源码) 一.任务描述 二.步骤描述 三.运行结果截图 四.源代码(C++) 一.任务描述 有一个流水作业调度问题,n=4,a[]={5,10,9 ...

  3. 弱网络环境下最优调度和优化传输层协议方案

    一.背景 与有线网络通信相比,无线网络通信受环境影响比较大(例如高层建筑.用户移动.环境噪音.相对封闭环境等等),网络的服务质量相对来说不是非常稳定,导致用户经常会在弱信号的网络环境下通信.而当用户在 ...

  4. 基于改进A3C算法的微网优化调度与需求响应管理

    编程语言:python平台 主题:基于改进A3C算法的微网优化调度与需求响应管理 内容简介: 代码主要做的是基于深度强化学习的微网/虚拟电厂优化调度策略研究,微网的聚合单元包括风电机组,储能单元,温控 ...

  5. 【优化布局】基于matlab免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  6. python中算法(sklearn)的最优超参数寻优:skopt贝叶斯搜索

    python中算法(sklearn)的最优超参数寻优:skopt贝叶斯搜索 Jeff Dean在ICML 2019上进行了有关AutoML的演讲,并将自动化分为4个级别 手动构造预测变量,不引入学习的 ...

  7. 算法导论——所有点对最短路径:稀疏图Johnson算法

    2019独角兽企业重金招聘Python工程师标准>>> package org.loda.graph;import org.loda.structure.Stack; import ...

  8. 贪心算法--多处最优服务次序问题

    问题描述:        设有n 个顾客同时等待一项服务.每个顾客需要服务一定时间.共有s 处可以        提供此项服务.应如何安排n 个顾客的服务次序才能使平均等待时间达到最小?平均等待时   ...

  9. 【优化求解】基于头脑风暴优化算法BSO求解最优目标matlab源码

    1 简介 受人类创造性解决问题过程--头脑风暴会议的启发, 2011年史玉回老师 在第二次群体智能国际会议(The Second International Conference on Swarm I ...

  10. 电动汽车充放电最优调度 研究了EV充电和放电的调度优化问题 我们首先制定全局调度优化问题,其中优化充电功率以最小化所有在白天执行充电和放电的EV的总成本

    电动汽车充放电最优调度20 研究了EV充电和放电的调度优化问题. 我们首先制定全局调度优化问题,其中优化充电功率以最小化所有在白天执行充电和放电的EV的总成本. 全球最佳解决方案提供全球最小的总成本. ...

最新文章

  1. Richardson RazorSQL中文版
  2. Android 自定义WebView 实现可以加载缓存数据
  3. layui 多个文件上传控件 整合缩减代码
  4. freemarker小例子
  5. 【项目管理】合同和采购
  6. python21天打卡Day8-string,int互转
  7. php yii 控件分页,yii2.0-分页应用实例
  8. java+jdk+1.6+下载_jdk1.6下载_jdk1.6官方下载「32位|64位」-太平洋下载中心
  9. uCOS在51单片机上的移植心得
  10. OpenHarmony恢复启动子系统init进程之服务管理与发布
  11. Pinbox 网络收藏夹使用指南
  12. 辰皇怎么过鸿蒙,最新版 鸿蒙副本快速通关和爆神符攻略
  13. Laravel OAuth2 (三) ---使用 services 和 facades
  14. linux中audit服务,linux下的audit服务
  15. javascript函数总结
  16. Android机器人纯HTML
  17. Linux系统Sudo命令的使用说明
  18. 翻译HoudiniEngine官方文档:PDG
  19. 弹性方法计算连续梁板内力_连续梁、板按塑性法内力计算.ppt
  20. 有哪样 BI 产品能支持数据填报补录功能?

热门文章

  1. 2018HN省队集训
  2. 基于JEECG框架,前台VUE,后台java,导入导出
  3. 基于HyperVID数据集训练自己的车型识别系统
  4. 学习笔记 | 深度学习相关研究与展望 Review of deep learning
  5. .h文件、.inc文件、.lib文件的功能及三者之间的异同
  6. 没有GPS模块无人机无法解锁解决方法测试及其他无法解锁APM疑难杂症
  7. 计算机网络原理(04741)自考学习笔记/备考资料
  8. python 窗体句柄_Python pyautogui窗口句柄(Python pyautogui window handle)
  9. 多元统计分析——多元线性回归
  10. python网校_《猎豹网校:快速掌握Python系统管理-53讲》