回溯之批处理作业调度问题
来源:互联网 发布:淘宝上买dota2饰品 编辑:程序博客网 时间:2024/06/11 06:52
批处理作业调度问题
给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间。所有作业在机器2上完成处理的时间和称为该作业调度的完成时间和。
批处理作业调度问题要求对于给定的n个作业,制定最佳作业调度方案,使其完成时间和达到最小。
这3个作业的6种可能的调度方案是1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2,1;它们所相应的完成时间和分别是19,18,20,21,19,19。易见,最佳调度方案是1,3,2,其完成时间和为18。
代码实现://批处理作业调度问题#include <iostream>#include <climits>using namespace std; class Flowshop{ friend intFlow(int **,int ,int []); private: voidBacktrack(int); int**M, //各作业所需的处理时间 *x, //当前作业调度 *bestx, //当前最优作业调度 *f2, //机器2完成处理时间 f1, //机器1完成处理时间 f, //完成时间和 bestf, //当前最优值 n; //作业数};void Swap(int &a, int &b){ int temp; temp = a ; a = b; b = temp;}void Flowshop :: Backtrack(int i) //搜索第i层结点{ if(i > n) //到达结点 { for(int j= 1; j <= n; j++) { bestx[j] = x[j]; //当前最优作业调度 } bestf =f; //当前最优完成时间和 } else { for(int j= i; j <= n; j++) { f1 +=M[x[j]][1]; f2[i]= ((f2[i-1] > f1) ? f2[i-1]:f1) + M[x[j]][2]; f +=f2[i]; if(f< bestf){ //完成时间和小于当前最优值 Swap(x[i],x[j]); Backtrack(i+1); Swap(x[i],x[j]); } f1-= M[x[j]][1]; f-= f2[i]; } }}int Flow(int **M, int n, int bestx[]){ int ub =INT_MAX; Flowshop X; //初始化X X.x = newint[n+1]; X.f2 = newint[n+1]; X.M = M; X.n = n; X.bestx =bestx; X.bestf = ub; X.f1 = 0; X.f = 0; for(int i =0; i <= n; i++) { X.f2[i] =0; X.x[i] =i; } X.Backtrack(1); delete []X.x; delete []X.f2; returnX.bestf;}int main(){ int**M,*bestx,n; cout<<"输入作业数:"<<endl; cin>>n; M = newint*[n+1]; for(int i =1; i <= n; i++) { M[i] =new int[2]; } for(int k =1; k <= n; k++) { for(int j= 1; j <= 2; j++) { cout<<"输入第"<<k<<"个作业在机器"<<j<<"上的处理时间:"; cin>>M[k][j]; } } bestx = newint[n+1]; for(int t =1; t <= n; t++) { bestx[t]= 0; } cout<<"最优完成时间:\n"<<Flow(M,n,bestx)<<endl; cout<<"最佳调度方案:"<<endl; for(int l =1; l <= n; l++) { cout<<bestx[l]<<" "; } cout<<endl; return 0;}
- 回溯之批处理作业调度问题
- 【回溯法】批处理作业调度问题
- 批处理作业调度问题 回溯法
- 回溯法解决批处理作业调度问题
- 回溯法 批处理作业调度问题
- 回溯算法之批处理作业调度
- 批处理作业调度-----回溯法
- 批处理作业调度(回溯)
- 批处理作业调度(回溯)
- 回溯法--批处理作业调度
- 第五章【回溯法】批处理作业调度问题
- 算法java实现--回溯法--批处理作业调度问题
- Java语言描述:回溯法之批处理作业调度
- 批处理作业调度问题
- 批处理作业调度问题
- 批处理作业调度问题
- 批处理作业调度问题
- 批处理作业调度问题
- IT人士注意的健康问题
- 高效开发团队的形成(人才的选择)
- 基于遗传算法的新安江模型参数优化率定(四)
- 一些不错的技术文章地址
- 第十二章 实现单向操作和异步操作(上)
- 回溯之批处理作业调度问题
- JavaScript, 实现贪吃蛇小游戏
- 云计算鲜为人知的三大潜在风险
- 第十二章 实现单向操作和异步操作(中)
- ODBC、OLE DB、 ADO的区别
- 第十二章 实现单向操作和异步操作(下)
- iphone amf 客户端和服务器端
- java六大必须理解的问题
- 第十三章以更好的性能实现WCF服务(上)