<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Change Dir

    先知cd——熱愛生活是一切藝術(shù)的開始

    統(tǒng)計

    留言簿(18)

    積分與排名

    “牛”們的博客

    各個公司技術(shù)

    我的鏈接

    淘寶技術(shù)

    閱讀排行榜

    評論排行榜

    深入理解動態(tài)規(guī)劃的一系列問題(7)

    本周更新的動態(tài)規(guī)劃問題是裝配線問題(Assembly Line Balancing (ASMBAL))。裝配線問題沒記錯的話應(yīng)該是算導(dǎo)中的動態(tài)規(guī)劃的第一題,具體描述大概是:一件產(chǎn)品從生產(chǎn)到出品要經(jīng)歷一系列過程,其中每個步驟都會有成本開銷,而這些過程在流轉(zhuǎn)(也就是說步驟轉(zhuǎn)換)過程也有成本損失,如何平衡選擇,可以最小化產(chǎn)品的出品成本。

    算導(dǎo)的原題:

          某汽車工廠有2個裝配線,每個裝配線有n 個裝配站(按順序編號1~n )標(biāo)記為Si,j,表示第i個裝配線的第j個裝配站,兩個裝配線的對應(yīng)的裝配站執(zhí)行相同的功能,但所用的時間可能不同。經(jīng)過第i條流水線(i=1,2)的第j 個裝配站所花的時間為a[i][j]。從第i條流水線的第j 個裝配站移到第j+1個裝配站的時間可以忽略,而移到另外一個流水線的下一個裝配站則需要一定的時間t[i][j]。汽車進(jìn)入流水線需要花時間,進(jìn)入裝配線1需要時間e[1],進(jìn)入裝配線2需要時間e[2];  汽車出流水線時需要花時間,出裝配線1需要時間x[1],出裝配線2需要時間x[2] 。汽車的裝配需要按順序經(jīng)過所有裝配站。
      現(xiàn)在已知裝配時間a[i][j] 、轉(zhuǎn)移時間t[i][j]、進(jìn)入裝配線的時間e[i]、出裝配線的時間x[i],要求輸出裝配一輛汽車所需要的最短時間,以及經(jīng)過的裝配站。 

          對于這個問題,可以將其與之前所解的有向無環(huán)圖對比,非常類似,不同的是這個在計算轉(zhuǎn)移成本的時候,不僅需要算路徑(也就是轉(zhuǎn)移的成本),還要疊加節(jié)點本身的生產(chǎn)成本。以具體為例,裝配線有14個裝配站,其中0號和13號分別是起點和終點,而剩余12個站平均分配在兩條流水線上,具體各計算成本如下圖:

    image

    其中節(jié)點權(quán)重為v=[0,7,8,9,5,3,6,4,4,8,5,4,7,0],即代表裝配時間,而轉(zhuǎn)移時間表示為矩陣形式:

    image

    因為已經(jīng)將過程打上了stage的標(biāo)簽,我們定義一個狀態(tài)為(k,i),表示在第k個階段的第i條裝配線上,那么轉(zhuǎn)移時間就表示為(k,i)->(k+1,j)的一個成本c(k,i,j)。當(dāng)然由題圖可見在同線轉(zhuǎn)移時是沒有成本的即c(i,k,k)=0。具體的,定義總成本R(k,i,j)=v(k,i)+c(k,i,j),其中v(k,i)即i裝配線的編號為k的節(jié)點權(quán)重。定義f(k,i)為狀態(tài)值,即在k階段時的i裝配線到出產(chǎn)時的總成本,那么DPFE為:f(k,i)=min j{R(k,i,j)+f(k+1,j)}。f(N+1,0)=0是初始條件,表示在最后一個節(jié)點時的成本,那么往前遞推,f(0,0)作為在起點處的成本就是目標(biāo)函數(shù),于是f(0,0)=(0+2)+(7+2)+(5+1)+(3+1)+(4+0)+(5+1)+(4+3)=38.

    解題程序:

       1: /*
       2:  * Copyright (C) 2013 changedi
       3:  *
       4:  * Licensed under the Apache License, Version 2.0 (the "License");
       5:  * you may not use this file except in compliance with the License.
       6:  * You may obtain a copy of the License at
       7:  *
       8:  * http://www.apache.org/licenses/LICENSE-2.0
       9:  *
      10:  * Unless required by applicable law or agreed to in writing, software
      11:  * distributed under the License is distributed on an "AS IS" BASIS,
      12:  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      13:  * See the License for the specific language governing permissions and
      14:  * limitations under the License.
      15:  */
      16: package com.jybat.dp;
      17:  
      18: public class ASMBAL {
      19:  
      20:     private static int[][] cost = // (stage,line)
      21:     { 
      22:             { 2, 4 }, // to next line
      23:             { 2, 2 }, { 1, 3 }, { 2, 1 }, { 2, 3 }, { 1, 4 }, // to next line
      24:             { 3, 2 } // from line
      25:     };
      26:     private static int[][] vertexcost = // (stage,line)
      27:     { 
      28:         { 0, 0 }, { 7, 8 }, { 9, 5 }, { 3, 6 }, { 4, 4 }, { 8, 5 }, { 4, 7 } 
      29:     };
      30:     private static int N = vertexcost.length - 1;
      31:  
      32:     private static int arccost(int g, int x, int d) {
      33:         if (g == 0)
      34:             return cost[g][d]; // to next line d
      35:         else if (g == N)
      36:             return cost[g][x]; // from line x
      37:         else if (x == d)
      38:             return 0; // stay same line
      39:         else
      40:             return cost[g][d]; // to next line d
      41:     }
      42:     
      43:     public static double f(int g, int x) {
      44:         if (g > N)
      45:             return 0.0;
      46:         double min = Double.MAX_VALUE;
      47:         for (int d = 0; d <= 1; d++) {
      48:             double c = vertexcost[g][x] + arccost(g, x, d) + f(g + 1, d);
      49:             if (c < min)
      50:                 min = c;
      51:         }
      52:         return min;
      53:     }
      54:     /**
      55:      * @param args
      56:      */
      57:     public static void main(String[] args) {
      58:         System.out.println(f(0,0));
      59:     }
      60:  
      61: }

    posted on 2014-04-21 13:25 changedi 閱讀(1233) 評論(1)  編輯  收藏 所屬分類: 算法

    評論

    # re: 深入理解動態(tài)規(guī)劃的一系列問題(7) 2014-04-23 14:40 無添加

    還是看不懂啊。。。  回復(fù)  更多評論   

    主站蜘蛛池模板: 亚洲国产成人久久综合一区| 亚洲欧洲高清有无| 亚洲an天堂an在线观看| 亚洲第一成年网站大全亚洲| 激情五月亚洲色图| 美女黄网站人色视频免费| 波霸在线精品视频免费观看| 久久免费区一区二区三波多野| 97视频免费在线| 免费国产综合视频在线看 | 成人精品一区二区三区不卡免费看| 国产一区二区免费视频| 青青青国产在线观看免费网站| 热99re久久免费视精品频软件| 亚洲中文字幕成人在线| 亚洲三级电影网站| 亚洲国产欧美日韩精品一区二区三区 | a毛片全部播放免费视频完整18| 999久久久免费精品播放| 在线观看免费宅男视频| 中文亚洲成a人片在线观看| 久久亚洲精品成人无码网站 | 亚洲福利一区二区精品秒拍| 亚洲av纯肉无码精品动漫| 国产一区二区三区免费观看在线| 2021久久精品免费观看| 亚洲精品国产V片在线观看| 中文字幕亚洲综合精品一区| 在线精品自拍亚洲第一区| av永久免费网站在线观看| 精品熟女少妇AV免费观看| 日韩亚洲变态另类中文| 精品亚洲AV无码一区二区 | 香蕉视频免费在线播放| 免费A级毛片无码A∨| 国产免费一区二区三区VR| 亚洲视频精品在线| 无套内射无矿码免费看黄| 精品女同一区二区三区免费站| 亚洲裸男gv网站| 亚洲国产激情在线一区|