我一直在挖掘,看看以前是否有類似的東西,但是沒有看到鏡像條件。爲了讓問題更容易理解,我將在填補棒球隊名單的情況下應用它。給定的名冊結構組織如下:C,1B,2B,3B,SS,2B/SS(或者),1B/3B,OF,OF,OF,UT(可以是任何位置)解決條件填充益智的置換/算法
每個玩家至少有一個非替補位置(允許多個位置的位置),他們符合資格並且在許多情況下不止一個(即可以玩1B和OF等的玩家等)。 )。假設你是一個團隊的經理,這個團隊已經有一些球員,並且你想看看你是否在任何一個位置上有特定球員的空間,或者你是否可以移動一個或多個球員來打開一個位置他有資格。
我最初的嘗試是使用條件排列並在列表中收集每個球員所有可能的唯一「陣容」,在移動到下一個球員之前更新空位。這也是必須的(因爲玩家移動的順序會影響下一位玩家的位置),因此列表中的列表被重新排序,然後再次循環。我仍然認爲這是要走的路,但有一些陷入困境的陷阱。
開始,你認爲是給出循環中的數據是:位置 1.列出可播放器(一個被檢查,如果他能適合)目前在名冊上和 2.列出玩家的玩家正在評估(我目前正在存儲一個列表清單,並使用列表索引作爲播放器的唯一標識符) 3.當前名單打開的職位列表爲
這是證明比我最初預期的更令人頭痛。有一位同事甚至向我建議,我擁有的情況(涉及到更大規模的每個對象的有條件分配)是NP完全的。我確信這不是,因爲一旦一名球員被重新定位在一個被測試的特定陣容中,一旦另一名球員移動了,整個名單就不需要再被迭代。這是多空的,我終於決定打開它的論壇。
感謝任何人都可以提供的幫助。由於限制,我不能發佈部分代碼(其中一些是遺留的)。但是,它正在.NET中進行翻譯(目前是C#)。如果還有其他必要的信息,我會嘗試重寫一些用於發佈的功能的短片。
約瑟夫G.
EDITED 2010年7月24日 非常感謝您的答覆。實際上,我確實使用遺傳算法進行了研究,但最終放棄了這個算法,因爲大量的工作將會導致序數結果的確定變得多餘。測試的最終目的是確定事實上是否存在返回肯定的情景。沒有必要確定每個工作解決方案的相對優勢。
我很欣賞關於可能不熟悉我提出問題的背景的反饋。實際的模型是在多個特定於平臺的構建服務器中分發構建命令。它是可訪問的,但我不想深入瞭解爲什麼某些構建任務只能在某些系統上執行,並且爲什麼某些系統只能執行某些類型的構建命令。
看來你已經得到了我所呈現的內容的要點,但是這裏有一個不太具體的模型。在列表的有序陣列中存在一組離散位置(我將這些稱爲「位置」):
((2),(2),(3),(4),( (5),(6),(4,6),(3,5),(7),(7),(7),(7),(7),(2,3,4,5,6, 7))
此外,還有一個無序的列表數組(我稱之爲「員工」),如果其數組有一個與有序列表相同的成員,則它只能佔用其中一個插槽它將被分配。在初始分配完成後,如果有其他員工出現,我需要確定他是否可以填補其中一個未決職位,如果不是,可以重新安排當前員工以允許其中一個職位可以填補被提供。
蠻力是我想要避免的,因爲在40-50個物體的數量級上(很快會增加),單個測量在運行時計算將會非常昂貴。
您可能要考慮使用棒球之外的另一個示例。大多數不是在美國出生的人可能不熟悉這項運動。 – Mathias 2010-07-25 00:17:42
那麼你的作業是一對一還是不?你能舉一個更具體的例子嗎? – user382751 2010-07-25 02:54:48
作業是一對一的。分配的對象和分配是離散的,只應用一次。 – 2010-07-25 03:33:52