from scipy.optimize import minimize
def objective(x):
Kw, coef_mix_hyp, wind_factor, lw_factor, ch = x
# Modify parameters
params = {
'Kw': round(Kw, 4),
'coef_mix_hyp': round(coef_mix_hyp, 4),
'wind_factor': round(wind_factor, 4),
'lw_factor': round(lw_factor, 4),
'ch': round(ch, 6)
}
modify_nml('glm3.nml', params)
# Run GLM
subprocess.run(['glm'], capture_output=True)
# Calculate RMSE
rmse = calculate_rmse(sim_df, obs_df)
return rmse
# Initial values (defaults)
x0 = [0.3, 0.5, 1.0, 1.0, 0.0013]
# Run optimization
result = minimize(
objective,
x0,
method='Nelder-Mead',
options={'maxiter': 150}
)