当约束是动态的时,如何使用scipy最小化?

时间:2018-04-25 10:16:56

标签: optimization scipy minimize

我有以下优化问题:

enter image description here 其中Xq是内生的,而其他变量是已知的。

我使用scipy最小化函数来解决它。我对边界和约束没有问题:

# objective function
def objective(q,s):
    return -sumprod(q,s)

def sumprod(l1,l2):
    return sum([x*y for x,y in zip(*[l1,l2])])

# constraints
def cons_periodicflow_min(q):
    return q.sum()-qpmin

con1 = {'type':'ineq','fun':cons_periodicflow_min}


def cons_periodicflow_max(q):
    return qpmax - q.sum()

con2 = {'type':'ineq','fun':cons_periodicflow_max}


def cons_daily_reservoir(q):#xmin,q,X,a,delta):
    return X+a-q-delta-xmin

con3 = {'type':'ineq','fun':cons_daily_reservoir}


def cons_end_reservoir(q):#xend,q,X,a,delta):
    return X[-1]+a[-1]-q[-1]-delta[-1]-xend

con4 = {'type':'ineq','fun':cons_end_reservoir}

cons=[con1,con2,con3,con4]

# definition of the parameters
T=3
q0 = np.zeros(T)
s0 = np.array([10,10,10])
qmin = [0,0,0]
qmax = [10,10,10]
delta = [1,1,1]
a = [2,2,2]
X = [10,0,0]

qpmax = 50
qpmin=10
b = [(qmin[t],qmax[t]) for t in range(T)]

sol = sco.minimize(objective,q0,bounds=b,constraints=cons)

我唯一的问题是X取决于q所以我需要在每个时间步更新X,我可以将它添加到最小化功能吗?那么怎么做呢?

编辑:

我可以通过以下方式表达X(请不要介意t / t + 1问题):

enter image description here

因此Xmin的约束可以重写:

enter image description here

表达优化问题有帮助吗?

0 个答案:

没有答案