最優化基礎任務分配規劃(優化果真不是誰都能做的)

(前方廢柴大坑請注意,慎入,讀了就是在浪費生命,我已經浪費5個小時了)
一個王者榮耀戰隊,5名電競參賽選手參加比賽,根據以往的訓練收集數據進行綜合評分(滿分20分)得到如下結果:

tijt_{ij} 發育路A 輔助B 中路C 打野D 對抗路E
1 3 5 6 9 10
2 4 8 8 11 13
3 6 9 10 12 14
4 8 10 10 15 16
5 13 13 17 18 20

如何確定每一位選手適合的線路使得比賽贏得機率增大呢?(咳咳,我大概就是那個坑隊友的1號選手,走哪條路都不行,打分都在平均分之下;嗷嗷嗷,榮耀大神就不一樣了,不僅僅自己擅長的玩的666,別的也在平均分之上,羨慕(
那麼,我們的目標是找到綜合分數最高的匹配。如何構建我們的目標函數呢?
在這裏我們介紹一種最優化模型0-1規劃。

If the variable x can take only one of the discrete variables (d1d_1, d2d_2, …, dnd_n) (integer or not) then it is possible to introduce n supplementary binary variables yiy_i and 2 equality constraints

我們的變量實際上是25個0-1值變量。
xij=1ijxij=0x_{ij} = 1 \quad 如果選手i選擇了路線j; x_{ij} = 0 \quad 其他情況
所以,我們的目標函數如下:maxf=i=15j=15tijxijmax \quad f = \sum_{i=1}^5\sum_{j=1}^5 t_{ij}x_{ij}
我們可以選擇一個初始情況:

xijx_{ij} 發育路A 輔助B 中路C 打野D 對抗路E
1 0 1 0 0 0
2 0 0 0 1 0
3 0 0 1 0 0
4 1 0 0 0 0
5 0 0 0 0 1

如何確定我們的約束函數?最開始我的腦袋只是想到了一個不完美的約束條件i=15xij=5\sum_{i=1}^5 x_{ij} = 5但這不符合一般意義上的匹配,我們希望不要有路線重複。
如果把25個待優化變量看作是5×55\times 5的矩陣,我們的完美約束如下:
ig(k)=j=15xij=1每一行i:g(k) = \sum_{j=1}^5x_{ij}=1
jg(l)=i=15xij=1每一列j:g(l) = \sum_{i=1}^5x_{ij}=1

一般情況,如果數據量不大的話,我們可以使用Matlab中的0-1規劃函數,R2014開始有intlinprog函數。但問題是我們的是25個變量,不能用整數規劃(
今日成就:用5個小時嘗試了一個錯誤的方法,悲傷逆流成河,從數學模型到代碼實現隔着20億光年的孤獨,悲傷到變形(
背景音樂:《你的酒館對我打了烊》

你出現 就沉醉了時間
沒有酒 我像個荒誕的可憐人
可是你 卻不曾施捨二兩
你的酒館對我打了烊
子彈在我心頭上了膛
請告訴我今後怎麼扛
遍體鱗傷還笑着原諒
你的酒館對我打了烊
承諾是小孩子說的謊
請告訴我今後怎麼扛
你無關痛癢
我敬你 給我感動歡喜
爲了你 殺光了世間的爛俗人
可是你 卻不曾施捨二兩
你的酒館對我打了烊
子彈在我心頭上了膛
請告訴我今後怎麼扛
遍體鱗傷還笑着原諒
你的酒館對我打了烊
承諾是小孩子說的謊
請告訴我今後怎麼扛
你無關痛癢
轉啊轉啊轉啊轉啊轉
沒能轉進你的心上
看啊看啊看啊看啊看
誰能再把自己點亮
你的酒館對我打了烊
子彈在我心頭上了膛
請告訴我今後怎麼扛
遍體鱗傷還笑着原諒
你的酒館對我打了烊
承諾是小孩子說的謊
請告訴我今後怎麼扛
你無關痛癢
請告訴我今後怎麼扛
你無關痛癢

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章