我正在尝试对总和执行优化,但无法弄清楚如何正确编写代码。在scipy.optimization.minimize .linprog等上检查了一堆其他线程,但仍然遇到问题。希望有人可以通过解释指出我正确的方向。
我的目标:我在代码中有以下不同长度的表格。我希望我的算法从A中选择2行,从B中选择3行,从C中选择2行,从D中选择1行,从E中选择1行。它不能选择相同的条目两次。我想优化所有行选择的x的最大总和,但是对y的相应总和进行约束,使得它不超过4.另外,对于在D列中选择的行的任何label2,我想要所有所有其他表中的行,其中label1中的值将从选择中排除。真的在最后一次挣扎......
总结:想要max(sum(x))st sum(y)<表4的所选值的标号2和表D的选择值的元素2不是表A,B,C,E的选择值的元素。
输出应该是所选的行。
感谢任何帮助!好像似乎无法绕过这个,现在困扰我好几天了。谢谢!
import pandas as pd
import numpy as np
def make_table(x):
categories = ['a','b','c','d','e']
labels = []
for i in range(0,x):
j = np.random.choice(5, 2, replace=False)
labels.append([categories[j[0]],categories[j[1]]])
X1 = pd.DataFrame({
'x': np.random.randn(x),
'y': np.random.randn(x)
})
X2 = pd.DataFrame(np.array(labels), columns=['label1','label2'])
return pd.concat([X2,X1], axis=1)
A = make_table(50)
B = make_table(100)
C = make_table(50)
D = make_table(25)
E = A+B+C+D
Sample table (only showing first 6 rows. All tables look like this though):
label1 label2 x y
e a 0.394106 1.961436
a b -0.802064 0.051326
a e 1.819099 -1.205606
e b 0.792452 -0.535669
b d -1.290806 -1.146422
a b -0.530618 -0.871684
...