Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将Pyomo集构建为Python字典

将Pyomo集构建为Python字典
EN

Stack Overflow用户
提问于 2017-01-06 14:11:48
回答 1查看 552关注 0票数 0

例如,我想从一个名为dictOfList的列表中创建Pyomo集的字典。dictOfList构建如下:

代码语言:javascript
运行
AI代码解释
复制
dictOfList= {}
dictOfList[1] = [10,11,12]
dictOfList[2] = [20,21]
dictOfList[3] = [31,32,33,34]

现在,我希望将值[10,11,12][20,21][31,32,33,34]放在Pyomo集的Pyomo字典中,如下所示:

代码语言:javascript
运行
AI代码解释
复制
model.dictOfSets = {}
for el in dictOfList:
    model.dictOfSets[el] = Set(initialize=dictOfList[el])

然后,如果我使用另一个简单的for循环显示集合的值:

代码语言:javascript
运行
AI代码解释
复制
for el in dictOfList:
    model.dictOfSets[el].display()

这些集合似乎没有正确构建,因为它在运行控制台中显示了这一点:

代码语言:javascript
运行
AI代码解释
复制
_unknown_ : Dim=0, Dimen=1, Size=0, Domain=None, Ordered=False, Bounds=None
    Not constructed
_unknown_ : Dim=0, Dimen=1, Size=0, Domain=None, Ordered=False, Bounds=None
    Not constructed
_unknown_ : Dim=0, Dimen=1, Size=0, Domain=None, Ordered=False, Bounds=None
    Not constructed

有没有办法在Python字典中构建Pyomo集?现在,我已经使用了普通的Python列表,但是它在较大的模型中给我带来了很长的处理时间,我知道最好使用Pyomo集来更快地构建约束。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-06 15:37:19

Set没有被完全构造,因为它们从未被分配给一个Block或模型对象。虽然并不完全是您所要求的(您实际上并没有在您的模型上得到dict of Sets ),但是要获得您想要的效果,最简单的方法是实际创建一个索引的Set

代码语言:javascript
运行
AI代码解释
复制
dictOfList= {}
dictOfList[1] = [10,11,12]
dictOfList[2] = [20,21]
dictOfList[3] = [31,32,33,34]
model.S = Set(dictOfList.keys(), initialize=dictOfList)

如果您打印模型(model.pprint()),您将得到:

代码语言:javascript
运行
AI代码解释
复制
2 Set Declarations
    S : Dim=1, Dimen=1, Size=9, Domain=None, ArraySize=3, Ordered=False, Bounds=None
        Key : Members
          1 : [10, 11, 12]
          2 : [20, 21]
          3 : [31, 32, 33, 34]
    S_index : Dim=0, Dimen=1, Size=3, Domain=None, Ordered=False, Bounds=(1, 3)
        [1, 2, 3]

要实际创建dict of Set,还需要将每个单独的Set分配给模型,以便正确构造模型。像这样的东西可以起作用:

代码语言:javascript
运行
AI代码解释
复制
model.dictOfSets = {}
for el in dictOfList:
    model.dictOfSets[el] = Set(initialize=dictOfList[el])
    setattr(model, 'dictOfSets_member_%s' % (el,), model.dictOfSets[el])
for el in dictOfList:
    model.dictOfSets[el].display()

给出

代码语言:javascript
运行
AI代码解释
复制
dictOfSets_member_1 : Dim=0, Dimen=1, Size=3, Domain=None, Ordered=False, Bounds=(10, 12)
    [10, 11, 12]
dictOfSets_member_2 : Dim=0, Dimen=1, Size=2, Domain=None, Ordered=False, Bounds=(20, 21)
    [20, 21]
dictOfSets_member_3 : Dim=0, Dimen=1, Size=4, Domain=None, Ordered=False, Bounds=(31, 34)
    [31, 32, 33, 34]

编辑:如果您显式地创建索引Set的索引,您可以有更复杂的索引。

代码语言:javascript
运行
AI代码解释
复制
model.S_IDX = Set(initialize=dictOfList.keys())
model.S = Set(model.S_IDX, initialize=dictOfList)

通过显式创建集合,您可以拥有任意复杂的键。注意,在某些情况下,您可能必须使用dimen=关键字显式设置索引集的“维度”:

代码语言:javascript
运行
AI代码解释
复制
dictOfList = { (1,2): [10,11,12],
               (2,3): [20,21],
               (1,3): [31,32,33,34],
}
model.S_IDX = Set(initialize=dictOfList.keys(), dimen=2)
model.S = Set(model.S_IDX, initialize=dictOfList)

如果您希望元组具有不同的长度,则尤其如此:

代码语言:javascript
运行
AI代码解释
复制
dictOfList = { (1,): [10,11,12],
               (2,3): [20,21],
               (1,3,4): [31,32,33,34],
}
model.S_IDX = Set(initialize=dictOfList.keys(), dimen=None)
model.S = Set(model.S_IDX, initialize=dictOfList)

其中,model.pprint()给出:

代码语言:javascript
运行
AI代码解释
复制
2 Set Declarations
    S : Dim=None, Dimen=1, Size=9, Domain=None, ArraySize=3, Ordered=False, Bounds=None
        Key       : Members
             (1,) : [10, 11, 12]
        (1, 3, 4) : [31, 32, 33, 34]
           (2, 3) : [20, 21]
    S_IDX : Dim=0, Dimen=None, Size=3, Domain=None, Ordered=False, Bounds=None
        [(1,), (1, 3, 4), (2, 3)]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41515186

复制
相关文章
蒙特卡罗计算积分
通常情况下,我们不能解析地求解积分,必须借助其他方法,其中就包括蒙特卡罗积分。你可能还记得,函数的积分可以解释为函数曲线下的面积。
磐创AI
2020/11/09
7800
蒙特卡罗计算积分
蒙特卡罗方法入门
蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值。
统计学家
2019/04/23
4990
蒙特卡罗方法入门
蒙特卡罗方法入门
本文通过五个例子,介绍蒙特卡罗方法(Monte Carlo Method)。 一、概述 蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值。 它非常强大和灵活,又
ruanyf
2018/04/13
9700
蒙特卡罗方法入门
MCMC(一)蒙特卡罗方法
    作为一种随机采样方法,马尔科夫链蒙特卡罗(Markov Chain Monte Carlo,以下简称MCMC)在机器学习,深度学习以及自然语言处理等领域都有广泛的应用,是很多复杂算法求解的基础。比如我们前面讲到的分解机(Factorization Machines)推荐算法,还有前面讲到的受限玻尔兹曼机(RBM)原理总结,都用到了MCMC来做一些复杂运算的近似求解。下面我们就对MCMC的原理做一个总结。
刘建平Pinard
2018/08/14
1K0
MCMC(一)蒙特卡罗方法
蒙特卡罗方法计算定积分
0.0 (2.666666666666667, 2.960594732333751e-14)
裴来凡
2022/05/29
3360
蒙特卡罗方法计算定积分
MCMC之蒙特卡罗方法
马尔可夫链蒙克卡罗(Markov Chain Monte Carlo,MCMC)是一种随机采样方法,在机器学习、深度学习及自然语言处理等领域都有广泛的应用,是很多复杂算法求解的基础,例如受限玻尔兹曼机(RBM)便是用MCMC来做一些复杂算法的近似求解。在具体讲解什么是MCMC之前,我们先看看MCMC可以解决什么样的问题,为什么需要MCMC方法。
小一
2019/08/14
7290
MCMC之蒙特卡罗方法
随机采样方法——蒙特卡罗方法
地址:http://www.cnblogs.com/pinard/p/6625739.html
机器学习算法工程师
2018/08/17
2.8K0
随机采样方法——蒙特卡罗方法
蒙特卡罗方法计算圆周率
N= 100 pi= 3.24 N= 1000 pi= 3.124 N= 10000 pi= 3.1464 N= 100000 pi= 3.14244 N= 1000000 pi= 3.142796
裴来凡
2022/05/29
5990
蒙特卡罗方法计算圆周率
时间序列的蒙特卡罗交叉验证
交叉验证应用于时间序列需要注意是要防止泄漏和获得可靠的性能估计本文将介绍蒙特卡洛交叉验证。这是一种流行的TimeSeriesSplits方法的替代方法。
deephub
2023/02/01
1.2K0
如何通过Python实现蒙特卡罗模拟算法
蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法,是通过使用随机数(或更常见的伪随机数)来解决很多计算问题的方法,将所求解的问题同一定的概率模型相联系,用计算机实现统计模拟或抽样,以获得问题的近似解。
活用数据
2022/04/02
3K0
如何通过Python实现蒙特卡罗模拟算法
伪蒙特卡洛(Quasi-Monte Carlo, QMC)随机
分享一道由群员“Melbourne”,外号 “Paper Machine”,有数学小王子之称的小伙伴分享的题目!
程序员小浩
2020/03/30
2.1K0
伪蒙特卡洛(Quasi-Monte Carlo, QMC)随机
点云蒙特卡罗卷积网络Monte Carlo Convolution
标题:Monte Carlo Convolution for Learning on Non-Uniformly Sampled Point Clouds
点云乐课堂
2020/05/18
1.1K0
误码率仿真,蒙特卡罗方法,置信度
误码率是通信系统性能评价的一个重要指标,在给定信道、编译码方式下,误码率是一个固定取值。少部分情况下,可以通过理论推导得到理论的误码率,但是在大多数情况下,理论误码率无法推得,这时往往考虑采用蒙特卡罗方法对误码率进行仿真。(误比特率、误码率同理)
sea-wind
2019/07/31
2K0
误码率仿真,蒙特卡罗方法,置信度
六西格玛与商业分析:蒙特卡罗模拟
做生意就是要承担风险。无论您是决定成为企业家、开设新办公室还是投资一家公司,您都在承担风险。那么,如何准确预测下一个商业决策的风险呢?六西格玛是您首选。凭借数据分析的基础,六西格玛被证明是组织运营的绝佳工具。这就是为什么六西格玛专业人员使用蒙特卡洛模拟解决问题和风险评估需求的原因!
用户9972271
2023/02/15
2880
蒙特卡罗法近似求解圆周率π
1. 原理 2. 模拟代码 # -*- coding:utf-8 -*- # @Python Version: 3.7 # @Time: 2020/5/2 9:02 # @Author: Michae
Michael阿明
2020/07/13
4790
蒙特卡罗法近似求解圆周率π
Python使用pycuda在GPU上并行处理批量判断素数
借助于扩展库pycuda,可以在Python中访问NVIDIA显卡提供的CUDA并行计算API,使用非常方便。安装pycuda时要求已正确安装合适版本的CUDA和Visual Studio(注意,并不是版本越新越合适,目前2015暂时还不行,最好使用VS2013),然后再使用pip安装pycuda。 下面的代码用来统计100000000之内的所有素数个数。 import time import pycuda.autoinit import pycuda.driver as drv import numpy
Python小屋屋主
2018/04/16
2.1K0
Python使用pyopencl在GPU上并行处理批量判断素数
扩展库pyopencl使得可以在Python中调用OpenCL的并行计算API。OpenCL(Open Computing Language)是跨平台的并行编程标准,可以运行在个人电脑、服务器、移动终端以及嵌入式系统等多种平台,既可以运行在CPU上又可以运行于GPU上,大幅度提高了各类应用中的数据处理速度,包括游戏、娱乐、医学软件以及科学计算等等。 import numpy as np import pyopencl as cl import pyopencl.array from pyopencl.ele
Python小屋屋主
2018/04/16
1.9K0
强化学习(四)用蒙特卡罗法(MC)求解
    在强化学习(三)用动态规划(DP)求解中,我们讨论了用动态规划来求解强化学习预测问题和控制问题的方法。但是由于动态规划法需要在每一次回溯更新某一个状态的价值时,回溯到该状态的所有可能的后续状态。导致对于复杂问题计算量很大。同时很多时候,我们连环境的状态转化模型$P$都无法知道,这时动态规划法根本没法使用。这时候我们如何求解强化学习问题呢?本文要讨论的蒙特卡罗(Monte-Calo, MC)就是一种可行的方法。
刘建平Pinard
2018/08/30
8590
强化学习(四)用蒙特卡罗法(MC)求解
Monte Carlo(MC) Policy Evaluation 蒙特·卡罗尔策略评估
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Steve Wang
2019/10/22
6920
Monte Carlo(MC) Policy Evaluation 蒙特·卡罗尔策略评估
如何实现马尔可夫链蒙特卡罗MCMC模型、Metropolis算法?
这只是众多算法之一。这个术语代表“马尔可夫链蒙特卡洛”,因为它是一种使用“马尔可夫链”(我们将在后面讨论)的“蒙特卡罗”(即随机)方法。MCMC只是蒙特卡洛方法的一种,尽管可以将许多其他常用方法看作是MCMC的简单特例。
拓端
2021/12/15
1.3K0
如何实现马尔可夫链蒙特卡罗MCMC模型、Metropolis算法?

相似问题

骨骼动画

10

优化骨骼动画

10

高效骨骼动画

20

Fbx动画没有骨骼或单一骨骼

20

阴影映射骨动画模型

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文