Gerando permutações com uma restrição de soma

eu tenhon conjuntos de comprimento variável e gostaria de obter todas as permutações de itens de cada conjunto em que a soma esteja dentro de um determinado intervalo. Por exemplo, emR nós podemos fazer:

set1 <- c(10, 15, 20)
set2 <- c(8, 9)
set3 <- c(1, 2, 3, 4)

permutations <- expand.grid(set1, set2, set3)
permutations$sum <- rowSums(permutations)
final <- permutations[permutations$sum >= 25 & permutations$sum <= 29, ]

# final:
#    Var1 Var2 Var3 sum
# 3    20    8    1  29
# 5    15    9    1  25
# 8    15    8    2  25
# 11   15    9    2  26
# 14   15    8    3  26
# 17   15    9    3  27
# 20   15    8    4  27
# 23   15    9    4  28

Isso é bom para um pequeno número de conjuntos, mas cresce rapidamente (fatorialmente) com um número maior ou maior de conjuntos.

É possível gerar permutações que se encaixam na restrição, sem ter que calcular todas as possibilidades?

Neste exemplo, não há combinações finais contendo os 10 deset1, pois a soma resultante seria muito pequena, independentemente de outros números escolhidos. Isso pode ser útil para reduzir o escopo do problema. Por exemplo, e, se eu souber dissomin(set1) + max(set2) + max(set3) < 25 == TRUE, posso garantir que não incluamin(set1) em quaisquer permutações.

Como posso generalizar isso e usar as restrições para evitar a geração de permutações inválidas?

questionAnswers(1)

yourAnswerToTheQuestion