The optimize Method
The optimize method for the PID model is shown below. The objective function in this
case is the weighted sum of R1, R2 and
R3, the deviation of displacement, velocity and acceleration;
R4 is the inequality constraint, which imposes an upper limit
on the
gains.
def optimize(self):
"""
Run an optimization
"""
obj = [self.R1,self.R2,self.R3]
wt = [1,1,1]
self.opt = Optimizer (
label = "Optimize RMS2",
objective = obj,
weights = wt,
ineqConstraints = self.R4,
plot = False,
dsa = 'FD',
simFunction = simulate_function_pid,
outputMode = 'FileOnly',
)
return self.opt.optimize()
Here we pass in a simulate function instead of specifying end, dtout, type in the optimizer. This deactivates the force during the simulation.
def simulate_function_pid(model):
run = model.simulate(end=10, dtout=0.01, returnResults=True, output="Off")
model.force.active = False
run = model.simulate(end=100, dtout=0.01, returnResults=True,output="Off")
model.force.active = True
return run