假设我有 N 个列表(向量)并且我想选择其中的 x 个1<x<[N]
(x 不是预先确定的),所以我将获得 func(lists) 的最大值。
例如:
l1 = [3,4,7,-2]
l2 = [0.5,3,6,2.7]
l3 = [0,5,8,3.6]
mat = [l1, l2, l3]
result = maximize(func, mat)
def func(mat):
# doing some math between lists. For Example:
sum_list = list(mat[0])
for li in mat[1:]:
sum_list = map(operator.add, sum_list, li)
accum_min_lst = []
for i, val in enumerate(sum_list):
x = sum_list[:i + 1]
accum_min_lst.append(val - max(x))
return min(accum_min_lst)
可能的结果:
[l1], [l2], [l3], [l1,l2], [l1,l3], [l2,l3], [l1,l2,l3]
如果我要编写一个天真的解决方案并运行所有组合,它将永远花费 2^N。
我正在尝试使用cvxpy或scipy.optimize.minimize找到解决方案, 但我发现很难理解我需要使用哪种函数来解决我的问题,我想也许我应该尝试进化算法来找到一个近似答案,或者也许我应该改用投资组合优化。