首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用gekko变量求和的意外结果

使用gekko变量求和的意外结果
EN

Stack Overflow用户
提问于 2021-05-01 11:10:52
回答 1查看 34关注 0票数 2

我正在优化一个简单的问题,其中我正在对中间变量求和,以满足约束,其中总和需要低于某个预算。

当我使用sumnp.sum打印总和时,我得到以下结果:(((((((((((((((((((((((((((((i429+i430)+i431)+i432)+i433)+i434)+i435)+i436)+i437)+i438)+i439)+i440)+i441)+i442)+i443)+i444)+i445)+i446)+i447)+i448)+i449)+i450)+i451)+i452)+i453)+i454)+i455)+i456)+i457)+i458)

下面是创建变量和求和的命令。

代码语言:javascript
运行
复制
x = m.Array(m.Var, (len(bounds)),integer=True) 
sums = [m.Intermediate(objective_inverse2(x,y)) for x,y in zip(x,reg_feats)]

我对中间变量的理解是根据x的值动态计算的变量,它是决策变量。

下面是最大预算约束的求和函数。

代码语言:javascript
运行
复制
m.Equation(np.sum(sums) < max_budget)

解决问题会返回一个错误,指出没有可行的解决方案,即使存在微不足道的解决方案也是如此。此外,删除此约束将返回一个自然不违反最大预算约束的解决方案。

我对中间变量有什么误解,以及如何对它们求和。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-03 20:29:11

如果没有一个完整的、最小的问题,就很难诊断问题。以下是重现该问题的尝试:

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

m = GEKKO()
nb = 5
x = m.Array(m.Var,nb,value=1,lb=0,ub=1,integer=True)
y = m.Array(m.Var,nb,lb=0)

i = []  # intermediate list
for xi,yi in zip(x,y):
    i.append(m.Intermediate(xi*yi))
m.Maximize(m.sum(i))
m.Equation(m.sum(i)<=100)

m.options.SOLVER = 1
m.solve()

print(x)
print(y)

除了创建中间数列表之外,求和还可以与列表理解的结果一起发生。这样,就只创建了一个中间值。

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

m = GEKKO()
nb = 5
x = m.Array(m.Var,nb,value=1,lb=0,ub=1,integer=True)
y = m.Array(m.Var,nb,lb=0)
sums = m.Intermediate(m.sum([xi*yi for xi,yi in zip(x,y)]))
m.Maximize(sums)
m.Equation(sums<=100)

m.options.SOLVER = 1
m.solve()

print(sums.value)
print(x)
print(y)

在这两种情况下,最佳解决方案都是:

代码语言:javascript
运行
复制
 ---------------------------------------------------
 Solver         :  APOPT (v1.0)
 Solution time  :   1.560000001336448E-002 sec
 Objective      :   -100.000000000000     
 Successful solution
 ---------------------------------------------------
 
[100.0]
[[1.0] [1.0] [1.0] [1.0] [1.0]]
[[20.0] [20.0] [20.0] [20.0] [20.0]]

尝试使用Gekko m.sum()函数来提高求解效率,特别是对于大型问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67342547

复制
相关文章

相似问题

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