gpt4 book ai didi

python - pyomo环境下添加约束

转载 作者:太空宇宙 更新时间:2023-11-03 15:53:21 25 4
gpt4 key购买 nike

我正在 pyomo.environ 包下工作。我尝试添加一个像这样的约束 /image/r1Smc.jpg 。 i 和 j 是节点的索引。

node_set包含N0到N5,共6个节点。arc_set是一个存储节点之间链接的集合,例如[N1,N2],并且它不包含任何自环弧,例如[N1,N1]。 F集包含[F1,F2,F3]

所以,我做了这样的事情:

def c1_rule(m, j):
return sum(m.X[e[0], j, f] for e in m.arc_set if e[1] != 'N0' for f in m.f_set) == 1
m.c1_cons = pe.Constraint(m.node_set, rule= c1_rule)

但是,我意识到当我的 j 等于 i(这里是 e[0])时,这会触发错误,因为 m.X[i, j, k] 的索引没有类似 [N1, N1] 的内容,F1]。我有一个想法是将自循环弧添加到弧集中。还有其他方法可以避免这个错误吗?

最佳答案

首先,警告:您显示的约束假设所有 i 和 j 都存在 X[i,j,f]:

constraint

否则,它会被描述为这样的:

constraints

因此,如果您严格遵循此约束,则您的代码是正确的,您只需要确保参数/变量 X 的所有条目(包括当 i == j 时)都存在。

<小时/>

现在,您会收到错误消息,因为无论 arc_set 中的内容如何,​​都会为所有 jf 生成约束规则。

因此,如果 arc_set 中有 [N1, N2],则变量 e 将等于 [N1, N2],并且当 j = N1f = F1,以下规则:

m.X[e[0], j, f]

将被翻译为:

m.X[N1, N1, F1]

如果 X 是模型的参数并且条目 X[N1, N1, F1] 不存在,这可能会触发错误。

解决此问题的方法是在约束规则的列表理解中包含 e[0] != j:

def c1_rule(m, j):
return sum(m.X[e[0], j, f] for e in m.arc_set for f in m.f_set
if e[1] != 'N0' and e[0] != j) == 1
m.c1_cons = pe.Constraint(m.node_set, rule= c1_rule)

关于python - pyomo环境下添加约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41037241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com