批處理作業排程 分支限界法

2022-02-24 12:14:15 字數 2885 閱讀 5254

一、問題描述

給定 n 個作業的集合 j = 。每乙個作業 j[i] 都有兩項任務分別在兩台機器上完成。每乙個作業必須先由機器1 處理,然後由機器2處理。作業 j[i] 需要機器 j 的處理時間為 t[j][i] ,其中i = 1, 2, …, n, j = 1, 2。對於乙個確定的作業 排程,設f[j][i]是作業 i 在機器 j 上的完成處理的時間。所有作 業在機器2上完成處理的時間之和 f = sigma f[2][i] 稱為該作業 排程的完成時間之和。

批處理作業排程問題要求對於給定的 n 個作業,制定最佳作業排程 方案,使其完成時間和達到最小。

二、解題思路及所選演算法策略的可行性分析

用優先佇列式分支限界法解決此問題。由於要從n個作業的所有排列中找出有最小完成時間和的作業排程,所以批處理作業排程問題的解空間樹是一顆排列樹。對於批處理作業排程問題,可以證明存在最佳作業排程使得在機器1和機器2上作業以相同次序完成(因為每個作業必須先在機器1上完成作業才能在機器2上進行作業)。

如果對於未安排的作業,對於其中乙個作業,每當該作業在機器1上完成處理後都能立即在機器2上開始處理,則機器1沒有空閒時間,達到滿工作狀態,將此情況的未安排作業在機器2上的工作時間總和記為s1,同理將機器2滿工作狀態的情況下的工作時間總和記為s2,則必有:

所有作業機器2上完工時間和 >= 已安排作業機器2上完工時間和 + max

其中當未安排作業按照在機器1、2上工作時間非遞減順序進行排程時,s1和s2同時取得極小值且和排程無關,由此可作為分支限界法中的限界函式。

偽**描述及複雜度分析

bbflow()elsewhile(enode!=null&&enode.s<=n)

三、**實現

package

分支限界法;

public

class nodes implements

comparable

public nodes(nodes e,int ef,int ebb,intn)

@override

public

intcompareto(object o)

}public

class

bbflow

public

void swap(int b,int i,int j,int k,int

t)

public

void swap(int x,int i,int

j)

/*** 對n個作業在機器1和2上所需時間排序

*/public

void

sort()

for(int i=0;i)}}

for(int i=0;i)

a[c[i]][j]=i;}}

/*** 計算完成時間和下界

* @param

enode

* @param

f *

@return

*/public

int bound(nodes enode,int

f) }

for(int k=0;k)

}f[1]=enode.f[1]+m[enode.x[enode.s]][0];

f[2]=((f[1]>enode.f[2])?f[1]:enode.f[2])+m[enode.x[enode.s]][1];

int sf2=enode.sf2+f[2];

int s1=0;

int s2=0;

int k1=n-enode.s;

int k2=n-enode.s;

int f3=f[2];

//計算s1的值

for(int j=0;j)

}//計算s2的值

for(int j=0;j)

}//返回完成時間和下界

return sf2+((s1>s2)?s1:s2);

}/*** 優先佇列式分支限界法解批處理作業排程問題

* @param

nn *

@return

*/public

int bbflow(int

nn) }

}else

swap(enode.x,enode.s,i);

}//完成結點擴充套件

}

//取下乙個擴充套件結點

enode=heap.poll();

}while(enode!=null&&enode.s<=n);

return

bestc;

}public

static

void

main(string args) ,,};//

m的下標從0開始

bbflow f=new

bbflow(n,m);

f.bbflow(n);

system.out.println("最優批處理作業排程順序為:");

for(int i=0;i)

system.out.print((f.bestx[i]+1)+" ");

system.out.println();

system.out.println("最優排程所需的最短時間為:"+f.bestc);

}}/*************************

*執行結果

*最優批處理作業排程順序為:

*1 3 2

*最優排程所需的最短時間為:18

*************************/

演算法作業 批處理作業排程 回溯 分支限界法

問題描述 給定 n 個作業的集合 j 每乙個作業 j i 都有兩項任務分別在兩台機器上完成。每乙個作業必須先由機器1 處理,然後由機器2處理。作業 j i 需要機器 j 的處理時間為 t j i 其中i 1,2,n,j 1,2。對於乙個確定的作業 排程,設f j i 是作業 i 在機器 j 上的完成...

批處理作業問題 分支限界法

include using namespace std 最小堆的插入與刪除 template class minheap int size const minheap insert const t x minheap deletemin t x private int currentsize,max...

回溯法 批處理作業排程 回溯法 批處理作業排程

問題描述 給定n個作業的集合j j1,j2,jn 每乙個作業ji都有兩項任務分別在2臺機器上完成。每個作業必須先有機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji。對於乙個確定的作業排程,設fji是作業i在機器j上完成處理時間。則所有作業在機器2上完成處理時間和f f2i,稱為該...