@@ -63,11 +63,77 @@ of data points, e.g.,
6363 )
6464 num_data = len(data)
6565
66+ # Create the Rooney-Biegler model
67+ def rooney_biegler_model():
68+ """
69+ Formulates the Pyomo model of the Rooney-Biegler example
70+
71+ Returns:
72+ m: Pyomo model
73+ """
74+ m = pyo.ConcreteModel()
75+
76+ m.asymptote = pyo.Var(within=pyo.NonNegativeReals, initialize=10)
77+ m.rate_constant = pyo.Var(within=pyo.NonNegativeReals, initialize=0.2)
78+
79+ m.hour = pyo.Var(within=pyo.PositiveReals, initialize=0.1)
80+ m.y = pyo.Var(within=pyo.NonNegativeReals)
81+
82+ @m.Constraint()
83+ def response_rule(m):
84+ return m.y == m.asymptote * (1 - pyo.exp(-m.rate_constant * m.hour))
85+
86+ return m
87+
88+ # Create the Experiment class
89+ from pyomo.contrib.parmest.experiment import Experiment
90+ class RooneyBieglerExperiment(Experiment):
91+ def __init__(self, hour, y):
92+ self.y = y
93+ self.hour = hour
94+ self.model = None
95+
96+ def get_labeled_model(self):
97+ self.create_model()
98+ self.finalize_model()
99+ self.label_model()
100+
101+ return self.model
102+
103+ def create_model(self):
104+ m = self.model = rooney_biegler_model()
105+
106+ return m
107+
108+ def finalize_model(self):
109+ m = self.model
110+
111+ # fix the input variable
112+ m.hour.fix(self.hour)
113+
114+ return m
115+
116+ def label_model(self):
117+ m = self.model
118+
119+ # add experiment outputs
120+ m.experiment_outputs = pyo.Suffix(direction=pyo.Suffix.LOCAL)
121+ m.experiment_outputs.update([(m.y, self.y)])
122+
123+ # add unknown parameters
124+ m.unknown_parameters = pyo.Suffix(direction=pyo.Suffix.LOCAL)
125+ m.unknown_parameters.update(
126+ (k, pyo.value(k)) for k in [m.asymptote, m.rate_constant]
127+ )
128+
129+ # create the measurement error
130+ m.measurement_error = pyo.Suffix(direction = pyo.Suffix.LOCAL)
131+ m.measurement_error.update([(m.y, None)])
132+
66133 # Create an experiment list
67- from pyomo.contrib.parmest.examples.rooney_biegler.rooney_biegler import RooneyBieglerExperiment
68134 exp_list = []
69135 for i in range(data.shape[0]):
70- exp_list.append(RooneyBieglerExperiment(data.loc[i, : ]))
136+ exp_list.append(RooneyBieglerExperiment(data["hour"][i], data["y"][i ]))
71137
72138.. doctest ::
73139 :skipif: not __import__('pyomo.contrib.parmest.parmest').contrib.parmest.parmest.parmest_available
0 commit comments