Решатель Excel с несколькими входными переменными

StackOverflow https://stackoverflow.com//questions/21024278

  •  21-12-2019
  •  | 
  •  

Вопрос

У меня есть таблица 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, у меня есть список, в котором подсчитываются "выбранные" игроки, и в этом списке есть минимальное / максимальное количество каждого.Итак, в этом примере мне нужны 1 PG, 1 SG и 1 G.Итак, у меня есть столбец PG с минимальным значением 1 и максимальным значением 2, столбец SG с минимальным значением 1 и максимальным значением 2 и столбец G, который суммирует PG / SG вместе, что имеет минимальное значение 3 и максимальное значение 3.Тогда частью критериев решателя является то, что все значения min / max должны совпадать.

Я разделил первый столбец на POS1 и POS2, чтобы разделить две возможные позиции, но я не могу понять, как включить обе в функцию решателя.Для такого игрока, как Кевин Лав, я хочу, чтобы решатель учитывал, что он может быть помещен либо в 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, поскольку вы ничего не предоставили, или, по крайней мере, ничего из этого не нужно корректировать.

Мое решение (которое все еще находится в стадии тестирования) состоит в том, чтобы преобразовать / cast (или эквивалент VBA) для Pos1 и Pos2 в текст с номером позиции (т. Е. 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  

(ценности - это мои собственные).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top