小玩批量作业调度算法

批处理作业调度

虽然我们公司是做高性能作业调度的,我也作为开发组一小员每周我们都有相应的技术实践活动,这周呢我尝试写一个批量作业调度的算法(小小的玩了一下,求DEV一组的大神给我指正),希望大家指正欢迎大家了解我们公司景行锐创软件

给定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。

解空间:排列树

private static void backtrack(int 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) {
            MyMath.swap(x,i,j);
            backtrack(i+1);
            MyMath.swap(x,i,j);
            }
          f1-=m[x[j]][1];
          f-=f2[i];
          }
   }
public class FlowShop
      static int  n,      // 作业数
               f1,     // 机器1完成处理时间
               f,      // 完成时间和
               bestf;   // 当前最优值
      static int [][] m;   // 各作业所需的处理时间
      static int [] x;     // 当前作业调度
      static int [] bestx;  // 当前最优作业调度
      static int [] f2;    // 机器2完成处理时间

批量作业调度算法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值