程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

关注本站官方公众号:程序员总部,领取三大福利!
福利一:python和前端辅导
福利二:进程序员交流微信群,专属于程序员的圈子
福利三:领取全套零基础视频教程(python,java,前端,php)

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Gekko Python:内存分配失败

发布于2022-08-09 03:19     阅读(328)     评论(0)     点赞(4)     收藏(4)


作为问题的后续: 如何在 Gekko Python 中简化大规模 NLP 模型? 我仍在试图弄清楚为什么 gekko 给我这个错误:

内存分配失败

错误:未找到“results.json”。检查上面的其他错误详细信息

这些是我的限制:

def contraintesPuissance(self):

    Pmin = self.df_donnees_techniques["Puissance min"].to_list()
    Pmax = self.df_donnees_techniques["Puissance max"].to_list()

    self.model.Equations(
    [
        [
            self.on_off_var[ idx + (heure*self.nb_actifs) ] \
                * Pmax[idx] / self.getRendement(idx,heure) \
                - self.variables[ idx + (heure*self.nb_actifs) ] >= 0,

            self.variables[ idx + (heure*self.nb_actifs) ] \
                - self.on_off_var[ idx + (heure*self.nb_actifs) ] \
                * Pmin[idx] / self.getRendement(idx,heure) >= 0
        ]
        for heure in range(self.nb_heure)
        for idx in range(self.nb_actifs)
    ]
    )

def contraintesBesoinsConsommation(self):
    self.model.Equations(
            [
                [
                    sum([self.variables[idx + (heure*self.nb_actifs)]*self.getRendement(idx,heure) for idx in range(self.nb_actifs)])  \
                        - self.Analyse_df['besoins_chaud'][heure] == 0
                ]
                for heure in range(self.nb_heure)
            ]
        )

def contraintesTxENR(self):
    intermed = [self.model.Intermediate(
                    self.variables[ idx + (heure*self.nb_actifs) ] * self.getRendement(idx,heure)
                ) for heure in range(self.nb_heure) for idx in range(self.nb_actifs)
                ]

    numerateur = self.model.sum(
        [intermed[idx + (heure*self.nb_actifs)] * self.getTaux(idx) for heure in range(self.nb_heure) for idx in range(self.nb_actifs)]
    )
    denominateur = self.model.sum(intermed)

    self.model.Equation( numerateur / denominateur - self.Tx_ENR_cible >= 0)

def contrainteEmissions(self):
    self.model.Equation( self.VLE_max_gaz - self.emissions("Gaz_1") >= 0 )
    # !! à arrêter 

这是我的目标函数:

    def func_cout_NRJV2_gekko(self):

    somme = [
        sum([self.variables[ idx + (heure*self.nb_actifs) ] * self.donnees_prix_NRJ[self.actifs_instancies[idx]][heure] for idx in range(self.nb_actifs)])
    for heure in range(self.nb_heure)]      
    [self.model.Minimize(s) for s in somme]
    penalite = self.model.if3(self.Sum_NRJ("Bois") - self.take_or_pay_bois, self.penalite_bois, 0) # Penalité take or pay
    self.model.Minimize(penalite)  

如果需要更多信息,我可以提供,但代码确实很大。


解决方案


您使用的是什么操作系统?问题Memory allocation failed可能是问题> 4 GB。在本地解决:Linux / MacOS 和云解决:Linux 这不是问题,因为可执行文件是 64 位的。对于 Windows,本地可执行文件仍然是 32 位,因此可能会达到 RAM 限制。这可能会在不久的将来发生变化,但这可能是限制。

即使您使用的是 64 位可执行文件,也可以尝试以下方法。

  1. 通过使用 . 打开本地运行文件夹来检查模型m.open_folder()gk0_model.apm使用文本编辑器打开文件。变量将具有不同的内部名称。可以通过使用name参数命名变量来更改它们,x = m.Var(value=0,name='x')以使其更具可读性。

  2. 将任何常量或参数转换为普通的 Python 数字。这可以大大减少内存需求,因为它们没有添加到自动微分中。

  3. 如果有总和可以np.sum()代替m.sum(),请改用它,以便在将模型的某些部分提供给求解器之前对其进行预先计算。

  4. 用于m.options.REDUCE=3扫描模型 3(或更多)次以减少内存需求。这消除了诸如x==1y+x==1z+y+x==`` by replacing them with x=1 , y=0 , z=0` 等方程作为预求解。

  5. if3()函数会创建一些额外的变量和方程,并且可以增加模型的大小。如果某些条件在预处理时总是大于零或小于零,那么请尝试消除这些条件。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1652061/fe4e26ee7905a11bf41c/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)