把一個班級的學生按平均分分成幾個小組,要求要求平均分越接近越好,能用什麼方法??


Partition problem


窮舉排列


遇到過類似問題,數模。不過當時的問題沒有明確給出好壞的判斷依據(平均分最接近)。

當時想的是窮舉,反正數據量不大。

現在的話。。。大概拿個求解器直接計算了吧,比如一堆01規劃求解器,弄個矩陣表示每名學生的分組情況,然後加幾個約束。(好像這才是正統的數模解法)

================又看了一遍題目=================

好像分成幾組是不確定的,那就要更加麻煩一些了。

假設有M個學生,用M維的行向量VEC存學生的分數。

既然是平均分,那就先因式分解,找出所有可能的分組數。

然後對於每個分組數N,就有一個MxN的01矩陣MAT,表示第M個學生是否在第N個組。

約束:

每行各元素和為1——一個學生只能在一個組

對每列求和後元素相等——每個組人數相等

MAT*VEC得到一個N維列向量,求解就變成了讓該列向量的各個元素值差異最小(每個組人數相同,即求每個組總分盡量相同)。

恩,就這樣,找個01規劃求解器扔進去應該就行了。至於怎麼搜索,怎麼尋找feasible point,都不用關心了。。。。(論調庫的方便性)


用聚類演算法?


用下local search這種離散優化演算法試試。


就是個聚類問題,用kMeans吧


Genetic algorithms


統計或者機器學習領域有個kmeans聚類方法,滿足你的需求。


K-means或者其他的cluster演算法都可以


k平均或其他聚類方法


推薦閱讀:

為什麼這段C代碼的速度沒有Mathematica和Matlab快?
Wolfram Mathematica 有哪些比較好(有特色,有用)的Package?
MATLAB有哪些隱藏功能?
正版的matlab以及mathematica比盜版的優勢是什麼?
為什麼Mathematica中無法Manipulate一個先前定義的變數中的參數?

TAG:數學 | 編程 | 計算機 | 數學軟體 |