Risolutore di Excel con variabili di input multipli
Domanda
Ho un foglio Excel che ha un elenco di giocatori sportivi, le loro posizioni, un salario assegnato a quei giocatori e una quantità proiettata di punti.
Attualmente sto usando il risolutore per creare il miglior gruppo di giocatori sportivi possibili con determinate restrizioni di posizione e all'interno di un tappo salariale predefinito.
Nel mio esempio specifico, le diverse posizioni del giocatore sono: PG, SG, SF, PF, C, G, e F. Nota che A G può essere un PG o un SG, e un F può essere uno SF o pf.
Questo risolutore funziona attualmente, ma in alcuni casi un giocatore potrebbe avere più posizioni. Quindi, ad esempio, il giocatore A può essere usato come SF o un SG.
C'è un modo per spiegare questo all'interno di una funzione del risolutore in modo che il giocatore in questione possa essere utilizzato in entrambi gli slot?
Per aiutare a spiegare, fornirò alcuni esempi dei dati utilizzati. Ecco un piccolo esempio della lista dei giocatori:
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
.
Per risolvere il problema G e F, ho un elenco che raccoglie i giocatori "selezionati" e quell'elenco ha un min / max di ciascuno. Quindi in questo esempio ho bisogno di 1 PG, 1 SG e 1 G. Quindi ho una colonna PG con un minimo di 1 e un max 2, una colonna SG con un minimo di 1 e un massimo di 2 e G Colonna, che aggiunge PG / SG insieme che ha un minimo di 3 e un max 3. Quindi parte dei criteri del risolutore è tutto il min / max deve corrispondere.
Ho diviso la prima colonna in POS1 e POS2 per separare le due posizioni possibili, ma non riesco a capire come includere sia nella funzione SOLVER. Per un giocatore come Kevin Love, voglio che il risolutore tenga conto del fatto che può essere inserito nei punti PF, F, o C.
Ecco quella tabella:
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
.
Quindi, ad esempio, i criteri del risolutore sono:
Sum of Salary <= Salary Cap (50000)
PG Cur >= PG Min
Repeat for all Min
PG Cur <= PG Max
Repeat for all Max
Maximize Points
.
E infine, ecco un esempio di una soluzione:
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
.
Ogni giocatore si inserisce nel loro slot perché una delle loro due posizioni (POS1 o POS2) si adatta ai criteri. Ovviamente il totale non si adatta, quindi questa non sarebbe una soluzione praticabile, ma è solo un esempio.
Speriamo di aver fornito abbastanza dettagli, ma se non per favore fammi sapere e sarò felice di spiegare ulteriormente. Grazie in anticipo.
Soluzione
La tua domanda è ancora un po 'vaga perché il tuo tappo salariale è $ 50.000 ma mostri $ 63.000 di giocatori selezionati.
Assunzioni:
1. Vuoi 5 giocatori poiché questo è il numero di giocatori del piano e l'unico modo per ottenere una squadra composta dal tuo elenco dei giocatori sotto $ 50.000. Questo è probabilmente i cerchi fantasy e vuoi 7 o 8, ma la soluzione dovrebbe ancora funzionare per 8 giocatori con un elenco più ampio di opzioni e stipendi inferiori.
2. Suppongo inoltre che ci sia poco-nessun VBA qui da quando non hai fornito alcuno - o almeno niente di tutto ciò che deve essere regolato.
La mia soluzione (che è ancora in collaudo) è di lanciare / lanciare (o VBA equivalente) per POS1 e POS2 a un testo di numero di posizione (cioè, 1= PG, 2= SG, ecc.). Avanti, =concatenate(Pos1, Pos2)
In modo che un PG sia un 11, un PG / SG è un 12, ecc. ("G" è anche un 11 in questo scenario che potrebbe mettere un problema tecnico nella mia logica).
Cambia la tua tabella di posizione con valori min / max / curriculum Sembra qualcosa del genere:
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
.
(i valori sono i miei).