微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Gekko:使用先前定义的变量

如何解决Gekko:使用先前定义的变量

这是我第一次尝试使用 Gekko 优化。

我的问题是:

有 100 美元,我必须决定分配多少钱(按百分比)用于购买或储蓄。节省 1 美元的利润为 15 美元,购买的利润为 12 美元。我必须考虑分配给储蓄金额的 5%,因此结果为:

x_save: % saving
factor = 0.05 </pre>
save_quantity = min(x_save * 1.05,100)

我在 Gekko 上写这篇文章的尝试如下:

m = GEKKO()
m.options.soLVER = 3
### Initialize variables
x_save     = m.Var(value=0,lb=0,ub=60,integer=True)

money = 100
saving_return = 15
buying_return = 12
factor = 1.05

save_quantity = m.min2(x_save * factor,100) * money
buy_quantity = money - save_quantity 

m.Obj(-(save_quantity * saving_return + buy_quantity * buying_return))
m.solve(disp=False)

我有这样的错误 (-(((i7)(15))+(((100-(100-i6)))(12))))

请问,有人可以帮我吗?我不知道我是否以正确的方式写了我的问题

解决方法

e 上使用上限约束而不是 save_quantity 函数。另外,等式应该是m.min2()而不是m.Equation(save_quantity==x_save/100 * factor * money)吗?

m.Equation(save_quantity==x_save * factor * money)

解决办法是:

from gekko import GEKKO
m = GEKKO()
m.options.SOLVER = 1

x_save = m.Var(value=0,lb=0,ub=60,integer=True)

money = 100
saving_return = 15
buying_return = 12
factor = 1.05

save_quantity = m.Var(ub=100)
m.Equation(save_quantity==x_save/100 * factor * money)
buy_quantity = money - save_quantity 

m.Maximize(save_quantity * saving_return \
           + buy_quantity * buying_return)
m.solve(disp=False)

print(x_save.value[0])
print(save_quantity.value[0])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。