python scipy / facile优化帮助:不确定如何构造逻辑

时间:2018-04-02 11:03:59

标签: python optimization scipy linear-programming maximize

我正在尝试对总和执行优化,但无法弄清楚如何正确编写代码。在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
...

0 个答案:

没有答案