Consider an equation in gekko involving matrix of MVs, m.Var, m.CV and m.Param that includes a non-linear regression based maximization problem.
How do I add a time dependent decision variable 'covar' to the current code such that:
covar(at time t) = [1, gekko_attr1 ** attr1_pow, gekko_attr2 ** attr2_pow, gekko_attr3 ** attr3_pow] * covar(at time t-1) * Transpose([1, gekko_attr1 ** attr1_pow, gekko_attr2 ** attr2_pow, gekko_attr3 ** attr3_pow]) + constant
Dataset:
https://drive.google.com/file/d/10tVHghTvRThsDfyzprINdlVTtJTUbSyQ/view?usp=sharing
def gekko_fun():
xm1 = np.array(data['Attr1'])
xm2 = np.array(data['Attr2'])
xm3 = np.array(data['Attr3'])
ym = np.array(data['Result'])
m = GEKKO(remote=False)
# parameters
gekko_attr1 = m.Param(value = xm1)
gekko_attr2 = m.Param(value = xm2)
gekko_attr3 = m.Param(value = xm3)
intercept = m.MV(lb=0, name="Intercept")
attr1_multiplier = m.MV(lb=0)
attr2_multiplier = m.MV(lb=0)
attr3_multiplier = m.MV(lb=0)
intercept_lambda = m.MV(lb=0, ub = 1)
attr1_lambda = m.MV(lb=0, ub = 1)
attr2_lambda = m.MV(lb=0, ub = 1)
attr3_lambda = m.MV(lb=0, ub = 1)
attr1_pow = m.MV(lb=0, ub=1)
attr2_pow = m.MV(lb=0, ub=1)
attr3_pow = m.MV(lb=0, ub=1)
intercept.STATUS = 1
attr1_multiplier.STATUS = 1
attr2_multiplier.STATUS = 1
attr3_multiplier.STATUS = 1
intercept_lambda.STATUS = 1
attr1_lambda.STATUS = 1
attr2_lambda.STATUS = 1
attr3_lambda.STATUS = 1
attr1_lambda_pow.STATUS = 1
attr2_lambda_pow.STATUS = 1
attr3_lambda_pow.STATUS = 1
control_value = m.CV(value=ym)
control_value.STATUS=1
pred_value = m.Var
error = m.Var
maximized_value = m.Var
m.options.IMODE = 2
m.options.MAX_ITER = 999
m.Equation(pred_value == (
np.dot(
[[1, gekko_attr1**attr1_pow, gekko_attr2**attr2_pow, gekko_attr3**attr3_pow]]
,#multiply
np.add(
np.dot(
[
[intercept_lambda,0,0,0],
[0,attr1_lambda,0,0],
[0,0,attr2_lambda,0],
[0,0,0,attr3_lambda]
]
,#multiply
[
[intercept],
[attr1_multiplier],
[attr2_multiplier],
[attr3_multiplier]
]
),#add
np.dot(
[
[attr1_multiplier,attr2_multiplier,attr3_multiplier],
[attr1_multiplier,0,0],
[0,attr2_multiplier,0],
[0,0,attr3_multiplier]
],#multiply
[
[gekko_attr1**attr1_pow],
[gekko_attr2**attr2_pow],
[gekko_attr3**attr3_pow]
]
)
)
)
))
m.Equation(error==control_value-pred_value)
m.Equation(maximized_value == -m.log(covar) - covar*(error)**2)
m.Maximize(maximized_value)
I am new to working on gekko, would be very grateful if I could get some help in resolving this issue. Thank you for your time.