(前方废柴大坑请注意,慎入,读了就是在浪费生命,我已经浪费5个小时了)
一个王者荣耀战队,5名电竞参赛选手参加比赛,根据以往的训练收集数据进行综合评分(满分20分)得到如下结果:
t i j t_{ij} tij | 发育路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 ( d 1 d_1 d1, d 2 d_2 d2, …, d n d_n dn) (integer or not) then it is possible to introduce n supplementary binary variables y i y_i yi and 2 equality constraints
我们的变量实际上是25个0-1值变量。
x
i
j
=
1
如
果
选
手
i
选
择
了
路
线
j
;
x
i
j
=
0
其
他
情
况
x_{ij} = 1 \quad 如果选手i选择了路线j; x_{ij} = 0 \quad 其他情况
xij=1如果选手i选择了路线j;xij=0其他情况
所以,我们的目标函数如下:
m
a
x
f
=
∑
i
=
1
5
∑
j
=
1
5
t
i
j
x
i
j
max \quad f = \sum_{i=1}^5\sum_{j=1}^5 t_{ij}x_{ij}
maxf=i=1∑5j=1∑5tijxij
我们可以选择一个初始情况:
x i j x_{ij} xij | 发育路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
=
1
5
x
i
j
=
5
\sum_{i=1}^5 x_{ij} = 5
i=1∑5xij=5但这不符合一般意义上的匹配,我们希望不要有路线重复。
如果把25个待优化变量看作是
5
×
5
5\times 5
5×5的矩阵,我们的完美约束如下:
每
一
行
i
:
g
(
k
)
=
∑
j
=
1
5
x
i
j
=
1
每一行i:g(k) = \sum_{j=1}^5x_{ij}=1
每一行i:g(k)=j=1∑5xij=1
每
一
列
j
:
g
(
l
)
=
∑
i
=
1
5
x
i
j
=
1
每一列j:g(l) = \sum_{i=1}^5x_{ij}=1
每一列j:g(l)=i=1∑5xij=1
一般情况,如果数据量不大的话,我们可以使用Matlab中的0-1规划函数,R2014开始有intlinprog函数。但问题是我们的是25个变量,不能用整数规划(
今日成就:用5个小时尝试了一个错误的方法,悲伤逆流成河,从数学模型到代码实现隔着20亿光年的孤独,悲伤到变形(
背景音乐:《你的酒馆对我打了烊》
你出现 就沉醉了时间
没有酒 我像个荒诞的可怜人
可是你 却不曾施舍二两
你的酒馆对我打了烊
子弹在我心头上了膛
请告诉我今后怎么扛
遍体鳞伤还笑着原谅
你的酒馆对我打了烊
承诺是小孩子说的谎
请告诉我今后怎么扛
你无关痛痒
我敬你 给我感动欢喜
为了你 杀光了世间的烂俗人
可是你 却不曾施舍二两
你的酒馆对我打了烊
子弹在我心头上了膛
请告诉我今后怎么扛
遍体鳞伤还笑着原谅
你的酒馆对我打了烊
承诺是小孩子说的谎
请告诉我今后怎么扛
你无关痛痒
转啊转啊转啊转啊转
没能转进你的心上
看啊看啊看啊看啊看
谁能再把自己点亮
你的酒馆对我打了烊
子弹在我心头上了膛
请告诉我今后怎么扛
遍体鳞伤还笑着原谅
你的酒馆对我打了烊
承诺是小孩子说的谎
请告诉我今后怎么扛
你无关痛痒
请告诉我今后怎么扛
你无关痛痒