Получение всевозможных комбинаций при максимальном ограничении
def pickSubs(self, subjects, maxWork, maxLottery):
totWork = 0
totLott = 0
studentSubs = []
for s in subjects:
totWork += s.getWork()
totLott += s.getLottery()
if totLott <= maxLottery and totWork <= maxWork:
studentSubs.append(s)
return studentSubs
Я пытаюсь использовать компараторы, чтобы определить лучший выбор для студента на основе различных факторов.
Моя проблема в том, что я хочу добавить все возможные объекты, если общие значения работы и лотереи находятся под maxWork, maxLottery, но я не добавляю все возможные комбинации. Я просто добавляю, пока не достигну максимального значения ограничения
Как я могу получить все возможные комбинации?
1 ответ
Это должно решить ваш вопрос как спросили:
def pickSubs(self, subjects, maxWork, maxLottery):
from itertools import chain, combinations
validcombinations = []
for comb in chain.from_iterable(combinations(subjects, n)
for n in range(1, len(subjects)+1):
sumWork = sum(s.getWork() for s in comb)
sumLottery = sum(s.getLottery() for s in comb)
if sumWork <= maxWork and sumLottery <= maxLottery:
validcombinations.append(comb)
return validcombinations
Но имейте в виду, что это, как правило, проходит через невероятно длинный список. Если вы на самом деле пытаетесь найти "лучший" набор предметов, который удовлетворяет этим критериям, я действительно рекомендую вам взглянуть на что-то вроде PuLP, где вы можете установить это как целочисленную задачу, используя переменные двоичного выбора. Я думаю, что для этого потребуется задать еще один вопрос.