---
# System prepended metadata

title: '**An efficient algorithm for task allocation with the budget constraint**'

---

###### 回到首頁: [:link:][HomePage]

# **An efficient algorithm for task allocation with the budget constraint**
### [LLV+22](https://www.dropbox.com/s/quhysuvfpryigis/LLV%2B22.pdf?dl=0)

## Section 1 : Introduction

考慮了預算 (budget) 的演算法，用來解決 task allocation problem。

---

## Section 2 : Related works

暫略

---

## Section 3 : Problem description

$T = \{t_1,...,t_n\}$ 
* 表示 **n** 個 **tasks**

$A = \{a_1,...,a_m\}$ 
* 表示 **m** 個 **agents**
* 每個 **agent** $a_i$ 都有一個 $p_i$ 代表 **cost**

$S = \{C_1,...,C_n\}$　
* 表示 **task i** 被 assign 給哪個 **agent** (coalition structure)
* 每個 agent 最多只能參加一個 coalition 
* $S_{a_i}$ 代表 agent $a_i$ 可以加入的 set of coalition 

以下假設：
* 不管這個 agent 做了哪些工作，他的 **cost** 都是固定的 $p_i$
* agent 不做工作就不會有 cost 
* 每個 agent 都願意為此系統做出貢獻

---
### Task and system utilities

$U_j(C_j)$ 
* 表示 $t_j$ 的 task **utility**

$\displaystyle\Phi(S) = \sum_{C_j\in S}U_j(C_j)$ 
$\displaystyle\text{EMD}^i_j = \sum_{l\in\mathcal{L}}||P_i(y = l) - P_j(y = l)||$
* 表示整個系統的 **utility** (加總所有 task 的 utility)

---
### Marginal contribution

$\sigma_j(a_i,C_j) = U_j(C_j) - U_j(C_j\setminus\{a_i\})$ 
* 表示 **agent** $a_i$ (**加入後**的 utility) 扣掉 (**加入前**的 utility)

---
### Cost

$p_j(C_j) = \displaystyle\sum_{a_i\in C_j}p_i$ 
* 表示 **coalition** $C_j$ 解決 **task** $t_j$ 所花費的 cost
* 因為不同的 agent 有不同的 cost，task 的 cost 只會跟組成的 agent 有關

$P(S) = \displaystyle\sum_{C_j\in S}p_j(C_j)$
* 表示 **system cost**，也就是把所有 task 的 cost 作加總

---
### Objective

$S^* = \displaystyle \arg \max_{S \in O} \Phi(S),\ and\  P(S^*) \le B.$

* 目標為找出能**最大化 utility 並且不超過 budget $B$** 的 allocation solution S*
* O 為所有可能的 allocation solutions

---
### Scenario

![](https://i.imgur.com/Hm8jJD7.png)

* 上圖是災難救援的示意圖，$t_1$, $t_2$ 為2種不同的**災害現場**，$a_1$~$a_5$ 是5種不同的**救難工具**

![](https://i.imgur.com/jfVoFRz.png)

* 每一種 task (災害現場) 都有各自所需要的救援資源
* 這邊的 $f_1$ 代表**醫療資源**，$f_2$ 代表**吊掛機械**
* 此圖表示 $t_1$ 需要醫療資源及吊掛機械，而 $t_2$ 只需要醫療資源

![](https://i.imgur.com/Gp2pvFY.png)
* 每一個 agent (救援器具) 都有自己能提供的能力，以及花費
* $a_5$ 表示可提供 10 點的醫療能力，以及 8 點的吊掛能力，並且花費為 9 點

* $e^l_i$ 表示 $a_i$ 可以提供多少資源在 $f_l$，ex: $e^1_5$ = 10，$e^2_5$ = 8

$U_j(C_j) = \displaystyle\sum_{f_l\in F_{t_j}}\mathop{max}_{a_i \in C_j } e^l_i$
* 這篇的 utility function 被設定為，加總 Coalition 中，各項所需救援資源中，能提供最高資源的 agent 的 $e^l_i$
* $C_0$ 代表 **dummy coalition**，也就是什麼 task 都沒有去幫忙
* 不管 **dummy coalition** 的成員組成為何，**dummy task** 的 utility always = 0
* 假設現在的 Coalition structure 為: $C_0 = \{a_1,a_5\}, C_1 = \{a_2,a_4\}, C_2 = \{a_3\}$
* 則 $U_1(\{a_2,a_4\}) = 10 + 3 = 13$ , $U_2(\{a_3\}) = 1$

---

## Section 4 : Game formulation for the task allocation problem

### Payoff 

* 不超過 budget $B$ 限制的 coalition structure 為 valid 的解
* 所有在超過 budget 限制的 coalition 中的 agent ，所得 payoff = 0
* 否則加入 coalition $C_j$ 的 payoff = **marginal contribution**：$\sigma_j(a_i,C_j)$
* 每個 agent 的目標都是要透過**挑選最好的 strategy 來最大化自己的 payoff**
* agent 可以隨時更改自己的 strategy ，從一個 coalition 跳到另一個 coalition，以達到更好的 payoff，直到達到 Nash Equilibrium

---
### **Nash Equilibrium**
定義：在 coalition structure S 中，**沒有 agent 可以透過加入其他 coalition 來達到更好的 payoff**

---
### **Movement Value**
${mv}^i_{j\rightarrow h } = \sigma_h(a_i,C^\prime_h) - \sigma_j(a_i,C_j), C^\prime_h = C_h \cup \{a_i\}$

* agent $a_i$ 從 $C_j$ 移動到 $C_h$ (移過去後會變成 $C^\prime_h$ )之間的 **payoff (marginal contribution)** 之差
* 如果 j = h，理所當然 ${mv}^i_{j\rightarrow h } = 0$
* 如果 agent $a_i$ 從 $C_j$ 移動到 $C_h$ 後，不滿足 budget constraint，則 ${mv}^i_{j\rightarrow h } = 0$
* 假設現在的 Coalition structure 為: $C_0 = \{a_1,a_5\}, C_1 = \{a_2,a_4\}, C_2 = \{a_3\}$
* 則 ${mv}^2_{1\rightarrow 2 }$ = $\sigma_2(a_2,C^\prime_2) - \sigma_1(a_2,C_1) = (10 - 1) - (13 - 11) = 9 - 2 = 7$
* 因為 agent $a_i$ 的移動，coalition $C_j$ 和 $C_h$ 的成員會因此改變，這也代表 $C_j$ 和 $C_h$ 成員的 marginal contribution 也會因此改變

---
![](https://i.imgur.com/Gp2pvFY.png)

考慮一個 Nash Equilibrium solution $S：C_0 = \{a_1,a_5\}, C_1 = \{a_2,a_3\}, C_2 = \{a_4\}$
* 在此解中，所有 agent 的 movement value 都 $\le 0$
* $a_2$：${mv}^2_{1\rightarrow 0 } = -9,\ {mv}^2_{1\rightarrow 1 } =\ \ 0\ ,\ {mv}^2_{1\rightarrow 2} = -7$
* $a_3$：${mv}^3_{1\rightarrow 0 } = -5,\ {mv}^3_{1\rightarrow 1 } =\ \ 0\ ,\ {mv}^3_{1\rightarrow 2} = -5$
* $a_4$：${mv}^4_{2\rightarrow 0 } = -8,\ {mv}^4_{2\rightarrow 1 } = -8,\ {mv}^4_{2\rightarrow 2} = 0$
* $a_1$ 和 $a_5$ 因為 budget 限制，沒有辦法再被 assign 到任何一個 coalition ，因此他們的 movement value = 0
* 此時系統的 utility $\phi(S) = 17 + 8 = 25$ 為 optimal，cost $P(S) = 4 + 2 + 3 = 9$
* **optimal solution 必為 NE，反過來不成立**

---
### Feasible Movement

* 不違反 budget 限制的 movement 即為 feasible movement
---

## Section 5 : The proposed CF algorithm

### Cost-Efficiency (CP 值)

![](https://i.imgur.com/HpMSeJ8.png)

* 概念同 CP 值
* j $=$ 0 代表 agent 一開始從 dummy coalition 出發， CP 值為 movement value / cost
* j $\ne$ 0 代表 agent 已經被 assign 過， CP 值為 movement value
* 其他代表 agent 還沒被 assign，而且是 unfeasible movement，則 CP 值為 0
---
### CF Algorithm

![](https://i.imgur.com/3G9TDWZ.png)

分成三個階段：

**1. Calculation**
* 算出所有 agent $a_i$ 從目前的 coalition $j$ 到其他可到達的 coalition $h$ 的 CP 值 ${ce}^i_{j\rightarrow h}$

**2. Selection**
* 挑選所有 CP 值中，最大的那個 ${ce}^{i^*}_{S(i^*)\rightarrow h^*}$
* 最大的 ${ce}^{i^*}_{S(i^*)\rightarrow h^*} <= 0$ ：表示系統到達 NE

**3. Assignment**
* 最大的 ${ce}^{i^*}_{S(i^*)\rightarrow h^*} > 0$ ：表示系統還有進步空間，agent $a_i^*$ 會從 $C_{j^*}(j^*=S(i^*))$ 轉移到 $C_{h^*}$
    * 這意味著 ${mv}^{i^*}_{S(i^*)\rightarrow h^* }$ 必 $\ge 0$，且必為 feasible
* 更新 coalition 成員、以及系統剩餘 budget

---
### Efficient update of cost efficiency
因為並不是所有 agent 的 movement value 在每回合都會變動，為了節省計算資源，演算法只更改：

1. 因為只有 $C_{j^*}$ 和 $C_{h^*}$ 的成員改變，所以更新此兩 coalition 所有成員到其他 coalition 之 CP 值
2. 其他 agent 到 $C_{j^*}$ 和 $C_{h^*}$ 的 CP 值也需更新
3. 所有加入後會讓 budget 爆掉的 agent，其 CP 值都 $= 0$

---
### Illustration of CF Algorithm
![](https://i.imgur.com/Gp2pvFY.png)
![](https://i.imgur.com/AME6POj.png)

* 一開始 $S：C_0 = \{a_1,a_2,a_3,a_4,a_5\}\ ,\ C_1 = \{\}\ ,\ C_2 = \{\}\ , P(S) = 0\ , \phi(S) = 0$
(a.) $S：C_0 = \{a_1,a_2,a_4,a_5\}\ ,\ C_1 = \{a_3\}\ ,\ C_2 = \{\}\ , P(S) = 2\ ,\ \phi(S) = 8$
(b.) $S：C_0 = \{a_1,a_2,a_5\}\ ,\ C_1 = \{a_3\}\ ,\ C_2 = \{a_4\}\ , P(S) = 5\ ,\ \phi(S) = 16$
(c.) $S：C_0 = \{a_1,a_5\}\ ,\ C_1 = \{a_2,a_3\}\ ,\ C_2 = \{a_4\}\ , P(S) = 9\ ,\ \phi(S) = 25$
(d.) 所有 CP 值都 $\le 0$ ，達到 NE

---
### GreedyNE* algorithm
* 跟 CF 唯一的差別在於 GreedyNE* 並沒有考慮 agent 的 cost ，也就是不算 CP 值，而是計算 movement value
* 會在後面與 CF 演算法做比較

---
## Section 6 : Properties of CF algorithm

### Flexibility to perform local search

* 如果沒有事先 input 初始的 coalition structure， CF 會預設所有 agent 都在 dummy coalition
* 如果有初始的 coalition structure， CF 會在每一回合試圖增加總體 utility，直到系統達到 NE，或是時間上限

---
### Solution quality 

* 只要不提早中斷程式，CF 回傳的 coalition structure 必為 NE (證明略)
* 只要初始的 input 是 valid 的， CF 回傳的 coalition structure 也必為 valid (證明略)

---
### Monotonicity
* CF 是一個 anytime monotonic 的 algorithm (證明略)
* anytime monotonic
    * 如果 CF 在第 $l$ 回合被終止，則形成的 coalition structure $S^l$ 其 system utility 必 $\ge$ 在更早第 $k$ 回合形成的 coalition structure $S^k$ 之 system utility，$(l>k)$
---
### Complexity
* m agents and n tasks
* CF 每一回合的 worst case 為 $O(m\cdot n)$
    * 因為每回合最多要計算 $m\cdot (n+1)$ 個 CP 值 ($C_0 \sim C_n$ 有 n+1 個 coalition)
---
## Section 7 : Experiments and evaluation

### Benchmark algorithms
* GreedyNE*
* GA
* Random

### Experimental results
* 跑 100 次取平均
* 時間限制 1000 秒
* 20 種 capabilities
* 隨機生成每個 task 和 agent 的 capabilities [0,20]
* agent 在每個 capability 的能力由 0~10 隨機生成
* graph density $d = |T|/2$
    * 用來表示每個 agent 可以選擇/執行的 task 數量，或者是說可以加入的 coalition 數量
* cost 跟 agent 的能力成正比，並且控制在 [1,20]
* agent $|A| = 3 \cdot |T|$


#### General performance
* budget $B = 5 \cdot |T|$
* task $|T| \in \{100,200,...,1000\}$

![](https://i.imgur.com/yA3q2B8.png)

* 所有的 benchmark 的結果都比 Rand 好
* 在 task = 1000 時， CF 的 utility 達到 60000，而其他 benchmark都未達 CF 的 2/3
* GA 要跑很久，比其他 benchmark 都要久
* GA-mid 是用 GA 跑得跟 CF 一樣時間後停下來的結果

![](https://i.imgur.com/z85wbfR.png)

* 當 task 比較小，CF 和 GA 的 utiility 都很接近 optimal
* 當 task 越來越大，CF 開始表現得比 GA 還好

#### Different variations of agent cost
* $|T| = 100, B = 5\cdot |T|, v\in \{0,0.1,...,1\}$
![](https://i.imgur.com/8pa8bks.png)


* variation 由小到大代表 agent 的 cost 跟自身能力的程度從緊密相關到隨機
* 因為 CF 會考慮 CP值 ，所以當 variation 越大， CF 和 GA、GreedyNE* 之間的差距會越來越明顯

#### Different budget states
* $|T| = 100, |A| = 300, v = 0.3$, budget rate = $B/|T|$
![](https://i.imgur.com/g9GvSAr.png)

* budget 越大代表系統越寬裕
* 系統 budget 越緊繃， CF 與其他 benchmark 的差距就越大，因為 CF 有考慮 CP 值

---
[HomePage]: https://hackmd.io/V22Sk3kRS8-sP2QUWPnjww#-%E5%9C%98%E5%92%AA%E5%A0%B1%E5%91%8A