摘要: 我大约有50个变量,它们都有一个值。我想获得所有可能的变量组合的最大值。
例如:我有变量“葡萄:0.1欧元”,“苹果:1欧元”,“香蕉:2.5欧元”,“草莓:4欧元”,“橙色:5欧元”等我想拥有一个5欧元时可以做出的所有可能组合。而且,每个变量只能被选择一次(例如,不是5 x苹果),并且可以选择的变量数量最大。
以上示例是我的问题的简化。
背景: 我还没有尝试过任何东西。我想我必须将变量作为字典读入。但是对于其余部分,我不知道如何在Python中解决此问题。
代码: 尚无可用
预期输出: 输出应该是变量的所有可能组合,这些变量应匹配包含最大'x'变量并代表最大'x'值的条件,并且每个变量的选择不得超过一次。
答案 0 :(得分:0)
尝试此方法以开始:
import itertools
x=[0.1, 1, 2.5, 4, 5]
N = 5
res = []
for i in range(len(x)):
for el in itertools.combinations(x, i+1):
if(sum(el)<=N and N-sum(el) < min([el_sub for el_sub in x if el_sub not in el] or [N])):
res.append(el)
print(el)
结果可在“ res”中找到。如果要限制元素的数量,请使用第一个for循环(以及相应的if语句)。
答案 1 :(得分:0)
我自己也找到了技术解决方案。但我要说的是,这需要很多处理能力。在我的情况下,有48个变量,我希望将所有可能的变量与20个变量组合。我相信大约有9.000.000.000种可能的组合。因此,Python无法正确处理此问题。无论如何,我的代码如下(用于26种水果及其12种的所有组合):
from itertools import combinations
fruits = [
{'A':1.5},
{'B':1.5},
{'C':0.75},
{'D':1.5},
{'E':2.5},
{'F':3.5},
{'G':1},
{'H':0.5},
{'I':2.5},
{'J':1},
{'K':0.75},
{'L':3},
{'M':0.5},
{'N':0.75},
{'O':1},
{'P':1},
{'Q':1.5},
{'R':2},
{'S':3.5},
{'T':3},
{'U':0.75},
{'V':2},
{'W':2},
{'X':1.5},
{'Y':4},
{'Z':1.5}
]
combis = list(combinations(fruits,12))
for combi in combis:
total = 0
for fruit in combi:
fruit = fruit.values()
string = (list(value))
integer = (string[0])
total = total + integer
if total == 23.5:
print(list(combi[0].keys())[0]), print(list(combi[1].keys())[0]), print(list(combi[2].keys())[0]),
print(list(combi[3].keys())[0]), print(list(combi[4].keys())[0]), print(list(combi[5].keys())[0]),
print(list(combi[6].keys())[0]), print(list(combi[7].keys())[0]), print(list(combi[8].keys())[0]),
print(list(combi[9].keys())[0]), print(list(combi[10].keys())[0]), print(list(combi[11].keys())[0]),
print(som), print('_______________')
else:
pass