2017-06-29 107 views
-2

我目前正在研究調度pub-crawling的算法(雖然它可以更通用)。 這就是所謂:今天的算法挑戰

  • 有一定數量的團隊和酒吧,團隊 從未超過酒吧
  • 隊必須訪問所有的酒吧
  • 隊不能量的量在同一個酒吧
  • 整個過程是暫時的;團隊在Pub-crawl的開始和結束時間之間的相同離散時間間隔內位於酒吧中。

我在想旅行商問題和一些名冊計劃之間的混合,但現在我試圖用蠻力來實現它,因爲我無法計算如何實現提到的混合。我希望得到的結果看起來是這樣:

Expected result

蠻力的工作,但它只是太慢了。當所有的行和列都是唯一的時候,就可以找到解決方案 - 就像Sudoku一樣。然後可以將這些數字映射到特定酒吧的時間間隔/到達和離開時間。 我正在尋找想法和建議,但實施也非常受歡迎(C#)。

目前我暴力破解這樣做:

  • 初始化與儘可能多的行作爲一個團隊和列條二維數組。這些值也被初始化爲1列。
  • 檢查數組是否是解決方案,如果不是:將數組隨機播放並再次檢查。

最後,我需要提到的是,當這可以做得足夠快時,會引入更多層的複雜性。爲特定團隊選擇的路線必須是最佳的,這意味着所有團隊都必須針對旅行時間採取最優化的路線 - 爲此,我將使用Google Maps API。我猜如果這個算法的第一部分是相對較快的距離優化可以是強制性的。

期待創意解決方案!

+0

對於我來說恐怕太寬了。 – DavidG

+0

「隨機排列數組並再次檢查」=>隨機性無助於迭代檢查所有可能的組合。它引入了重複檢查同一陣列的可能性;並且不管是以邏輯順序對它們進行迭代還是對其進行隨機迭代,都沒有增加找到正確數組的機會。所以使用RNG會增加一個缺點,而不會增加好處。如果我是你,我不會那樣做。 – Flater

+1

你爲什麼不簡單地在每個時間步上將職業轉移一次?就像在你的桌子上一樣?我沒有看到任何會禁止的限制。也就是說,如果我忽略了某些事情,一種解決方案雖然可能不是最好的解決方案,但是將其轉化爲線性優化問題(應該是可能的),然後使用一些已有的解決方案。編輯:也就是說,線性*整數*的問題當然 – Aziuth

回答

0

好像你應該先解決最佳路線問題。如果你這樣做,那麼你可以在解決方案的第一個酒吧,第二個酒吧的第二個團隊等開始第一個團隊,就像你在你的例子中做的那樣。

因此,如果您確定通過酒吧的最佳(或幾乎最佳)路徑是B4,B3,B1,B2,B6,B5,那麼您只需重新排列表頭中酒吧的順序以匹配。所以在第一段時間內,團隊1會訪問第4欄等。