The infeasible error arose when I changed the definition of m.Tm() from pyo.Var(m.k0) to pyo.Param(m.k0, mutable=True, default=0). I don’t want Pyomo to alter m.Tm(), I want Pyomo to calculate it’s values.
Here is my code:
def rc_estimator_train(T_in, T_in_m1, T_in_m2, T_out, T_out_m1, T_out_m2, GHI, Q, Q_m1, Ro, Co, Rm, Cm, sample_rate, flag_train):
m = pyo.ConcreteModel()
m.Tin = T_in
m.To_m1 = T_out_m1
N = np.size(m.To)-1
m.k0 = pyo.RangeSet(0, N)
m.k1 = pyo.RangeSet(1, N)
m.Ro = pyo.Var(within=pyo.NonNegativeReals, bounds=(0, 10), initialize=0)
m.Co = pyo.Var(within=pyo.NonNegativeReals, bounds=(0, 100000), initialize=0)
m.Rm = pyo.Var(within=pyo.NonNegativeReals, bounds=(0, 10), initialize=0)
m.Cm = pyo.Var(within=pyo.NonNegativeReals, bounds=(0, 100000), initialize=0)
m.x = pyo.Var(m.k0)
m.Tm = pyo.Param(m.k0, mutable=True, default=0)
bounds = 10
m.y = pyo.Var(m.k0, bounds=(-bounds, bounds))
m.ypos = pyo.Var(m.k0, bounds=(0, bounds))
m.yneg = pyo.Var(m.k0, bounds=(0, bounds))
m.ysum = pyo.Constraint(m.k0, rule = lambda m, k: m.y[k] == m.ypos[k] - m.yneg[k])
m.ic_1 = pyo.Constraint(rule = lambda m:
m.Tm[0] == m.Tin[0]
)
m.ic_2 = pyo.Constraint(rule = lambda m:
m.x[0] == m.Tin[0]
)
m.Tm_update = pyo.Constraint(m.k1, rule = lambda m, k:
m.Tm[k] == m.x[k-1] + (m.Tm[k-1] - m.x[k-1])*pyo.exp(-1*sample_rate*(m.Rm*m.Cm))
if (k < N+1) else pyo.Constraint.Skip
)
m.x_update = pyo.Constraint(m.k1, rule = lambda m, k:
m.x[k] == (m.Rm*m.Rm/(m.Rm + m.Ro))*m.To_m1[k] + (m.Ro/(m.Rm+m.Ro))*m.Tm[k-1]
+ (m.x[k-1] - (m.Rm*m.Rm/(m.Rm + m.Ro))*m.To_m1[k] - (m.Ro/(m.Rm+m.Ro))*m.Tm[k-1])*pyo.exp(-1*sample_rate*(m.Rm + m.Ro)/(m.Rm*m.Ro*m.Co))
if (k < N+1) else pyo.Constraint.Skip
)
m.y_output = pyo.Constraint(m.k0, rule = lambda m, k: m.y[k] == m.x[k] - m.Tin[k])
m.yobj = sum(m.ypos[k] + m.yneg[k] for k in m.k0)
m.obj = pyo.Objective(expr = m.yobj, sense=pyo.minimize)
return m
These are the outputs from the model:
Variables:
Ro : Size=1, Index=None
Key : Lower : Value : Upper : Fixed : Stale : Domain
None : 0 : 1.8967615211145494 : 10 : False : False : NonNegativeReals
Co : Size=1, Index=None
Key : Lower : Value : Upper : Fixed : Stale : Domain
None : 0 : 0.06338591566179329 : 100000 : False : False : NonNegativeReals
Rm : Size=1, Index=None
Key : Lower : Value : Upper : Fixed : Stale : Domain
None : 0 : 1.4913161536269557 : 10 : False : False : NonNegativeReals
Cm : Size=1, Index=None
Key : Lower : Value : Upper : Fixed : Stale : Domain
None : 0 : 8.172494390281837e-15 : 100000 : False : False : NonNegativeReals
x : Size=16, Index=k0
Key : Lower : Value : Upper : Fixed : Stale : Domain
0 : None : 24.399999999998663 : None : False : False : Reals
1 : None : 15.090893888788246 : None : False : False : Reals
2 : None : 15.090893888788257 : None : False : False : Reals
3 : None : 15.287821300620102 : None : False : False : Reals
4 : None : 14.864705017820587 : None : False : False : Reals
5 : None : 15.199399204913151 : None : False : False : Reals
6 : None : 15.318600234326782 : None : False : False : Reals
7 : None : 16.05351247002624 : None : False : False : Reals
8 : None : 16.045196119136918 : None : False : False : Reals
9 : None : 16.82336376655795 : None : False : False : Reals
10 : None : 16.81992493792016 : None : False : False : Reals
11 : None : 16.742807591142913 : None : False : False : Reals
12 : None : 16.613114625375218 : None : False : False : Reals
13 : None : 16.76354767042075 : None : False : False : Reals
14 : None : 16.74635352723185 : None : False : False : Reals
15 : None : 17.16763938489963 : None : False : False : Reals
y : Size=16, Index=k0
Key : Lower : Value : Upper : Fixed : Stale : Domain
0 : -10 : -1.3362497679640582e-12 : 10 : False : False : Reals
1 : -10 : -9.309106111210735 : 10 : False : False : Reals
2 : -10 : -9.409106111210715 : 10 : False : False : Reals
3 : -10 : -9.21217869937889 : 10 : False : False : Reals
4 : -10 : -9.63529498217836 : 10 : False : False : Reals
5 : -10 : -9.300600795085831 : 10 : False : False : Reals
6 : -10 : -8.881399765672244 : 10 : False : False : Reals
7 : -10 : -7.946487529972888 : 10 : False : False : Reals
8 : -10 : -7.954803880862212 : 10 : False : False : Reals
9 : -10 : -7.176636233441265 : 10 : False : False : Reals
10 : -10 : -7.080075062079065 : 10 : False : False : Reals
11 : -10 : -7.157192408856302 : 10 : False : False : Reals
12 : -10 : -7.386885374623976 : 10 : False : False : Reals
13 : -10 : -7.23645232957846 : 10 : False : False : Reals
14 : -10 : -7.253646472767358 : 10 : False : False : Reals
15 : -10 : -6.832360615099624 : 10 : False : False : Reals
ypos : Size=16, Index=k0
Key : Lower : Value : Upper : Fixed : Stale : Domain
0 : 0 : 0.06324006278404506 : 10 : False : False : Reals
1 : 0 : 0.00032480821316208813 : 10 : False : False : Reals
2 : 0 : 0.00032132658581701407 : 10 : False : False : Reals
3 : 0 : 0.00032825343291005544 : 10 : False : False : Reals
4 : 0 : 0.0003136437459894271 : 10 : False : False : Reals
5 : 0 : 0.00032508151456777897 : 10 : False : False : Reals
6 : 0 : 0.00034051581465620307 : 10 : False : False : Reals
7 : 0 : 0.0003807128529392047 : 10 : False : False : Reals
8 : 0 : 0.0003803130737358376 : 10 : False : False : Reals
9 : 0 : 0.00042167105131939137 : 10 : False : False : Reals
10 : 0 : 0.0004274313078950001 : 10 : False : False : Reals
11 : 0 : 0.00042281209740707855 : 10 : False : False : Reals
12 : 0 : 0.00040962403118248415 : 10 : False : False : Reals
13 : 0 : 0.0004181588236870904 : 10 : False : False : Reals
14 : 0 : 0.00041716337387299535 : 10 : False : False : Reals
15 : 0 : 0.00044295509377180193 : 10 : False : False : Reals
yneg : Size=16, Index=k0
Key : Lower : Value : Upper : Fixed : Stale : Domain
0 : 0 : 0.0632400627853813 : 10 : False : False : Reals
1 : 0 : 9.309430919423388 : 10 : False : False : Reals
2 : 0 : 9.409427437796017 : 10 : False : False : Reals
3 : 0 : 9.212506952811298 : 10 : False : False : Reals
4 : 0 : 9.635608625923823 : 10 : False : False : Reals
5 : 0 : 9.30092587659989 : 10 : False : False : Reals
6 : 0 : 8.881740281486415 : 10 : False : False : Reals
7 : 0 : 7.946868242825394 : 10 : False : False : Reals
8 : 0 : 7.955184193935513 : 10 : False : False : Reals
9 : 0 : 7.177057904492192 : 10 : False : False : Reals
10 : 0 : 7.0805024933865734 : 10 : False : False : Reals
11 : 0 : 7.157615220953318 : 10 : False : False : Reals
12 : 0 : 7.387294998654755 : 10 : False : False : Reals
13 : 0 : 7.2368704884017525 : 10 : False : False : Reals
14 : 0 : 7.254063636140835 : 10 : False : False : Reals
15 : 0 : 6.832803570193023 : 10 : False : False : Reals
Objectives:
obj : Size=1, Index=None, Active=True
Key : Active : Value
None : True : 121.91005543960651
Constraints:
ysum : Size=16
Key : Lower : Body : Upper
0 : 0.0 : -1.309110083542912e-17 : 0.0
1 : 0.0 : -5.080380560684716e-13 : 0.0
2 : 0.0 : -5.151434834260726e-13 : 0.0
3 : 0.0 : -5.027089855502709e-13 : 0.0
4 : 0.0 : -5.275779813018744e-13 : 0.0
5 : 0.0 : -5.080380560684716e-13 : 0.0
6 : 0.0 : -4.849454171562684e-13 : 0.0
7 : 0.0 : -4.334310688136611e-13 : 0.0
8 : 0.0 : -4.3431924723336124e-13 : 0.0
9 : 0.0 : -3.9257486150745535e-13 : 0.0
10 : 0.0 : -3.872457909892546e-13 : 0.0
11 : 0.0 : -3.9168668308775523e-13 : 0.0
12 : 0.0 : -4.0323300254385686e-13 : 0.0
13 : 0.0 : -3.9523939676655573e-13 : 0.0
14 : 0.0 : -3.97015753605956e-13 : 0.0
15 : 0.0 : -3.730349362740526e-13 : 0.0
ic_1 : Size=1
Key : Lower : Body : Upper
None : 0 : 24.4 : 0
ic_2 : Size=1
Key : Lower : Body : Upper
None : 24.4 : 24.399999999998663 : 24.4
Tm_update : Size=15
Key : Lower : Body : Upper
1 : 0 : 4.462208380573429e-12 : 0
2 : 0 : 2.758682171588589e-12 : 0
3 : 0 : 2.758682171588589e-12 : 0
4 : 0 : 2.794209308376594e-12 : 0
5 : 0 : 2.6556534749033744e-12 : 0
6 : 0 : 2.708944180085382e-12 : 0
7 : 0 : 2.7480240305521875e-12 : 0
8 : 0 : 2.8848035071860068e-12 : 0
9 : 0 : 2.8812507935072063e-12 : 0
10 : 0 : 3.0233593406592263e-12 : 0
11 : 0 : 3.0198066269804258e-12 : 0
12 : 0 : 3.0055957722652238e-12 : 0
13 : 0 : 2.9629632081196178e-12 : 0
14 : 0 : 2.9842794901924208e-12 : 0
15 : 0 : 2.9771740628348198e-12 : 0
x_update : Size=15
Key : Lower : Body : Upper
1 : 0.0 : -2.1871014208585393e-06 : 0.0
2 : 0.0 : -2.1871014102003983e-06 : 0.0
3 : 0.0 : -2.2156287808883235e-06 : 0.0
4 : 0.0 : -2.21562870983405e-06 : 0.0
5 : 0.0 : -2.2726836288455843e-06 : 0.0
6 : 0.0 : -2.2726836821362895e-06 : 0.0
7 : 0.0 : -2.3772843711356018e-06 : 0.0
8 : 0.0 : -2.377284367582888e-06 : 0.0
9 : 0.0 : -2.4913942198168115e-06 : 0.0
10 : 0.0 : -2.491394226922239e-06 : 0.0
11 : 0.0 : -2.481885040594989e-06 : 0.0
12 : 0.0 : -2.4818850086205657e-06 : 0.0
13 : 0.0 : -2.5104123757557772e-06 : 0.0
14 : 0.0 : -2.5104123722030636e-06 : 0.0
15 : 0.0 : -2.5769764739891343e-06 : 0.0
y_output : Size=16
Key : Lower : Body : Upper
0 : 0.0 : -4.294247350698628e-16 : 0.0
1 : 0.0 : 1.0178524689763435e-12 : 0.0
2 : 0.0 : 1.028510610012745e-12 : 0.0
3 : 0.0 : 1.007194327939942e-12 : 0.0
4 : 0.0 : 1.0533796057643485e-12 : 0.0
5 : 0.0 : 1.0178524689763435e-12 : 0.0
6 : 0.0 : 9.734435479913373e-13 : 0.0
7 : 0.0 : 8.704148513061227e-13 : 0.0
8 : 0.0 : 8.704148513061227e-13 : 0.0
9 : 0.0 : 7.851497230149107e-13 : 0.0
10 : 0.0 : 7.736034035588091e-13 : 0.0
11 : 0.0 : 7.833733661755105e-13 : 0.0
12 : 0.0 : 8.064660050877137e-13 : 0.0
13 : 0.0 : 7.904787935331115e-13 : 0.0
14 : 0.0 : 7.913669719528116e-13 : 0.0
15 : 0.0 : 7.460698725481052e-13 : 0.0
Simon is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.