Johnson算法实现流水作业最优调度
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算法实现流水作业最优调度相关推荐
- 加工生产调度(Johnson算法 双机流水作业调度问题)
加工生产调度 题目描述: 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.怎样安排这n ...
- 【算法】优先队列的分枝限界算法的流水作业调度问题(C++源码)
[算法]优先队列的分枝限界算法的流水作业调度问题(C++源码) 一.任务描述 二.步骤描述 三.运行结果截图 四.源代码(C++) 一.任务描述 有一个流水作业调度问题,n=4,a[]={5,10,9 ...
- 弱网络环境下最优调度和优化传输层协议方案
一.背景 与有线网络通信相比,无线网络通信受环境影响比较大(例如高层建筑.用户移动.环境噪音.相对封闭环境等等),网络的服务质量相对来说不是非常稳定,导致用户经常会在弱信号的网络环境下通信.而当用户在 ...
- 基于改进A3C算法的微网优化调度与需求响应管理
编程语言:python平台 主题:基于改进A3C算法的微网优化调度与需求响应管理 内容简介: 代码主要做的是基于深度强化学习的微网/虚拟电厂优化调度策略研究,微网的聚合单元包括风电机组,储能单元,温控 ...
- 【优化布局】基于matlab免疫算法求解充电站最优布局【含Matlab源码 2539期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...
- python中算法(sklearn)的最优超参数寻优:skopt贝叶斯搜索
python中算法(sklearn)的最优超参数寻优:skopt贝叶斯搜索 Jeff Dean在ICML 2019上进行了有关AutoML的演讲,并将自动化分为4个级别 手动构造预测变量,不引入学习的 ...
- 算法导论——所有点对最短路径:稀疏图Johnson算法
2019独角兽企业重金招聘Python工程师标准>>> package org.loda.graph;import org.loda.structure.Stack; import ...
- 贪心算法--多处最优服务次序问题
问题描述: 设有n 个顾客同时等待一项服务.每个顾客需要服务一定时间.共有s 处可以 提供此项服务.应如何安排n 个顾客的服务次序才能使平均等待时间达到最小?平均等待时 ...
- 【优化求解】基于头脑风暴优化算法BSO求解最优目标matlab源码
1 简介 受人类创造性解决问题过程--头脑风暴会议的启发, 2011年史玉回老师 在第二次群体智能国际会议(The Second International Conference on Swarm I ...
- 电动汽车充放电最优调度 研究了EV充电和放电的调度优化问题 我们首先制定全局调度优化问题,其中优化充电功率以最小化所有在白天执行充电和放电的EV的总成本
电动汽车充放电最优调度20 研究了EV充电和放电的调度优化问题. 我们首先制定全局调度优化问题,其中优化充电功率以最小化所有在白天执行充电和放电的EV的总成本. 全球最佳解决方案提供全球最小的总成本. ...
最新文章
- Richardson RazorSQL中文版
- Android 自定义WebView 实现可以加载缓存数据
- layui 多个文件上传控件 整合缩减代码
- freemarker小例子
- 【项目管理】合同和采购
- python21天打卡Day8-string,int互转
- php yii 控件分页,yii2.0-分页应用实例
- java+jdk+1.6+下载_jdk1.6下载_jdk1.6官方下载「32位|64位」-太平洋下载中心
- uCOS在51单片机上的移植心得
- OpenHarmony恢复启动子系统init进程之服务管理与发布
- Pinbox 网络收藏夹使用指南
- 辰皇怎么过鸿蒙,最新版 鸿蒙副本快速通关和爆神符攻略
- Laravel OAuth2 (三) ---使用 services 和 facades
- linux中audit服务,linux下的audit服务
- javascript函数总结
- Android机器人纯HTML
- Linux系统Sudo命令的使用说明
- 翻译HoudiniEngine官方文档:PDG
- 弹性方法计算连续梁板内力_连续梁、板按塑性法内力计算.ppt
- 有哪样 BI 产品能支持数据填报补录功能?
热门文章
- 2018HN省队集训
- 基于JEECG框架,前台VUE,后台java,导入导出
- 基于HyperVID数据集训练自己的车型识别系统
- 学习笔记 | 深度学习相关研究与展望 Review of deep learning
- .h文件、.inc文件、.lib文件的功能及三者之间的异同
- 没有GPS模块无人机无法解锁解决方法测试及其他无法解锁APM疑难杂症
- 计算机网络原理(04741)自考学习笔记/备考资料
- python 窗体句柄_Python pyautogui窗口句柄(Python pyautogui window handle)
- 多元统计分析——多元线性回归
- python网校_《猎豹网校:快速掌握Python系统管理-53讲》