Skip to content

Commit

Permalink
corrected green house sim with buffer switching dynamics and added ad…
Browse files Browse the repository at this point in the history
…apted low fidelity sim to include temperature control
  • Loading branch information
sukhijab committed Jun 6, 2024
1 parent f11813f commit 5bca00f
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 30 deletions.
16 changes: 11 additions & 5 deletions sim_transfer/sims/dynamics_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -997,11 +997,13 @@ def _greenhouse_dynamics_hf(self, x, u, params: GreenHouseParams):
g_f = (params.f1 - params.f2 * d_p) * (params.qg ** ((t_g - params.Tg) / 10.0))
g_l = g_f * params.v1 * jnp.exp(params.v2 * (t_g - params.v3))
b = self.buffer_switching_func(mb, params.b1)
buff_1 = b * (params.f * g_f * mf + params.v * g_l * ml / params.z)
buff_1 = self.buffer_switching_func(params.f * g_f * mf + params.v * g_l * ml / params.z, params.b1)
# buff_1 = b * (params.f * g_f * mf + params.v * g_l * ml / params.z)
factor = (params.qr ** ((t_g - params.Tg) / 10.0))
rf = params.MF * factor
rl = params.ML * factor
buff_2 = b * (rf * mf + rl * ml / params.z)
buff_2 = self.buffer_switching_func(rf * mf + rl * ml / params.z, params.b1)
# buff_2 = b * (rf * mf + rl * ml / params.z)
dmb_dt = self.get_crop_photosynthesis(x, u, params) - buff_1 - buff_2
h = self.get_harvest_coefficient(x, u, params)
hf, hl = h * params.yf, h * params.yl
Expand Down Expand Up @@ -1029,6 +1031,7 @@ def _greenhouse_dynamics_hf(self, x, u, params: GreenHouseParams):
return dx_dt

def _greenhouse_dynamics_lf(self, x, u, params: GreenHouseParams):
# C, C, C, m, g/m^3, kg/m^-3
t_g, t_p, t_s, c_i, v_i = x[0], x[1], x[2], x[3], x[4]
# g/m^-2, g/m^-2, g/m^-2, []
mb, mf, ml, d_p = x[self.greenhouse_state_dim], x[self.greenhouse_state_dim + 1], \
Expand All @@ -1043,8 +1046,9 @@ def _greenhouse_dynamics_lf(self, x, u, params: GreenHouseParams):
+ params.psi
k_v = params.rho_a * params.cp_a * phi_v

alpha = params.nu * jnp.sqrt(params.tau)
dt_g_dt = (k_v + params.kr) * (t_o - t_g) + params.ks * (t_s - t_g) \
+ G * params.eta
+ G * params.eta + alpha * (t_h - t_g)
dt_g_dt = dt_g_dt / params.cg

dt_p_dt = jnp.zeros_like(dt_g_dt)
Expand All @@ -1062,11 +1066,13 @@ def _greenhouse_dynamics_lf(self, x, u, params: GreenHouseParams):
g_f = (params.f1 - params.f2 * d_p) * (params.qg ** ((t_g - params.Tg) / 10.0))
g_l = g_f * params.v1 * jnp.exp(params.v2 * (t_g - params.v3))
b = self.buffer_switching_func(mb, params.b1)
buff_1 = b * (params.f * g_f * mf + params.v * g_l * ml / params.z)
buff_1 = self.buffer_switching_func(params.f * g_f * mf + params.v * g_l * ml / params.z, params.b1)
# buff_1 = b * (params.f * g_f * mf + params.v * g_l * ml / params.z)
factor = (params.qr ** ((t_g - params.Tg) / 10.0))
rf = params.MF * factor
rl = params.ML * factor
buff_2 = b * (rf * mf + rl * ml / params.z)
buff_2 = self.buffer_switching_func(rf * mf + rl * ml / params.z, params.b1)
# buff_2 = b * (rf * mf + rl * ml / params.z)
dmb_dt = self.get_crop_photosynthesis(x, u, params) - buff_1 - buff_2
h = self.get_harvest_coefficient(x, u, params)
hf, hl = h * params.yf, h * params.yl
Expand Down
50 changes: 25 additions & 25 deletions sim_transfer/sims/simulators.py
Original file line number Diff line number Diff line change
Expand Up @@ -1158,8 +1158,8 @@ def _sample_x_data(self, rng_key: jax.random.PRNGKey, num_samples_train: int, nu
class GreenHouseSim(FunctionSimulator):
param_ratio = 0.4

def __init__(self, use_hf: bool = False):
self.model = GreenHouseDynamics(use_hf=use_hf)
def __init__(self, use_hf: bool = False, dt: float = 300):
self.model = GreenHouseDynamics(use_hf=use_hf, dt=dt)
FunctionSimulator.__init__(self, input_size=self.model.x_dim + self.model.u_dim,
output_size=self.model.x_dim)
self._typical_params, self._lower_bound_params, self._upper_bound_params = None, None, None
Expand Down Expand Up @@ -1463,30 +1463,30 @@ def evaluate_sim(self, x: jnp.array, params: NamedTuple) -> jnp.array:
key1, key2 = jax.random.split(jax.random.PRNGKey(435349), 2)
key_hf, key_lf = jax.random.split(key1, 2)

# function_sim = GreenHouseSim(use_hf=True)
# test_p, test_p_train = function_sim.sample_params(key1)
# x, _ = function_sim._sample_x_data(key_hf, 64, 1)
# param1 = function_sim._typical_params
# f1 = function_sim.sample_function_vals(x, num_samples=4000, rng_key=key2)
# f1 = function_sim.model.transform_state(f1)
# import numpy as np
#
# f2 = function_sim._typical_f(x)
# f2 = function_sim.model.transform_state(f2)
# print(jnp.isnan(f1).any())
# print(jnp.isnan(f2).any())
# check = np.max(np.abs(np.asarray(f1 - function_sim.model.transform_state(x[..., : 16]))), axis=0)
# function_sim = GreenHouseSim(use_hf=False)
# test_p, test_p_train = function_sim.sample_params(key1)
# x, _ = function_sim._sample_x_data(key_lf, 64, 1)
# param1 = function_sim._typical_params
# f1 = function_sim.sample_function_vals(x, num_samples=4000, rng_key=key2)
# import numpy as np
function_sim = GreenHouseSim(use_hf=True)
test_p, test_p_train = function_sim.sample_params(key1)
x, _ = function_sim._sample_x_data(key_hf, 64, 1)
param1 = function_sim._typical_params
f1 = function_sim.sample_function_vals(x, num_samples=4000, rng_key=key2)
f1 = function_sim.model.transform_state(f1)
import numpy as np
#
# f2 = function_sim._typical_f(x)
# check = np.max(np.abs(np.asarray(f1 - function_sim.model.transform_state(x[..., : 16]))), axis=0)
# print(jnp.isnan(f1).any())
# print(jnp.isnan(f2).any())
f2 = function_sim._typical_f(x)
f2 = function_sim.model.transform_state(f2)
print(jnp.isnan(f1).any())
print(jnp.isnan(f2).any())
check = np.max(np.abs(np.asarray(f1 - function_sim.model.transform_state(x[..., : 16]))), axis=0)
function_sim = GreenHouseSim(use_hf=False)
test_p, test_p_train = function_sim.sample_params(key1)
x, _ = function_sim._sample_x_data(key_lf, 64, 1)
param1 = function_sim._typical_params
f1 = function_sim.sample_function_vals(x, num_samples=4000, rng_key=key2)
f1 = function_sim.model.transform_state(f1)
f2 = function_sim._typical_f(x)
f2 = function_sim.model.transform_state(f2)
print(jnp.isnan(f1).any())
print(jnp.isnan(f2).any())
check = np.max(np.abs(np.asarray(f1 - function_sim.model.transform_state(x[..., : 16]))), axis=0)

function_sim = SergioSim(5, 10, use_hf=False)
function_sim.sample_params(key1)
Expand Down

0 comments on commit 5bca00f

Please sign in to comment.