複数の入力変数を持つExcelソルバー
質問
私はスポーツ選手のリスト、彼らの地位、それらの選手に割り当てられた給与、そして投影されたポイントの数のリストを持つ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の問題を解決するために、「選択した」プレイヤーを集計し、そのリストにはそれぞれのmin / maxがあるリストがあります。そのため、この例では1 pg、1 sg、および1gが必要です。そのため、Min 2、Min 1、Min 1、M max 2、gを持つSGカラムを1つ、MAX 2のPGカラムが必要です。 3つのmin 3と3のmax 3を持つpg / sgを追加する列は、ソルバー基準の一部がすべて最小/最大になる必要があります。
最初の列をPOS1とPOS2に分割して、2つの可能な位置を分割しましたが、ソルバー関数の両方を含める方法を理解することはできません。 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
.
SO、ソルバー基準は次のとおりです。
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
.
各プレイヤーは、2つの位置(POS1またはPOS2)の1つが基準に合うため、スロットに収まります。明らかに合計は合いませんので、これは実行可能な解決策ではないでしょうが、それはほんの一例です。
私は十分な詳細を提供したら、私に知らせないでください、そして私はそれ以上説明して幸せになるでしょう。事前にありがとうございます。
解決
あなたの給料帽子が50,000ドルであるので、あなたの質問はまだ少し曖昧ですが、選択した63,000ドルのプレーヤーを表示します。
仮定:
1.それ以来、5人のプレーヤーがプレーヤーフロアの数と、あなたのプレーヤーリストからなるチームを50,000ドル以下にする唯一の方法です。これはおそらくファンタジーフープであり、7または8が欲しいですが、ソリューションは依然として幅広いオプションリストと給与の下のリストを持つ8人のプレーヤーに勤務してください。
2.ここでは、どのようなものも提供していないため、少なくとも調整する必要がありませんので、ほとんどいいえVBAがないと仮定します。
私の解決策(まだテスト中のもの)は、POS1とPOS2のための投入/キャスト(またはVBAと同等の)を位置番号のテキスト(すなわち、1= Pg、2= 2= Sgなど)に投入することです。
次に、PGが11であるように=concatenate(Pos1, Pos2)
が12、PG / SGは12などである(「G」はこのシナリオでは11台のものです)。
ポジションテーブルを最小/最大/ 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
.
(値は私自身です)。