2017-04-14 60 views
1

進出口尋找該分配n個學生米課程,每個學生定義了三個優先算法和每門課程都有一個分鐘最大數和也是一個優化計數介於最小值和最大值之間。課程分配學生的三項重點工作

我至今是:

  • 課程數組
  • 學生與屬性的數組,他們的三個重點

1)洗牌課程; shuffle students

2)讓學生循環並暫時將其分配到他們的第一選擇。
如果他們的第一選擇是全部的,比如說10個學生,我們需要確定11個學生中的哪個要放棄。 由於我們沒有課程的學生優先級找到最弱的學生放棄,我們希望找到一個優先級爲2的學生開放插槽

這可以重做優先級2和3,但在它並不總是得到最好的結果..

+0

似乎你有兩個相互衝突的目標(學生的優先次序和最佳點擊次數)。你需要正式確定這一點。此外,您需要定義使用中的損失。常見的是絕對差分和(l1)和平方和差分(l2)。兩者會有很大的不同。 – sascha

+0

學生的優先考慮絕對是重要的一部分。最佳課程數是相當可選的。最後,算法應該找到一個解決方案,將所有學生的偏差儘可能減少到最低程度 –

+0

這是不夠的。兩種懲罰都達到了這一點,但損失是不同的。閱讀關於損失函數及其影響的一些基本知識。 – sascha

回答

0

最接近的類似問題可能是stable marriage problemhospital/resident matching problem

您可能正在尋找最佳解決方案,這意味着,在給定分配的情況下,學生和課程都不會選擇其他任務(學生=>課程)。

+0

恰好在我的情況下,課程沒有偏好,只有學生。我研究了穩定的婚姻問題,但我們有兩個同樣大小的集合。隨着課程有點不同,因爲我們有最小,最大和最佳 –

0

如果您創建變量Xij,其中Xij = 1,如果學生i被分配到課程j,那麼您可以將約束記錄爲線性等式和不等式:0 < = Xij < = 1,SUM_j Xij =每個學生只能分配一門課程,分< = SUM_i Xij < =最大 - 每門課程有最少和最多學生人數。學生的快樂總和是SUM_ij Xij Pij,其中Pij可能是3,2,1或0,這取決於課程j是學生i的1,2,3或其他選擇。

然後,你使用線性規劃來最大化學生的幸福感。如果你遵循通過https://en.wikipedia.org/wiki/Integer_programming#Using_total_unimodularityhttps://en.wikipedia.org/wiki/Unimodular_matrix#Common_totally_unimodular_matrices我想你可以假設得到的溶液將整數值爲Xij,因此它必須是0或1

試圖尋找解決方案,其中每門課程已接近其最佳規模,我建議你也嘗試找到解決辦法,讓你減少最大值,並增加每道菜的最小值,使它們接近最佳大小。舉例來說,你可以在補貼s上找到二進制排序,找到解決方案的最小值s,並且爲每個課程選擇的最小值和最大值都不會超過該課程的最優值。