【发布时间】:2020-10-03 12:42:17
【问题描述】:
我是 Pyomo/Python 的新用户。在学习pyomo的过程中,需要解决一些优化问题。
我需要在总发电量和总需求量(800 兆瓦)之间取得平衡。 如果我想找到'Sum(ap^2+bp+c))'的最小值。这是数学模型:mathematics model of this problem
如何构建一个抽象模型,我可以从下表的同一行中选择 a、b、c 的值?如果我单独设置“集合”,那么 abc 的值将来自不能满足公式的不同行。以及如何在 Pmin 和 Pmax 之间设置随机值?使用两个约束来限制值? 这真的让我很困惑。
from pyomo.environ import *
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
import random
model = AbstractModel()
model.J = Set()
model.A = Param(model.J)
model.B = Param(model.J)
model.C = Param(model.J)
model.P_min = Param(model.J)
model.P_max= Param(model.J)
model.P = Var(model.J, domain=NonNegativeReals)
def obj_expression(model):
return sum(model.A* model.P**2+model.B*model.P+model.C for j in model.J)
model.OBJ = Objective(rule=obj_expression, sense=minimize)
# Upper bounds rule
def upper_bounds_rule(model,j):
return model.P[j] <= model.P_max[j]
model.upper = Constraint(model.J,rule=upper_bounds_rule)
# Lower bounds rule
def lower_bounds_rule(model, j):
return model.P[j] >= model.P_min[j]
model.lower = Constraint(model.J, rule=lower_bounds_rule)
def rule_eq1(model,j):
return sum(model.P[j] >= 800;
model.eq1 = Constraint(model.J, rule=rule_eq1)
opt = SolverFactory('Ipopt')
instance = model.create_instance("E:/pycharm_project/PD/pd.dat")
results = opt.solve(instance) # solves and updates instance
#data file
# Creating the set J:
set J := g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 ;
# Creating Parameters A, B, C, P_min, P_max:
param : A B C P_min P_max:=
g1 0.0148 12.1 82 80 200
g2 0.0289 12.6 49 120 320
g3 0.0135 13.2 100 50 150
g4 0.0127 13.9 105 250 520
g5 0.0261 13.5 72 80 280
g6 0.0212 15.4 29 50 150
g7 0.0382 14.0 32 30 120
g8 0.0393 13.5 40 30 110
g9 0.0396 15.0 25 20 80
g10 0.0510 14.3 15 20 60
;
你能帮我解决这个问题吗?谢谢!
薇薇
【问题讨论】:
-
到目前为止您尝试过什么?你的模型写出来了吗?此外,如果您已经将数据(上图)放在数据框中,则应该直接将其放入具体模型中。不需要摘要。
-
嗨,杰夫。上次,你帮我纠正了我的模型(那个运输问题)。我所做的如上所示。我需要学习抽象模型,因为我在以后的学习中需要使用大数据文件。我不知道如何从表的同一行中选择 a、b、c 的值。以及如何在 Pmin 和 Pmax 之间设置随机值?使用两个约束来限制值?这真的让我很困惑。
-
哦,来吧。 :) 这是一个相当微弱的尝试。很多错误/缺少索引/等。重新看看你的问题。你需要多少个索引?不确定您在哪里看到随机数,但阅读
random上的 dox 可能也会有所帮助。 -
真的很抱歉这个模型。我会尝试纠正它。但是如何从表的同一行中选择a、b、c的值呢?
-
对所有 3 个使用相同的索引?
标签: python optimization pyomo