оптимизация функции нескольких переменных - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь максимизировать доход, используя затраты на несколько продуктов.

Вот мой код:

В этом фрагменте кода я рассчитываю доход для каждого продукта, а затем суммирую его.

   list = [65,78,90] #list of products
    def calcRev(x,list):
        sum = 0
        x = pd.DataFrame(x)
        for i in list:
                        count = 0
                        df_temp = df[df.app_id == i].reset_index()
                        df_temp['cost'] = x[count]
                        df_temp['inst'] = df_temp['cost']/df_temp['cpi']
                        df_temp['rev'] = (df_temp['LTV_accum']* df_temp['inst'])-df_temp['cost']
                        count = count+1
                        sum = sum+df_temp.rev.sum()
        return sum

целевая функция:

def obj(x,list):
    return -calcRev(x,list)

ограничения:

    def constrglobal(x,list):
        return  10000-calcRev(x,list)
cons = ({'type':'ineq','fun':constrglobal,'args':(list,)})

тогда я инициализирую затраты как первоначальное предположение x. Поскольку у меня есть два продукта на входе x имеет два димс. x = np.full((15,), 0)

тогда я применяю функцию минимизации:

sol = minimize(obj,x,args=(list,),method='SLSQP',constraints=cons,options={'disp':True})

Но в качестве решения у меня есть данные, распределенные только по первому продукту:

sol.x
array([1467.64152006, 1442.41330009, 1417.18518617, 1391.95714139,
       1366.1311581 ,    0.        ,    0.        ,    0.        ,
          0.        ,    0.        ])

Подскажите, пожалуйста, что не так и как я могу распределить sol.x среди всех продуктов?

...