把一個班級的學生按平均分分成幾個小組,要求要求平均分越接近越好,能用什麼方法??
01-08
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一個先前定義的變數中的參數?