簡體   English   中英

無向圖

[英]Undirected Graphs

我有一個嘗試使用Java進行的分配,但是我對如何設置/下圖的節點感到困惑。 基本上,它是筆式繪圖儀問題,或更普遍地稱為旅行商問題。 我的以下輸入是:

Line between 4 1 and 4 4    
Line between 4 4 and 4 7    
Line between 2 6 and 4 4   
Line between 4 4 and 6 2  
Line between 6 6 and 4 4   
Line between 2 2 and 4 4   

我的輸出結果為:

<n> nodes explored
cost = 24.61
Move from 0 0 to 2 2
Draw from 2 2 to 4 4
Draw from 4 4 to 6 6
Move from 6 6 to 4 7
Draw from 4 7 to 4 4
Draw from 4 4 to 4 1
Move from 4 1 to 6 2
Draw from 6 2 to 4 4
Draw from 4 4 to 2 6

假設紙的左下角是您的起點(0,0),它在坐標中上升,每個坐標是一個節點,並且我將如何確定何時移動和畫一條線。 我知道我應該使用帶有A *的無向圖,但對於哪些是節點(頂點)以及如何確定何時移動以及何時畫線,我還是很困惑,有人可以給我一些建議嗎?

編輯:請注意,是指在整個搜索過程中探索的節點數量/數量。

要使用A *,首先需要一個允許的啟發式函數 [說明此答案末尾附有的內容]。

問題以圖表形式出現在A:*
將G =(V,E)定義為圖,這樣:
V={all possible drawings prefixes} [即每個可能的V={all possible drawings prefixes}所有可能的“快照”]。 注意,您不應該將此圖保存在內存中,而要使用next()創建它,稍后將進行說明。 [請注意,實際上,對於每種狀態,您實際上只需要存儲(1)當前筆在哪里(2)已經繪制的行]
E={all possible changes from one 'snap shot' to another}
您還需要w:E->R [權重函數],它將簡單地是: w(point1,point2)=euclidian_distance(point1,point2)

您還應該定義next:V->P(V)next(v)={all snap shots you can get from v, using exactly one move/draw
最后,您還應該定義F :所有“結束”狀態。 F={all the prefixes which all the lines are drawn}

如何運行A *:
從您的筆位於(0,0)的快照開始,並且沒有畫線[這是初始狀態],一直進行到找到最終狀態之一為止。 當您這樣做時,如果您的試探法是有效的,則可以確保您獲得了優化的解決方案,因為A *是可接受的且已優化

(*) 允許的啟發式功能:
h*(v)=real distance to target頂點v的h*(v)=real distance to target
如果h(v)<=h*(v)中每個v的h(v)<=h*(v) ,則啟發式函數h:V-> R是允許的

您真正的挑戰
TSP的難點是找到一個允許的h 這很困難,因為您不知道最短的路徑是什么,並且如果不允許使用啟發式函數,則不能保證找到的解決方案將得到優化。

建議:
您可能想要使用任何時間算法 ,當我執行類似的操作時,[使用多個代理解決TSP]我也使用了A *,但是從一個無效的啟發式算法開始,然后迭代地減少它,所以如果我有足夠的時間,我找到了最佳解決方案,否則,我找到了可以找到的最佳解決方案。

由於您要解決的問題是NP Hard ,因此沒有有效的方法來解決旅行推銷員問題。 您要做的第一件事是將所有頂點對(從和到)存儲在ArrayList中,並根據需要使用它們。

您何時應該搬家:
每當您在某個點上並且ArrayList中沒有起始節點時,就必須選擇數組中的下一個元素並移至該位置。

什么時候應該繪制:
抽獎可能發生在兩種情況下。 移動到特定點后,將進行抽獎。 當線段的終點作為起點出現在ArrayList中時,也會發生繪制。

每次繪制后,都應從ArrayList中刪除該特定的線段。 當您的存儲桶中沒有其他東西時,您將停止程序。

暫無
暫無

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

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