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

使用 gekko

如何解决使用 gekko

我正在尝试使用 gekko 来约束多变量非线性回归。我约束了参数 c[i],但不能约束同时具有参数和变量的部分函数

基本上,0 (xd[10]**c[10])(xd[11]**(c[11]+c[12]*xd[ 12]))

import numpy
import pandas as pd

#Dataframe from excel (imported x0-x12 from excel)

#Gekko:

from gekko import GEKKO

m = GEKKO(remote=False); m.options.IMODE=2#parameter regression

c  = m.Array(m.FV,13)#array of 13 fixed parameter

for ci in c:
    ci.STATUS=1#calculate fixed parameter

    ci.LOWER =0#constraint: lower limit

    ci.UPPER =1#constraint: lower limit

#Define variables

xd = m.Array(m.Param,13); xd[0].value=x0; xd[1].value=x1; xd[2].value=x2; xd[3].value=x3; 
xd[4].value=x4; xd[5].value=x5; xd[6].value=x6; xd[7].value=x7; xd[8].value=x8; xd[9].value=x9;
xd[10].value=x10; xd[11].value=x11; xd[12].value=x12


yd = m.Param(y); yp = m.Var()

#Equation of custom function

m.Equation(yp==(c[0]*xd[0]+c[1]*xd[1]+c[2]*xd[2]+c[3]*xd[3]+c[4]*xd[4]+c[5]*xd[5]+c[6]*xd[6]+c[7]*xd[7]+
                c[8]*xd[8]+c[9]*xd[9])*(xd[10]**c[10])*(xd[11]**(c[11]+c[12]*xd[12])))

#Minimize difference between actual and predicted y

m.Minimize((yd-yp)**2)

#Solve

m.solve(disp=False)

#Retrain parameter values

a = [c[i].value[0] for i in range(13)]

print(a) 

解决方法

您可以定义新的不等式约束。

services.gnome3.gnome-keyring.enable = true;

或者定义一个有上下限的新变量。

m.Equation(xd[10]**c[10])*(xd[11]**(c[11]+c[12]*xd[12])>=0)
m.Equation(xd[10]**c[10])*(xd[11]**(c[11]+c[12]*xd[12])<=1)

这是第二种方法的完整脚本。

#Inequality Constraints
z = m.Var(lb=0,ub=1)
m.Equation(z==(xd[10]**c[10])*(xd[11]**(c[11]+c[12]*xd[12])))

这使用随机数,而不是您的问题中没有的 Excel 导入数据。

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