CVXPY "Невозможно оценить значение истинности ограничения или цепочки ограничений, например, 1> = x> = 0" Python - PullRequest
0 голосов
/ 13 октября 2018

У меня есть входной файл с почасовыми ценовыми данными за несколько лет, который выглядит как enter image description here

Я хочу найти максимальный почасовой объем с учетом цен.Программа, которую я написал, работает, за исключением случаев, когда я пытаюсь добавить ограничение, если сумма объема за день равна 0;объем следующего дня также должен быть равен 0, но это относится только к двум последовательным дням, то есть, если в днях все объемы равны 0, на следующем дне все объемы должны быть равны 0, а в третьем дне может быть ненулевой.Код выглядит следующим образом:

for i in numberOfYears:   

    df = dfOrig[dfOrig['year'].isin([i])]
    dfOut = df[['year','month','day ','weekday','Date']] 
    df.drop(columns=['year','month','day ','weekday','Date'], inplace = True)


    df.reset_index(drop=True, inplace = True)
    dfOut.reset_index(drop=True, inplace = True)


    rowsCols = df.shape
    rows = rowsCols[0]
    cols = rowsCols[1]
    A = list(df.values.flatten())
    A1 = np.matrix(A) 
    n = len(A)



    # Construct the problem.
    x = cp.Variable(n)

    #list of days
    days = [None]*rows
    for i in range(rows):
        days[i] = [None]*cols
        for j in range(cols):
            days[i][j] = x[j]

    #objective = cp.Maximize(cp.sum(A*x)) #uncomment to run on python 2.7
    objective = cp.Maximize(cp.sum_entries(A1*x)) 


    constraints = [0 <= x, 
                   x <= 300,                
                   cp.sum_entries(x) <= 413000 #cp.sum(x) <= 413000 #uncomment to run on python 2.7
                   ]


    for i in range(rows):
        for j in range(cols):        
            if i ==0:
                constraints += [x[j] >= 0.25*cp.pos(x[0:(cols-1)])]            
            else:
                if i>2:
                    exp3= x[cols*(i-1):cols*(i-1)+(cols-1)]
                    exp2= x[cols*(i-2):cols*(i-2)+(cols-1)]
                    exp1 = x[cols*i:cols*i+(cols-1)]
                    constraints += [cp.sum_entries(exp1)<=cp.sum_entries(exp3)] 


                constraints += [x[j+cols*i] >= 0.25*cp.pos(x[cols*i:cols*i+(cols)])]
                #constraints += [x[j+cols*i] >= 0.25*cp.pos(x[cols*i:cols*i+(cols-1)])]
        #constraints += cp.sum(days[i])>=75



    prob = cp.Problem(objective, constraints)

    # The optimal objective value is returned by `prob.solve()`.
    result = prob.solve(feastol=0.1)

У меня возникли проблемы с утверждением:

 constraints += [cp.sum_entries(exp1)<=cp.sum_entries(exp3)] 

Это утверждение не ограничивается двумя днями подряд

...