這是我在這些論壇上的第一篇文章,在此先感謝所有回覆。組合優化與相互依存的變量
我正在開發一個java應用程序,其中我遇到了我認爲被稱爲「組合優化問題」的內容。我只有基本的數學技能,所以試圖調查這樣一個問題的設置迄今尚未取得豐碩成果。
基本上,我想要做的是編程找到變量v1,v2,v3等更大集合N的最優子集n的最有效方法。變量都有一個確定的值/分數到取決於可能包括或不包含在子集中的某些其他變量的值/分數。
我有興趣選擇給出最大總值/分數的子集。
因此,例如,全組N個由以下變量的,並具有以下確定值以及關係到其它變量:
v1 8 { v2 ; v8 }
v2 6 { v1 ; v4 }
v3 9 { }
v4 7 { v2 ; v5 ; v8 }
v5 6 { v4 ; v10 }
v6 8 { v7 }
v7 5 { v6 }
v8 9 { v1 ; v4 }
v9 6 { }
v10 7 { v5 }
有一個相對於一種或多種其它選擇的可變意味着總價值將有一定的「起飛」 - 爲了這個例子,讓我們說每個關係的一個。 因此在選擇前五個變量作爲一個子集將給予30,總價值:
v1 8 { v2 ; v8 } = 8 - 1 = 7
v2 6 { v1 ; v4 } = 6 - 2 = 4
v3 9 { } = 9 - 0 = 9
v4 7 { v2 ; v5 ; v8 } = 7 - 2 = 5
v5 6 { v4 ; v10 } = 6 - 1 = 5
這當然不是這樣的小套的問題,但我目前面臨的套10K的100K和子集 - 用目前的算法,我的電腦在3天內計算出瞭解決方案!
我不一定需要解決這個問題的代碼,而是最好的數學方法來做到這一點(如果有的話)!請記住,我很難理解高於基本水平的數學符號。
再次,在此先感謝所有回覆!
花了我相當一段時間,但我現在試圖掌握在這裏提到的幾個解決方案。我最終結束了模擬退火。不知道這是否是正確的/最佳的解決方案,但至少它很容易理解和實施 - 而且它似乎表現得相當不錯。感謝所有的建議! –