У меня есть входной файл с почасовыми ценовыми данными за несколько лет, который выглядит как
Я хочу найти максимальный почасовой объем с учетом цен.Программа, которую я написал, работает, за исключением случаев, когда я пытаюсь добавить ограничение, если сумма объема за день равна 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)]
Это утверждение не ограничивается двумя днями подряд