我正在 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
php - 指定源语言,如果 default_locale 不是英语
node.js - 即时将文件从 S3 移动到 AWS EFS
google-cloud-platform - 接受 Google 帐户转移请求时如何解决消息 "T
swift - 为什么字典的时间复杂度是 O(n) 而不是 O(1)