Skip to content

Commit 4db292f

Browse files
committed
add pid controller
1 parent 64192fc commit 4db292f

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

hyperparam_opt.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,34 @@ def grid_search(export_path, cfg, param_grid):
4747
print(e)
4848

4949

50+
def pid_grid_search(export_path, cfg_path, param_grid, T):
51+
np.random.seed(42)
52+
df = pd.DataFrame()
53+
54+
keys = param_grid.keys()
55+
values = param_grid.values()
56+
for i, combination in enumerate(itertools.product(*values)):
57+
iter_params = dict(zip(keys, combination))
58+
59+
try:
60+
with open(cfg_path) as f:
61+
cfg = yaml.load(f, Loader=yaml.SafeLoader)
62+
63+
experiment = main.Experiment(**cfg)
64+
experiment.run_pid(kp=iter_params['kp'], kd=iter_params['kd'], ki=iter_params['ki'], T=T)
65+
66+
iter_params['cost'] = experiment.cost
67+
iter_params['mae'] = experiment.mae
68+
iter_params['v_count'] = experiment.v_count
69+
iter_params['v_rate'] = experiment.v_rate
70+
temp = pd.DataFrame(iter_params, index=[len(df)])
71+
df = pd.concat([df, temp])
72+
print(df)
73+
df.to_csv(export_path)
74+
except Exception as e:
75+
print(e)
76+
77+
5078
def random_search(export_path, cfg, n):
5179
df = pd.DataFrame()
5280
lambdas = [0, 0.01, 0.1, 1, 10, 100, 1000]

pid.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2+
class PID:
3+
def __init__(self, kp, ki, kd, set_point):
4+
self.kp = kp # Proportional gain
5+
self.ki = ki # Integral gain
6+
self.kd = kd # Derivative gain
7+
self.set_point = set_point # Desired set point
8+
self.integral = 0
9+
self.last_error = 0
10+
11+
def compute(self, current_value):
12+
error = self.set_point - current_value
13+
self.integral += error
14+
derivative = error - self.last_error
15+
16+
# PID formula
17+
output = (self.kp * error) + (self.ki * self.integral) + (self.kd * derivative)
18+
19+
# Update last error
20+
self.last_error = error
21+
22+
# Return valve setting value as a percentage of valve opening
23+
return output

0 commit comments

Comments
 (0)