具有多个inputvariables的Excel求解器

我有一个Excel表格,其中包含一个运动员名单,他们的职位,分配给这些球员的薪水以及预计的积分数量。

目前我正在使用求解器来创build最佳的运动员队伍,并且可以在一定的位置限制和预定的工资帽内进行。

在我的具体例子中,不同的玩家位置是: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,最小值为1,最大值为2的SG列,G列,它将PG / SG加在一起,其最小值为3,最大值为3.然后部分解算器标准是所有最小/最大值必须匹配。

我已经将第一列分成POS1和POS2两个可能的位置,但是我不知道如何在求解器函数中包含这两个位置。 对于Kevin Love这样的球员,我希望解决者考虑到他可以被安置在PF,F或者C的位置上。

这是表格:

  PG SG SF PF CGF 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 

最后,这是一个解决scheme的例子:

 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)符合标准。 很显然总不合适,所以这不是一个可行的解决scheme,但这只是一个例子。

希望我已经提供了足够的细节,但如果没有,请让我知道,我会很乐意进一步解释。 提前致谢。

你的问题仍然有点模糊,因为你的薪水上限是5万美元,但是你显示的是63,000美元的select。

假设:
1.你需要5名球员,因为这是球员的数量,也是让你的球员名单低于5万美元的唯一方法。 这可能是幻想篮球,你想要7或8,但解决scheme仍然适用于8个球员的更广泛的选项列表和较低的薪水。
2.我还会假设这里没有什么VBA,因为你没有提供任何 – 或者至less不需要调整。

我的解决scheme(仍在testing中)是将Pos1和Pos2投掷/投射(或VBA等价)为位置编号的文本(即1 = PG,2 = SG等)。

接下来, =concatenate(Pos1, Pos2) ,使得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 

(价值是我自己的)。