我有一张Excel表格,其中包含体育运动员名单,他们的位置,分配给这些球员的薪水以及预计的积分数。
我目前正在使用求解器创建最佳的体育运动员群体,并且可以通过某些位置限制并在预定义的工资帽内。
在我的具体示例中,不同的玩家位置是:PG,SG,SF,PF,C,G和F.注意G可以是PG或SG,而F可以是SF或PF。
此解算器目前正在运行,但在某些情况下,玩家可能有多个位置。因此,例如,玩家A可以用作SF或SG。
有没有办法在解算器功能中考虑到这一点,以便有问题的玩家可以在任何一个插槽中使用?
为了帮助解释,我将提供一些正在使用的数据的示例。以下是播放器列表的一小部分示例:
Position Player Salary Game Points Pos 1 Pos 2
PF/C Kevin Love $10,400 Pho@Min 09:30PM ET 53.17 PF C
PG/SG Stephen Curry $10,000 GS@Bkn 07:30PM ET 47.50 PG SG
SG/SF James Harden $9,500 LAL@Hou 08:00PM ET 41.13 SG SF
PF/C LaMarcus Aldridge $9,500 Orl@Por 10:00PM ET 45.22 PF C
PF/C Anthony Davis $9,200 Was@NO 08:00PM ET 42.97 PF C
PF/C Blake Griffin $9,000 Bos@LAC 10:30PM ET 42.66 PF C
PG John Wall $8,900 Was@NO 08:00PM ET 42.09 PG
PF/C Dwight Howard $8,700 LAL@Hou 08:00PM ET 41.19 PF C
SG/SF Paul George $8,600 Ind@Atl 07:30PM ET 40.06 SG SF
PF Paul Millsap $8,400 Ind@Atl 07:30PM ET 37.96 PF
PF/C Al Horford $8,300 Ind@Atl 07:30PM ET 37.33 PF C
为了解决G和F问题,我有一个列出了“选定”玩家的列表,该列表中每个都有最小值/最大值。所以在这个例子中我需要1个PG,1个SG和1个G.所以我有一个PG列,最小值为1,最大值为2,SG列的最小值为1,最大值为2,G值为G列,将PG / SG加在一起,最小值为3,最大值为3.然后,求解器条件的一部分是所有最小值/最大值必须匹配。
我已将第一列拆分为POS1和POS2以分隔两个可能的位置,但我无法弄清楚如何将两者都包含在求解器函数中。对于像Kevin Love这样的球员,我希望解算器考虑到他可以被置于PF,F或C位置。
以下是该表:
PG SG SF PF C G F Ttl
Min 1 1 1 1 1 3 3 8
Max 3 3 3 3 2 4 4 8
Cur 1 3 1 2 1 4 3 8
例如,Solver标准是:
Sum of Salary <= Salary Cap (50000)
PG Cur >= PG Min
Repeat for all Min
PG Cur <= PG Max
Repeat for all Max
Maximize Points
最后,这是一个解决方案的例子:
PG Stephen Curry $10,000 47.5
SG James Harden $9,500 41.13
SF Paul George $8,600 40.06
PF Dwight Howard $8,700 41.19
C Blake Griffin $9,000 42.66
G John Wall $8,900 42.09
F Al Horford $8,300 37.33
Total $63,000 292.5
每个玩家都适合他们的位置,因为他们的两个位置中的一个(POS1或POS2)符合标准。显然总数不合适,所以这不是一个可行的解决方案,但它只是一个例子。
希望我已经提供了足够的细节,但如果没有,请告诉我,我将很乐意进一步解释。提前谢谢。
答案 0 :(得分:1)
您的问题仍然有点模糊,因为您的薪资上限为50,000美元,但您显示的是63,000美元的玩家。
假设:
1.你需要5名玩家,因为那是玩家数量,以及让你的玩家名单低于$ 50,000的团队的唯一途径。这可能是幻想箍,你想要7或8,但解决方案应该仍然适用于8个选项更广泛的选项和更低的工资。
2.我还假设这里没有VBA,因为你没有提供任何VBA,或者至少没有一个需要调整。
我的解决方案(仍处于测试阶段)是将Pos1和Pos2的/(或等效的VBA)抛向位置编号的文本(即1 = PG,2 = SG等)。
接下来,=concatenate(Pos1, Pos2)
使得PG为11,PG / SG为12等(在这种情况下,“G”也是11,这可能会给我的逻辑带来一个小故障)。 / p>
使用Min / Max / Cur值更改位置表如下所示:
Pos. | PG | G | PG/SG | SG | SG/SF | SF/PF | F | PF | PF/C | C
--------------------------------------------------------------------
Pos1 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5
Pos2 | 1 | 2 | 2 | 2 | 3 | 4 | 4 | 4 | 5 | 5
PosNbr | 11 | 12 | 12 | 22 | 23 | 34 | 34 | 44 | 45 | 55
--------------------------------------------------------------------
Min | 1 | 3 | 3 | 1 | | 3 | 4 | 1 | | 1
Max | 3 | 4 | 4 | 3 | | 4 | 4 | 3 | | 2
Curr | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 3 | 0
(值是我自己的。)