2018-08-09

動(dòng)態(tài)規(guī)劃之流水作業(yè)問題

問題描述

n個(gè)作業(yè){1弯洗,2旅急,…,n}要在由2臺(tái)機(jī)器M1和M2組成的流水線上完成加工牡整。每個(gè)作業(yè)加工的順序都是先在M1上加工藐吮,然后在M2上加工。M1和M2加工作業(yè)i所需的時(shí)間分別為ai和bi。流水作業(yè)調(diào)度問題要求確定這n個(gè)作業(yè)的最優(yōu)加工順序谣辞,使得從第一個(gè)作業(yè)在機(jī)器M1上開始加工迫摔,到最后一個(gè)作業(yè)在機(jī)器M2上加工完成所需的時(shí)間最少。
使用動(dòng)態(tài)規(guī)劃的思想可以解決該問題泥从,具體的粉洗過程可參見:https://blog.csdn.net/baidu_32739019/article/details/51166345
這里僅給出結(jié)果句占。

解決方法

對(duì)于流水作業(yè)調(diào)度問題,可以使用Johnson法則實(shí)現(xiàn)最有調(diào)度躯嫉,流水作業(yè)調(diào)度問題的Johnson算法:
(1) 令N1={i|ai<bi}纱烘,N2={i|ai<=bi}
(2) 將N1中作業(yè)依ai的非減序排列;將N2中作業(yè)依bi的非增序排列祈餐;
(3) N1中作業(yè)接N2種作業(yè)構(gòu)成滿足Johnson法則的最優(yōu)調(diào)度

代碼實(shí)現(xiàn)

public class JobSchedule {
       private static class Node{
          int key;
          int index;
          boolean job;
          
       }
       public static void flowShop(int n,int[]a,int[]b,int[]c){
           Node[] d = new Node[n];
           int i;
           for(i=0;i<n;i++){
               Node node = new Node();
               node.key = a[i]>b[i]?b[i]:a[i];
               node.job = a[i]<=b[i];
               node.index = i;
               d[i]=node;
           }
           Node[] tmp = new Node[n];
           MergeSort(d,0,n-1,tmp);
           int j=0,k=n-1;
           for(i=0;i<n;i++){
               if(d[i].job){
                   c[j++]=d[i].index;
               }else{
                   c[k--]=d[i].index;
               }
           }
           System.out.println("作業(yè)調(diào)度順序?yàn)?");
           for(i=0;i<n;i++){
               System.out.print(c[i]+" ");
           }
           System.out.println();
           j=a[c[0]];
           k=j+b[c[0]];
           for(i=1;i<n;i++){
               j+=a[c[i]];
               k=j<k?k+b[c[i]]:j+b[c[i]];
           }
           System.out.println("作業(yè)調(diào)度總時(shí)間為:"+k);
       }
       public static void MergeSort(Node[] node,int left,int right,Node[] tmp){
           if(left<right){
               int mid = (left+right)/2;
               MergeSort(node,left,mid,tmp);
               MergeSort(node,mid+1,right,tmp);
               Merge(node,left,mid,right,tmp);
           }
           
       }
       public static void Merge(Node[] node,int left,int mid,int right,Node[] tmp){
           int i=left;
           int j=mid+1;
           int t=0;
           while(i<=mid&&j<=right){
               if(node[i].key<node[j].key){
                  tmp[t++]=node[i++];
               }
               else{
                   tmp[t++]=node[j++];
               }
           }
           while(i<=mid){
               tmp[t++] = node[i++];
           }
           while(j<=right){
               tmp[t++] = node[j++];
           }
           t=0;
           while(left<=right){
               node[left++]=tmp[t++];
           }
       }
       public static void main(String[] args){
           int[] a={2,4,3,6,1};
           int[] b={5,2,3,1,7};
           int[] c = new int[5];
           flowShop(5,a,b,c);
       }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘫镇,一起剝皮案震驚了整個(gè)濱河市仓坞,隨后出現(xiàn)的幾起案子货裹,更是在濱河造成了極大的恐慌氨距,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舱痘,死亡現(xiàn)場離奇詭異变骡,居然都是意外死亡离赫,警方通過查閱死者的電腦和手機(jī)芭逝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渊胸,“玉大人旬盯,你說我怎么就攤上這事◆崦停” “怎么了胖翰?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長切厘。 經(jīng)常有香客問我萨咳,道長,這世上最難降的妖魔是什么疫稿? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任培他,我火速辦了婚禮,結(jié)果婚禮上遗座,老公的妹妹穿的比我還像新娘舀凛。我一直安慰自己,他們只是感情好途蒋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布猛遍。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪懊烤。 梳的紋絲不亂的頭發(fā)上梯醒,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音腌紧,去河邊找鬼冤馏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛寄啼,可吹牛的內(nèi)容都是我干的逮光。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼墩划,長吁一口氣:“原來是場噩夢啊……” “哼涕刚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乙帮,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤杜漠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后察净,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驾茴,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年氢卡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锈至。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡译秦,死狀恐怖峡捡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情筑悴,我是刑警寧澤们拙,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站阁吝,受9級(jí)特大地震影響砚婆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜突勇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一装盯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧与境,春花似錦验夯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春绑谣,著一層夾襖步出監(jiān)牢的瞬間党窜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工借宵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幌衣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓壤玫,卻偏偏與公主長得像豁护,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子欲间,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 動(dòng)態(tài)規(guī)劃之矩陣連乘問題 問題描述 給定n個(gè)矩陣:A1,A2,...,An楚里,其中Ai與Ai+1是可乘的,i=1猎贴,2....
    Ping接未來閱讀 458評(píng)論 0 1
  • 《針對(duì)80班缎、90后員工談管理》課題綱要 培訓(xùn)主題: 一、分析80她渴、90后員工的特點(diǎn) 1.小組討論:80达址、90后員工...
    初小湄閱讀 94評(píng)論 0 0
  • 車窗外面的太陽像個(gè)火球炙烤著地面,車內(nèi)雖然開著空調(diào)趁耗,冷到我頭痛沉唠,但是我依舊有種分分鐘被烤到炸裂的感覺。 因?yàn)樽谖?..
    我是松鼠醬閱讀 409評(píng)論 1 2
  • 該死对粪,記不清多少次被吵醒右冻,隱忍著心中不快装蓬,抬頭打量起這個(gè)拉卷閘門吵醒我的人著拭,帶著生意人特有的訕笑,捎帶兩句...