具有多个输入变量的Excel求解器
题
我有一个擅长的表格,有一个体育运动员列表,他们的职位,分配给这些球员的薪水,以及一个预计的积分。
我目前正在使用Solver创建最佳的体育运动者组,具有某些位置限制和预定义的薪资帽。
在我的具体示例中,不同的播放器位置是: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问题,我有一个标志的列表,它略有“选定”的播放器,并且该列表每个都有min / max。所以在这个例子中,我需要1 pg,1 sg和1g。因此,我有一个pg列,min为1和max 2,sg列,min为1,最大2,以及m min列,它在一起添加pg / sg的pg / sg,min为3和最大3.那么求解器标准的一部分都是min / max必须匹配。
我已将第一列拆分为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
.
例如,求解主理标准是:
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)适合标准。显然总共不合适,所以这不是一个可行的解决方案,但这只是一个例子。
希望我提供了足够的细节,但如果不是,请告诉我,我很乐意进一步解释。提前致谢。
解决方案
您的问题仍然有点模糊,因为您的薪资帽是50,000美元,但您展示了63,000美元的球员选择。
假设:
1.你想要5名球员,因为这是玩家楼层的数量和获得由您的玩家组成的团队的唯一方法,低于50,000美元。这可能是幻想箍,你想要7或8,但解决方案仍然应该为8名球员工作,具有更广泛的选项和较低工资。
2.我还假设这里没有VBA,因为您没有提供任何 - 或至少需要调整的VBA。
我的解决方案(仍在测试中)是将POS1和POS2投掷(或VBA等效)到位置编号的文本(即,1= PG,2= SG等)。
接下来,生成播码代码,使得pg是11,pg / sg是12等(“g”也是这个场景中的11个,这可能会在我的逻辑中放置故障)。
使用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
.
(值是我自己的)。