這篇文章介紹兩種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
x1ax2
ax2
bx2
cx3
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.順序序列 順序容器中的元素按照嚴格的線性順序排序。可以通過元素在序列中的位置訪問對應的元...