[有四个工件等待在同一台机器上加工,若加工的先后次序可以任意,各工件之间的调整时间如下表:
到A 到B 到C 到D
从A - 15 20 5
从B 30 - 30 15
从C 25 25 - 15
从D 20 35 10 -
试确定最佳加工顺序。

解决方案 »

  1.   

    SQL> SELECT * FROM test;
     
    HEAD A_TIME B_TIME C_TIME D_TIME
    ---- ------ ------ ------ ------
    A               15     20      5
    B        30            30     15
    C        25     25            15
    D        20     35     10 
     
    SQL> 
    SQL> select * from test1;
    SQL> select * from test;
     
    HEAD A_TIME B_TIME C_TIME D_TIME
    ---- ------ ------ ------ ------
    A               15     20      5
    B        30            30     15
    C        25     25            15
    D        20     35     10 
     
    SQL> select * from test1;
     
    FIRST SECOND COST_ALL
    ----- ------ --------
    B     A            30
    C     A            25
    D     A            20
    A     B            15
    C     B            25
    D     B            35
    A     C            20
    B     C            30
    D     C            10
    A     D             5
    B     D            15
    C     D            15
     
    12 rows selected
     
    SQL> 
    SQL> SELECT a.first,a.second,b.second third,c.second forth,SUM(a.cost_all+b.cost_all+c.cost_all) FROM test1 a,test1 b,test1 c
      2  WHERE a.second=b.first AND b.second=c.first
      3    AND a.first<>b.second AND a.first<>c.second
      4    AND b.first<>c.second
      5  GROUP BY a.first,a.second,b.second ,c.second
      6  ORDER BY SUM(a.cost_all+b.cost_all+c.cost_all) ASC;
     
    FIRST SECOND THIRD FORTH SUM(A.COST_ALL+B.COST_ALL+C.CO
    ----- ------ ----- ----- ------------------------------
    A     B      D     C                                 40
    A     D      C     B                                 40
    B     A      D     C                                 45
    B     D      C     A                                 50
    C     D      A     B                                 50
    D     C      A     B                                 50
    B     D      A     C                                 55
    C     A      B     D                                 55
    C     B      D     A                                 60
    A     B      C     D                                 60
    B     C      A     D                                 60
    A     C      B     D                                 60
    C     B      A     D                                 60
    D     A      B     C                                 65
    D     A      C     B                                 65
    B     A      C     D                                 65
    C     A      D     B                                 65
    D     C      B     A                                 65
    B     C      D     A                                 65
    A     C      D     B                                 70
     
    FIRST SECOND THIRD FORTH SUM(A.COST_ALL+B.COST_ALL+C.CO
    ----- ------ ----- ----- ------------------------------
    A     D      B     C                                 70
    C     D      B     A                                 80
    D     B      A     C                                 85
    D     B      C     A                                 90
     
    24 rows selected
     
    SQL>
    所以最佳加工顺寻是
    1 A B D C 40
    2 A D C B 40
    消耗时间都是40分钟
      

  2.   

    产生test1的语句
    INSERT INTO test1
    SELECT head,'A',A_time FROM test WHERE A_TIME IS NOT NULL
    UNION ALL 
    SELECT head,'B',B_time FROM test WHERE B_TIME IS NOT NULL
    UNION ALL 
    SELECT head,'C',C_time FROM test WHERE C_TIME IS NOT NULL
    UNION ALL 
    SELECT head,'D',D_time FROM test WHERE D_TIME IS NOT NULL;