簡體   English   中英

將節點分配給圖形的算法設計

[英]Algorithm design to assign nodes to graphs

我有一個圖論(也與組合學有關)問題,如下所示,我想知道設計算法來解決它的最佳方法是什么。

給定 6 個節點的 4 個不同的圖(不同,我的意思是不同的結構,例如 STAR、LINE、COMPLETE 等)和 24 個唯一對象,設計一個算法將這些對象分配給這 4 個圖4 次,使得在 4 個分配上的圖上重復的鄰居被最小化 例如,如果 object A 和 B 在一個分配中的 4 個圖之一上是鄰居,那么在最好的情況下,A 和 B 在其他 3 個分配中不會再次成為鄰居。

顯然,這種最小化 go 的程度取決於給定的特定圖結構。 但是我對這里的通用解決方案更感興趣,因此給定任何 4 個圖形結構,算法的結果可以保證這種最小化。

歡迎任何解決此問題的建議/想法,並且一些偽代碼可能足以說明設計。 謝謝你。

表示:

你有 24 個元素,我將這些元素命名為 A 到 X(24 個首字母)。 這些元素中的每一個都將在 4 個圖表中的一個中占有一席之地。 我將為從 1 到 24 的 4 個圖的 24 個節點分配一個數字。

我將通過 24-uple =(xA1,xA2...,xA24) 來識別 A 的 position,例如,如果我想將 A 分配給節點號 8,我會寫 (xa1,Xa2..xa24) = (0,0,0,0,0,0,0,1,0,0...0),其中 1 在 position 8 上。

我們可以說 A =(xa1,...xa24)

e1...e24 是單位向量 (1,0...0) 到 (0,0...1)

關於運算符'.'的注意事項:

  • A.e1=xa1
  • ...
  • X.e24=Xx24

使用這些符號對 A,...X 有一些限制:

Xii 在 {0,1} 並且

和(Xai)=1...和(Xxi)=1

和(Xa1,xb1,...Xx1)=1... 和(Xa24,Xb24,...Xx24)=1

因為一個元素只能分配給一個節點。

我將通過定義每個節點的鄰居關系來定義一個圖,假設節點 8 有鄰居節點 7 和節點 10

檢查 A 和 B 是否是節點 8 上的鄰居,例如我 nedd:

A.e8=1 和 B.e7 或 B.e10 =1 那么我只需要 A.e8*(B.e7+B.e10)==1

在 function isNeighborInGraphs(A,B) 中,我對每個節點進行測試,並根據鄰域得到一個或零。

注釋:

  • 6 個節點的 4 個圖,每個元素的 position 由從 1 到 24 的 integer 定義。(第一個圖為 1 到 6,等等...)
  • e1...e24 是單位向量 (1,0,0...0) 到 (0,0...1)
  • 設 A, B...X 為 N 個元素。

A=(0,0...,1,...,0)=(xa1,xa2...xa24)

乙=...

...

X=(0,0...,1,...,0)

  • 圖表說明:

IsNeigborInGraphs(A,B)=A.e1*B.e2+... //如果1和2是一個圖中的鄰居,例如

  • State系統:

L(A)=[B,B,C,E,G...] // A的鄰居列表(可以重復)

actualise(L(A)):
for element in [B,X]
if IsNeigbotInGraphs(A,Element)
L(A).append(Element)
endIf
endfor
  • 目標函數

N(A)=len(L(A))+Sum(IsneigborInGraph(A,i),i in L(A))

...

N(X)=...

算法描述

  1. 從初始 position A=e1... X=e24 開始
  2. 實現 L(A),L(B)... L(X)
  3. 解決這個問題(使用求解器,例如ampl會起作用,因為它是一個非線性優化問題):

物鏡 function

min(總和(N(Z),Z=A 到 X)

約束:

和(Xai)=1...和(Xxi)=1

和(Xa1,xb1,...Xx1)=1... 和(Xa24,Xb24,...Xx24)=1

你得到最好的解決方案

4.重復步驟 2 和 3,再重復 3 次。

如果所有四個圖都是K_6 ,那么您可以做的最好的事情是選擇 24 個對象的 4 個集合划分為 4 個集合,每個集合的基數為 6,這樣任何兩個集合的成對交集的基數最多為 2。您可以通過選擇在集分區的 Hasse 圖中相距最大的集分區,具有由細化給出的偏序。 一般情況要困難得多,但也許您仍然可以從解決方案的這種粗略近似開始,然后巧妙地在四個分配中分配哪個頂點 object。

假設您不想循環所有組合並每次都計算總和並選擇最低的,您可以實現最小問題(根據您的約束使用線性規划求解器,即 symplex 算法引擎或非線性求解器來解決,在時間方面更難談論)對變量的限制(24)取決於路徑的形狀。 您還可以使用 LINGO/LINDO 等免費軟件快速創建決策理論 model 並測試其正確性(盡管您需要決策理論概念)

如果這與現實世界有任何關系,那么您不太可能絕對必須有一個真正最低限度的解決方案。 接近最小值應該足夠了,對吧? 如果是這樣,您可以反復隨機分配 4 個作業並檢查結果,直到時間用完或有足夠好的解決方案或似乎已停止改進您的最佳解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM