2016-09-20 32 views
1

所以我正在尋求解決下面提到的問題,我遇到了問題和實際尋找什麼,因爲我無法用簡單的術語來描述問題。我希望有人能夠闡明我應該採取的正確算法或路徑來解決它。我應該使用什麼類型的算法?

問題(簡化):

因此可以說我有一個多人對象。

Person1 
Person2 
Person3 

現在可以說我有6個插槽

Slot1 
Slot2 
Slot3 
Slot4 
Slot5 
Slot6 

每個人都有與之相關聯的規則,如

  • PERSON1不能使用插槽與一個奇怪的數字,且必須在3 不同的插槽。
  • Person2只能進入從2向上的插槽並且必須在2個插槽中
  • Person3只能進入1個素數插槽。

所以我們最終

Slot1 - Person3 
Slot2 - Person1 
Slot3 - Person2 
Slot4 - Person1 
Slot5 - Person2 
Slot6 - Person1 

我知道這將需要使用AI /機器學習的,我也做了一些研究的領域,但我無法找到我應該使用哪種算法的像甚至如何搜索這個問題。我發現以某種方式做這件事的唯一方法是通過迴歸樹,但在我看來,這種方式似乎是錯誤的路徑。

注意:我將使用c#來解決這個問題,並希望像Encog這樣的框架。

+0

您正在嘗試解決的問題屬於一系列命名爲約束滿足問題(CSP)的問題。請參閱: https://en.wikipedia.org/wiki/Constraint_satisfaction_problem – Radek

+0

感謝您對這個問題的廣泛支持抱歉的信息,但我試圖保持簡單的例子,因爲我只需要該區域來查看我必須研究它的最後一年項目建議 – Ronan

回答

1

其實這個問題是標準的離散優化問題。你可能想看看coursera discrete optimization course。 在它的第一週,它有一個名爲簡易拼圖的工場。它給你一個類似的問題,並說明如何在他們的平臺迷你鋅解決它。

在您瞭解瞭如何解決這類問題後,您可能需要從List of optimization software開始查看c#解決方案。

+0

命名問題很有幫助,但這在技術上並不是問題的答案。 –

+0

這是真的,但問題是非常普遍的。 –

+0

找到我需要註冊墨爾本大學課程以查看更多...您需要總結外部鏈接,否則就像@SamDufel所說的,您所做的一切都是爲了解決問題。請分享一個解決方案。 –

2

其實我認爲你可以用Maximum Matching做一個簡單的修改來解決這個問題。在標準最大匹配中,每個節點只與另一個節點匹配,但這裏一個人可以有多個匹配。通過創建Person的多個實例,可以將此問題簡化爲最大匹配。例如:

PERSON1不能使用的狹槽具有奇數個,且必須在3個 不同時隙。

爲Person1創建3個節點並將它們連接到偶數插槽。

人2只能進入槽2並必須在2個插槽

創建PERSON2的2個節點,並與大於2的號碼連接到插槽。

人3只能進入1個素數插槽。

爲Person3創建1個節點並將其連接到slot1,slot2,slot3和slot5。

在結果圖上執行最大匹配,您將找到答案。

0

Person和Slot之間的配對是一個調度問題,需要知識來解決它。這些知識在規則中有所描述,例如「Person1不能使用奇數的時隙,並且必須在3個不同的時隙中」。解決問題的算法使用規則和給定的資源(三人六時隙)來生成所有可能的解決方案。 Computerscience的任務是將知識形式化爲機器可讀代碼。有很多編程語言,例如PDDL,Prolog或面向對象的語言。在ICAPS大會上討論的經典的「人工智能規劃和調度」中,PDDL語言將是建模知識的首選。在大多數情況下,求解給定域的算法本身是回溯,monte-carlo-tree-search或簡單的蠻力。這就是所謂的「解決問題作爲搜索」。

相關問題