pyomo最终是如何工作的,有没有明确的解释/视频(我对python不熟悉)

2024-06-03 00:18:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python方面的经验很少。尽管我们的老师给我们介绍了毕摩,但解释得很少,我们应该用它来解决复杂的问题。我们有一个代码,我们应该改变/适应,但我不能说三道四他们的意思,以及如何使用/改变代码。俾莫对我来说是中国人:(

我试着定义j,当我成功的时候,似乎我现在还没有定义

from pyomo.environ import *
infinity = float('inf')


modelQ3 = ConcreteModel("Q3")

## Sets definition
# Pollutant sources
S=['S1', 'S2']
# remediation measures
M=['M1', 'M2', 'M3']

##Parameters definition
#a area of source Sj in M²
a = {}
a['S1']=1000
a['S2']=3000

#ALPHA ATTENUATION FROM SOURCE S1 TO THE LAKE
#ALPHA ATTENUATION FROM SOURCE S TO THE LAKE
alpha={}
alpha['S1']=0.37
alpha['S2']=0.16

#TM ANNUAL COST OF REMEDIATION MEASURE M (SEK PER M^2)
tm={}
tm['M1']=5.25
tm['M2']=7.35
tm['M3']=3.5


#TARGET TARGET LOAD TO THE LAKE EXPRESSED AS FRACTION OF INITIAL LOAD
target = 0.9

#LK INITIAL LEAKAGE OF POLLUTANT FROM SOURCE S1 (KG)
lk={}
lk['S1']=500
lk['S2']=1000

#E EFFECTS OF EMISSION REDUCTION MEASURES M1 AND M2 (REDUCED POLLUTANT FRACTION)
e={}
e['M1']=0.85
e['M2']=0.98

#E3 ANNUAL REDUCTION BY LOAD REDUCTION MEASURE M3 (KG PER M^2 AND YEAR)
e3=0.5475

#L0 POLLUTANT LOAD TO THE LAKE FROM SOURCE S1 BEFORE REMEDIATION (KG);
l0={}
for i in S:
    l0[i]=lk[i]*(1-alpha[i])

##E={}
##for j in M:
##    E[j]=e[j]

##Variables definition
modelQ3.ra = Var(M, within=NonNegativeReals) #AREA (M^2) OVER WHICH REMEDIATION MEASURE M IS APPLIED
modelQ3.rm = Var(M, within=NonNegativeReals) #REDUCTION OF POLLUTANT LOAD WITH MEASURE M FROM SOURCE S1 (KG)
modelQ3.c = Var(M, within=NonNegativeReals) #TOTAL COST of MEASURE M AT SOURCE S1 (SEK)
##Constraints definition
# Cost measure
def c_rule(modelQ3,j,i):
    return modelQ3.c[j,i] == tm[j]*modelQ3.ra[j,i]
modelQ3.cost_measure=Constraint(M,rule=c_rule)

#load reduction
def rm_rule(modelQ3,j,i):
    rule=None
    if [j,i] =='M1' or [i,j] == 'M2':
        rule=modelQ3.rm[i,j] == e[i,j]*lk*(modelQ3.ra[i,j][i]/a)*(1-alpha)
    else:
        rule=modelQ3.rm[i,j] == e3*(modelQ3.ra[i,j])
    return rule
modelQ3.load_reduction=Constraint(M,rule=rm_rule)

#New loads
def nl_rule(modelQ3):
    return l0-sum(modelQ3.rm[j] for j in M) <= l0*target
modelQ3.new_load=Constraint(rule=nl_rule)

##Objective definition
#minimize the cost
def cost_rule(modelQ3):
    return sum(modelQ3.c [j] for j in M)
modelQ3.cost = Objective(rule=cost_rule, sense=minimize)

##Selection of the solver: use glpk
opt = SolverFactory('glpk')
##Solving the model
results = opt.solve(modelQ3,logfile=modelQ3.name+'.yml')
##
modelQ3.display(modelQ3.name+'.yml')
#print(value(modelQ3.cost.expr))

预期结果是在上述条件下修复的最佳价格


Tags: ofrminfromalphasourceruletm