Задача максимизации LP Python: Модель гидроэнергетики

#python #optimization

Вопрос:

У меня есть задача оптимизации (простая модель гидроэнергетики) с этими свойствами:

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

 Maximize {sum[p(i)*w(i)]   vv} for i=(0,24)
 

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

 0 <= w(i) <= 16   
0 <= V(i) <= 45 
 

Где:

 V(i 1) = V(i) - w(i)   q  
V(0) = 30  
vv = 275  
q = 3
 

Вот мой код:

 import numpy as np
from scipy.optimize import maximize

n=24
p=[280.91, 280.3, 279.48, 278.25, 276.81, 274.66, 271.89, 276.91, 274.45, 277.22, 276.91, 275.99, 271.59, 267.49, 265.95, 268.31, 271.28, 276.2, 276.91, 277.02, 276.4, 276.81, 274.45, 271.59]
w=[]*n

q=3 #inflow
vv = 270 #water value
Pmaks = 16 #max production
Vmaks = 45 #reservoir volume

def objective(p,w): #benefit function
    benefit = 0
    for i in range(n):
        benefit  = p[i]*w[i]
    return benefit   vv

def constraint(V,w): #eq
    return V[i 1] - V[i]   w[i]   q


# initial guesses
V[0] = 30
w[0] = 5

# show initial objective
print('Initial Objective: ', w[0]))

# optimize
a = (0.0, Pmaks)
b = (0.0, Vmaks)
bnd1 = (a)
bnd2 = (b)
con = ('type': 'eq', 'fun': constraint) #<----- HERE I GOT ERROR ON THE FIRST ":"
cons = ([con])

solution = maximize(objective, w[0], method='LP', bounds=[bnd1,bnd2], constraints=cons)
w = solution.w

# show final objective
print('Final Objective: ',w)

# print solution
print('Solution')
print('Production: ', w)
print('Reservoir: ', V)
 

Как вы можете видеть, я получаю ошибку на «con1». Кто-нибудь знает, почему? И есть ли у кого-нибудь отзывы о том, как улучшить код?

Комментарии:

1. Существует множество примеров, которые охватывают проблемы индексированной оптимизации. Вы смотрели какие-либо примеры или, еще лучше, вводный текст по линейному программированию? Просмотрите пару из них и примеры на SO. Избегать numpy . Посмотрите на другие pulp примеры. Вы на правильном пути.