2013-03-05 88 views
1

假設我們有3個人,Alice,Bob和Charlie。資源共享/交易算法

可以說,他們每個人都有一個資源,Aplles,Bannanas和椰子。

他們每個人都有3資源。

該算法的目標是進行1-1次交易,使得它們中的每一個最終以我們3個資源中的每一個結束。這些交易的清單是我想要獲得的。

理想情況下,我想知道如何解決這個問題。但我願意解決這類問題的名稱,或者類似於我可以研究並從中獲得靈感的問題。

我正在處理的問題將有大約600個對象,每個人有1000人,每個人有一個隨機數量/類型的起始資源(假設有足夠的資源來滿足我們的最終結果),所以理想情況下提供的解決方案對於這樣的規模是可行的。但我會盡我所能,我只需要某種起點。

+1

這不就是今年諾貝爾經濟學獎的主題嗎? :) – 2013-03-05 22:14:44

回答

1

ElKamina和Tyler Durden的答案很體面,但他們似乎沒有考慮到Kuriso想要進行1-1交易,人們可能有多種商品和多種商品單位。我有一個天真的解決方案。

我覺得原來的例子是有點過於簡單,所以讓我們再看一個:

c1 c2 c3 c4 
A 5 0 1 0 
B 0 1 0 1 
C 0 6 2 0 

其中A,B,C是人,C1,C2,C3,C4的商品。

首先,讓我們來計算理想的分佈,這是很容易做到:對每一種商品,通過的人數劃分的東西的總和,四捨五入,和每個人都得到的是:

c1 c2 c3 c4 
A 1 2 1 0 
B 1 2 1 0 
C 1 2 1 0 

現在讓我們來定義一個WANT函數,表示人X需要進入理想位置多少東西c:WANT(X,c)= IDEAL(c) - Xc。

c1 c2 c3 c4 sum 
A -4 2 0 0 -2 
B 1 1 1 0 3 
C 1 -4 -1 0 -4 

讓我們列出按他們的需求總和排序的人員。讓我們把最富有的人,最低要求的人,在這種情況下,C,讓我們試着滿足他的需要,把他與最想提供他最想要的商品的人相匹配。如果他們可以交易,很好,如果沒有,繼續直到我們找到一場比賽(最終保證一場比賽)。在這個例子中,C需要c1;提供最多c1的是A,對商品進行迭代,我們發現A需要c2,C有剩餘c2,所以他們交換它們。更新他們在列表中的位置,或者如果他們不再有任何需要,請將其刪除。迭代這個,直到沒有人需要。這將不會產生正確的平均分配,但是可以達到1等於1的交易。

這確實是一個天真的解決方案,啓發式說明最富有的人最有機會提供東西來換取他需要的商品。複雜度很高,但對於有序列表,它應該可以管理您指定的數字。

0

要重申這一點,讓我們假設你已經設置列表如下:

{1,1,1}
{2,2,2}
{3,3,3}

並且要直到你有套這樣來交換從不同組的元素:

{1,2,3}
{1,2,3}
{1,2,3}

現在,您可能會注意到,如果我們將這些列表視爲單個矩陣,那麼一個矩陣與另一個矩陣相反。您可以通過交換1-2-3對角線來執行此反演。

因此,列表1中的項目2與第2行中的項目2交換,列表1中的項目3與列表3中的項目1交換,並且最終列表2中的項目3與列表3中的項目2交換。

總結:通過交換對角線進行矩陣求逆。

+1

第二個矩陣實際上是第一個矩陣的轉置,而不是倒向。 – 2013-03-06 01:44:40

1

假設您有類型1,...,xn資源類型n的x1資源總數。

假設你的K人,他們每個人都有(或需要分別與Y1,Y2,...,YK資源告終。

現在,選擇一個人,我和他分配是最資源普遍。一旦轉讓完成後,遞減對應XJ S(即,如果資源j被分配給我,減量XJ)。

不斷重複,直到所有的資源分配。

這是最分配東西的方式它假設你不關心交易順序,但最終結果本身。