分配問題與最短路問題

2023-01-26 18:09:04 字數 2090 閱讀 9321

分配問題(指派問題,assignment problem)

這是個給n個人分配n項工作以獲得某個最高總效果的問題。第i個人完成第j項工作需要平均時間。要求給每個人分配一項工作,並要求分配完這些工作,以使完成全部任務的總時間為最小。

該問題可表示如下:

顯然,此問題可看作是運輸問題的特殊情況。可將此問題看作具有n個源和n個匯的問題,每個源有1單位的可獲量,而每個匯有1單位的需要量。從表面看,這問題要求用整數規劃以保證xij只能取0或1。

然而,幸運的是,此問題是運輸問題的特例,因此即使不限制xij取0或1,最優解也將取0或1。如果把婚姻看作分配問題,丹茨證明,整數性質證明一夫一妻會帶來最美滿幸福的生活!顯然,分配問題可以作為線性規劃問題來求解,儘管模型可能很大。

例如,給100人分配100項工作將使所得的模型具有10000個變數。這時,如採用專門演算法效果會更好。時間複雜度為o(n2)的匈牙利演算法便是好選擇,這是由kuhu(1955)提出的。

model:

!7個人,7個工作的分配問題;

sets:

workers/w1..w7/;

jobs/j1..j7/;

links(workers,jobs): cost,volume;

endsets

!目標函式;

min=@sum(links: cost*volume);

!每個工人只能有乙份工作;

@for(workers(i):

@sum(jobs(j): volume(i,j))=1;

);!每份工作只能有乙個工人;

@for(jobs(j):

@sum(workers(i): volume(i,j))=1;

);data:

cost= 6 2 6 7 4 2 5

4 9 5 3 8 5 8

5 2 1 9 7 4 3

7 6 7 3 9 2 7

2 3 9 5 7 2 6

5 5 2 2 8 11 4

9 2 3 12 4 5 10;

enddata

end計算的部分結果

最短路問題

給定n個點pi,i=1,2,…,n,組成集合,集合中任一點pi到另一點pj的距離用cij表示,如果pi到pj沒有弧聯結,則規定cij=+∞,又規定cii=0(1≤i≤n),指定乙個終點pn,要求從pi點出發到pn的最短路線。這裡我們用動態規劃方法來做。用所在的點pi表示狀態,決策集合就是除pi以外的點,選定乙個點pj以後,得到效益cij並轉入新狀態pj,當狀態是pn時,過程停止。

顯然這是乙個不定期多階段決策過程。

定義f(i)是由pi點出發至終點pn的最短路程,由最優化原理可得

這是乙個函式方程,用lingo可以方便的解決。

!最短路問題;

model:

data:

n=10;

enddata

sets:

cities/1..n/: f; !10個城市;

roads(cities,cities)/

1,2 1,3

2,4 2,5 2,6

3,4 3,5 3,6

4,7 4,8

5,7 5,8 5,9

6,8 6,9

7,10

8,10

9,10

/: d, p;

endsets

data:

d=6 5

3 6 9

7 5 11

9 1

8 7 5

4 10

579;enddata

f(n)=0;

@for(cities(i) | i #lt# n:

f(i)=@min(roads(i,j): d(i,j)+f(j));

);!顯然,如果p(i,j)=1,則點i到點n的最短路徑的第一步是i --> j,否則就不是。

由此,我們就可方便的確定出最短路徑;

@for(roads(i,j):

p(i,j)=@if(f(i) #eq# d(i,j)+f(j),1,0)

);end計算的部分結果

最短路徑問題 專題

初中數學中最短路徑問題雖然只是乙個課題學習,但它在中學數學中的地位很重要,是大考 小考 競賽中經常涉及的乙個考點。所以我們要對它有足夠的重視。初中最短路徑問題主要針對軸對稱圖形考慮的。那麼只要涉及軸對稱圖形就有可能產生最短路徑問題。在此之前,我們接觸過的最短距離問題是 1 兩點間直線段最短 2 點到...

最短路線問題

考查知識點 兩點之間線段最短 垂線段最短 點關於線對稱 線段的平移 原型 飲馬問題 造橋選址問題 考的較多的還是 飲馬問題 出題背景變式有角 三角形 菱形 矩形 正方形 梯形 圓 座標軸 拋物線等。解題總思路 找點關於線的對稱點實現 折 轉 直 近兩年出現 三折線 轉 直 等變式問題考查。以下主要對...

動態規劃最短路徑問題

首先,我們來觀察上述演算法。在求b1到e的最短路徑的時候,先求出從c2到e的最短路徑 而在求從b2剄e的最短路徑的時候,又求了一遍從c2剄e的最短路徑。也就是說,從c2到e的最短路徑求了兩遍。同樣可以發現,在求從cl c2剄e的最短路徑的過程中,從dl到e的最短路徑也被求了兩遍。而在整個程式中,從d...