variables - 如何在 Pyomo 模型中设置决策变量的初始值

我正在 Pyomo 中研究混合整数编程模型,并希望为我的决策变量(在我的例子中是一个矩阵)设置初始值。我该怎么做?

更具体地说,以下可以成功地在(标量)决策变量 y 上设置初始猜测值 2。

model.y = Var(initialize=2)

但是,如果 model.x 是一个 3×2 矩阵并且我想对其每个元素进行初始猜测怎么办?例如,我尝试了类似以下的操作但没有成功:

model.I = RangeSet(3)
model.J = RangeSet(2)
model.K = Set(within=model.I *model.J)
model.x = Var(model.K, initialize=np.randomize(3,2))

有人可以帮忙吗?非常感谢。

最佳答案

这取决于您希望将每个元素的值初始化为什么。例如,如果您希望将 model.x 中的每个元素都初始化为相同的值,例如 1,您可以执行以下操作:

from pyomo.environ import Var, RangeSet, ConcreteModel

model = ConcreteModel()

model.I = RangeSet(3)
model.J = RangeSet(2)
model.x = Var(model.I, model.J, initialize=1)

或者,如果您对每个元素都有特定的值,则可以构造一个索引键到值的字典:

model = ConcreteModel()

model.I = RangeSet(1)
model.J = RangeSet(2)
init_dict = {(1,1):2,
             (1,2):4}
model.x = Var(model.I, model.J, initialize=init_dict)

对于较大的集合,您可以使用类似 itertools.product 的东西来生成所有键,并使用 np.random.randomint 来生成具有列表理解的随机值。这将使您可以添加可选参数,例如随机值上限/下限。使用 model.x.pprint() 查看初始化值。

https://stackoverflow.com/questions/63875978/

相关文章:

tensorflow - 是否有 L-BFGS 的 tf.keras.optimizers 实现?

github - 最初发布一个github包显示 "Username must not be nul

visual-studio - VS代码-OSS : Downloading files and f

python - 使用 Python 的双向方差分析

php - 指定源语言,如果 default_locale 不是英语

node.js - 即时将文件从 S3 移动到 AWS EFS

google-cloud-platform - 接受 Google 帐户转移请求时如何解决消息 "T

swift - 为什么字典的时间复杂度是 O(n) 而不是 O(1)

java - 使用 Spring JPA/Hibernate 按不同值批量更新

node.js - NodeJS Docker 当前与最新