求解傳輸問題 二 初始化演算法

2021-10-19 07:45:45 字數 2513 閱讀 8561

這篇文章介紹兩種tp問題的初始化演算法:northwest-corner和minimum-cell-cost演算法

還是用前一篇文章中的案例作為例子:三個supply結點,其**量為:

倉庫庫存(supply)

1. 堪薩斯

1502. 奧馬哈

1753. 得梅因

275total

600三個demand結點,其需求量為:

麵粉廠需求(demand)

a. 芝加哥

200b. 聖路易斯

100c. 辛辛那提

300total

600路徑的單位花銷:

a.芝加哥

b.聖路易斯

c.辛辛那提

1. 堪薩斯

$6$8

$102. 奧馬哈

$7$11

$113. 得梅因

$4$5

$12根據上面的已知量,初始化tp表結構:

正如演算法名所說,northwest-corner演算法就是先分配最左上角的那個單元格,然後依次分配其他的空單元格,最終完成乙個初始解。在這裡例子裡,我們先給單元格1a進行分配,分配的數量要在滿足supply和demand約束條件下的最大值,也就是200和150的最小值,因此對於單元格1a,我們給它分配150;

接著我們需要給1a的相鄰單元格進行分配,這裡就是2a或者1b,但是因為1a的分配值已經達到了最大的supply值150,1b無法分配任何值,所以只能對2a進行分配;對於2a,在supply約束上,分配數量不能超過175,而在demand約束上,則不能超過50(因為1a已經占用了150),所以只能給2a分配50;

同樣的,第三次分配的可菜單元格是2b,在supply約束上,分配數量不能超過175-50=125,而在demand約束上,則不能超過100,所以給2b分配數量是100;第四次分配是給2c分配25,第五次分配是給3c分配275;五次分配後,所有的demand和supply約束都已達到,那麼就產生了乙個可行解。

下面的圖展示了演算法的分配過程:

初始解:

x 1a

=150x2

a=50x

2b=100x2

c=25x

3c=275

\begin x_&=150 \\ x_&=50 \\ x_&=100 \\ x_&=25 \\ x_&=275 \end

x1a​x2

a​x2

b​x2

c​x3

c​​=

150=

50=1

00=2

5=27

5​對應的目標值:

z =6

x1a+

8x1b

+10x1

c+7x

2a+11

x2b+

11x2c

+4x3

a+5x

3b+12

x3c=

5925

\begin z&=6x_+8x_+10x_+7x_+11x_+11x_+4x_+5x_+12x_\\ &=5925 \end

z​=6x1

a​+8

x1b​

+10x

1c​+

7x2a

​+11

x2b​

+11x

2c​+

4x3a

​+5x

3b​+

12x3

c​=5

925​

總結一下northwest-corner演算法的計算步驟:

在不違反supply和demand約束的條件下給tp表最左上角的單元格分配盡可能大的值;

找出相鄰的可分配單元格,為其分配最大可能的數量

重複步驟2,直到所有的supply和demand約束都達到

minimum-cell-cost演算法的思想也很簡單直接,就是依次為擁有最小單位花銷的單元格進行分配。對於我們的例子,單元格3a的單位花銷最小,只有4,因此我們首先為3a進行分配,分配值是200和275的最小值,即200;

然後需要尋找下乙個可以分配的最小花銷單元格,因為已經給3a分配了200,1a和2a已經無法分配任何值,在剩下的單元格中,最小花銷的單元格是3b;對於3b,可以分配的最大值是75;

第三次分配在1b上進行,分配值是25;第四次分配在1c上,分配125;最後一次分配在2c上,數量是175;整個過程如下圖所示:

這個解的總cost是4550,相較於northwest-corner演算法,該演算法得到的初始解要更優一些,畢竟minimum-cell-cost演算法可以看成是基於cost的貪心演算法;也正是這個原因,minimum-cell-cost演算法應用的更多一些,畢竟初始解越好,後面迭代搜尋最優解的次數也更有可能少一些

總結一些minimum-cell-cost演算法的步驟:

找出當前tp表中單位花銷最小的可分配單元格,為其分配盡可能大的值

重複第1步直到初始解完成

出問題 初始化ucosiii ORB初始化總結

公式梳理 1.在當前幀 2.平行計算如下兩個模型 通過標準化的dlt方法和8 point演算法,加上ransac策略計算出 和 為兩個模型固定到相同的迭代次數,以及每次迭代用到的點數 f矩陣用8個點,h矩陣用4個點 每次迭代中,為每個模型m h或f 計算乙個分數 其中,和 是對稱的從一幀到另一幀的轉...

夥伴演算法初始化

要看你怎麼理解初始化了.實際上,夥伴系統的初始化是乙個過程,夥伴系統初始化可以看成是由 bootmem allocator完成,與夥伴系統相關的主要有兩步 以2.6.11 為例 1 bootmem的早期,在初始化zone的過程共會呼叫free area init core,該函式呼叫 zone in...

STL vecto初始化(二)

向量 vector 是乙個封裝了動態大小陣列的順序容器 sequence container 跟任意其它型別容器一樣,它能夠存放各種型別的物件。可以簡單的認為,向量是乙個能夠存放任意型別的動態陣列。容器特性 1.順序序列 順序容器中的元素按照嚴格的線性順序排序。可以通過元素在序列中的位置訪問對應的元...