首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何简化Gekko中的大规模NLP模型?

如何简化Gekko中的大规模NLP模型?
EN

Stack Overflow用户
提问于 2022-07-08 07:12:41
回答 1查看 82关注 0票数 2

我对Python中的Gekko优化仍然很陌生,而且我在扩展我的NLP问题时遇到了问题。在尝试多次(以不同的方式)调用函数m.Sum、使用m.Intermediate和使用列表理解来缩小表示模型的字符串的大小之后,我仍然会在优化一个只有200个变量的模型时遇到这个错误。当我只对80个变量进行优化时,该模型就能工作。

这是我得到的错误:

代码语言:javascript
运行
复制
APM model error: string > 15000  characters
 Consider breaking up the line into multiple equations

 The may also be due to only using newline character CR
   instead of CR LF (for Windows) or LF (for MacOS/Linux)
 To fix this problem, save APM file with appropriate newline characters

 STOPPING...

下面是给我带来麻烦的代码片段:

代码语言:javascript
运行
复制
def function_to_minimize(variables0,m):
    somme = [ m.Intermediate(
                    variables0[0+(4*i)] * df['value1'][i] + \
                    variables0[1+(4*i)] * df['value2'][i] + \
                    variables0[2+(4*i)] * df['value3'][i] + \
                    variables0[3+(4*i)] * df['value4'][i]
     ) for i in range(0,hours)] 

    somme = reduce(lambda a, b: a+b, somme)
    m.Obj(m.Intermediate(somme))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-08 17:49:43

尝试多次调用m.Obj(),而不是创建一个求和。下面是演示这个问题的一个最小的完整问题。如果v = m.Array(m.Var,100,lb=0,ub=10)是一个由更多变量组成的数组,那么就可以达到15,000个方程的长度限制。

代码语言:javascript
运行
复制
from gekko import GEKKO
m = GEKKO()
v = m.Array(m.Var,100,lb=0,ub=10)
hours = 24
def function_to_minimize(variables0,m):
    somme = [ m.Intermediate(
                    variables0[0+(4*i)] * 1 + \
                    variables0[1+(4*i)] * 2 + \
                    variables0[2+(4*i)] * 3 + \
                    variables0[3+(4*i)] * 4
     ) for i in range(0,hours)] 
    somme = sum(somme)
    m.Minimize(m.Intermediate(somme))
function_to_minimize(v,m)
m.solve()

使用m.sum()来避免这个限制。

代码语言:javascript
运行
复制
from gekko import GEKKO

m = GEKKO()
v = m.Array(m.Var,100,lb=0,ub=10)
hours = 24

def function_to_minimize(variables0,m):
    somme = [ m.Intermediate(
                    variables0[0+(4*i)] * 1 + \
                    variables0[1+(4*i)] * 2 + \
                    variables0[2+(4*i)] * 3 + \
                    variables0[3+(4*i)] * 4
     ) for i in range(0,hours)] 

    m.Minimize(m.sum(somme))
function_to_minimize(v,m)
m.solve()

或者为每个元素分别使用m.Obj()m.Minimize()调用[m.Minimize(s) for s in somme]

代码语言:javascript
运行
复制
from gekko import GEKKO

m = GEKKO()
v = m.Array(m.Var,100,lb=0,ub=10)
hours = 24

def function_to_minimize(variables0,m):
    somme = [ m.Intermediate(
                    variables0[0+(4*i)] * 1 + \
                    variables0[1+(4*i)] * 2 + \
                    variables0[2+(4*i)] * 3 + \
                    variables0[3+(4*i)] * 4
     ) for i in range(0,hours)] 

    [m.Minimize(s) for s in somme]
function_to_minimize(v,m)
m.solve()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72907917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档