批處理作業排程 回溯法

2021-09-22 13:47:00 字數 1745 閱讀 3971

問題描述:

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

簡單描述:

對於給定的n個作業,指定最佳作業排程方案,使其完成時間和達到最小。

演算法設計:

從n個作業中找出有最小完成時間和的作業排程,所以批處理作業排程問題的解空間是一棵排列樹。

類flowshop的資料成員記錄解空間的結點資訊,m輸入作業時間,bestf記錄當前最小完成時間和,bestx記錄相應的當前最佳作業排程。

在遞迴函式backtrack中,

當i>n時,演算法搜尋至葉子結點,得到乙個新的作業排程方案。此時演算法適時更新當前最優值和相應的當前最佳排程。

當i演算法描述:

class

flowshop

;void flowshop::backtrack(int

i)

else

f1 -= m[x[j]][1

]; f -=f2[i];}}

}int flow(int * * m,int n,int

bestx)

x.backtrack(1);

delete x x;

delete x f2;

return

x.bestf;

}

例項**:

#include using

namespace

std;

#define max 200

int* x1;//

作業ji在機器1上的工作時間;

int* x2;//

作業ji在機器2上的工作時間;

int number=0;//

作業的數目;

int* xorder;//

作業順序;

int* bestorder;//

最優的作業順序;

int bestvalue=max;//

最優的時間;

int xvalue=0;//

當前完成用的時間;

int f1=0;//

機器1完成的處理時間;

int* f2;//

第i階段機器2完成的時間;

void backtrace(int

k) bestvalue=xvalue;

}else

swap(xorder[i],xorder[k]);

xvalue-=f2[k];

f1-=x1[xorder[i]];}}

}int

main()

cout

<

"<

for (i=1;i<=number;i++)

for (i=1;i<=number;i++)

backtrace(1);

cout

<

最節省的時間為:

"<

cout

<

cout

<

對應的方案為:";

for (i=1;i<=number;i++)

return0;

}

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

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

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

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

批處理作業排程 回溯法

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