Multi-objective BO: Perovskite hysteresis JV fits with SIMsalabim (fake data)
This notebook is a demonstration of how to fit scan-speed dependent JV curves with drift-diffusion models using the SIMsalabim package.
[1]:
# Import necessary libraries
import warnings, os, sys, shutil
# remove warnings from the output
os.environ["PYTHONWARNINGS"] = "ignore"
warnings.filterwarnings(action='ignore', category=FutureWarning)
warnings.filterwarnings(action='ignore', category=UserWarning)
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from numpy.random import default_rng
import torch, copy, uuid
import pySIMsalabim as sim
from pySIMsalabim.experiments.hysteresis import *
import ax, logging
from ax.utils.notebook.plotting import init_notebook_plotting, render
init_notebook_plotting() # for Jupyter notebooks
import joblib # Import joblib for parallel processing
try:
from optimpv import *
from optimpv.axBOtorch.axUtils import *
except Exception as e:
sys.path.append('../') # add the path to the optimpv module
from optimpv import *
from optimpv.axBOtorch.axUtils import *
[INFO 08-13 18:16:45] ax.utils.notebook.plotting: Injecting Plotly library into cell. Do not overwrite or delete cell.
[INFO 08-13 18:16:45] ax.utils.notebook.plotting: Please see
(https://ax.dev/tutorials/visualizations.html#Fix-for-plots-that-are-not-rendering)
if visualizations are not rendering.
Define the parameters for the simulation
[2]:
params = [] # list of parameters to be optimized
mun = FitParam(name = 'l2.mu_n', value = 6e-4, bounds = [1e-5,1e-3], values = None, start_value = None, log_scale = True, value_type = 'float', fscale = None, rescale = False, stepsize = None, display_name=r'$\mu_n$', unit='m$^2$ V$^{-1}$s$^{-1}$', axis_type = 'log', std = 0,encoding = None,force_log = True)
params.append(mun)
mup = FitParam(name = 'l2.mu_p', value = 4e-4, bounds = [1e-5,1e-3], values = None, start_value = None, log_scale = True, value_type = 'float', fscale = None, rescale = False, stepsize = None, display_name=r'$\mu_p$', unit=r'm$^2$ V$^{-1}$s$^{-1}$', axis_type = 'log', std = 0,encoding = None,force_log = True)
params.append(mup)
bulk_tr = FitParam(name = 'l2.N_t_bulk', value = 1e20, bounds = [1e19,1e21], values = None, start_value = None, log_scale = True, value_type = 'float', fscale = None, rescale = False, stepsize = None, display_name=r'$N_{T}$', unit=r'm$^{-3}$', axis_type = 'log', std = 0,encoding = None,force_log = False)
params.append(bulk_tr)
HTL_int_trap = FitParam(name = 'l1.N_t_int', value = 5e11, bounds = [1e11,1e13], values = None, start_value = None, log_scale = True, value_type = 'float', fscale = None, rescale = False, stepsize = None, display_name=r'$N_{T,int}^{HTL}$', unit='m$^{-2}$', axis_type = 'log', std = 0,encoding = None,force_log = False)
params.append(HTL_int_trap)
ETL_int_trap = FitParam(name = 'l2.N_t_int', value = 4e12, bounds = [1e11,1e13], values = None, start_value = None, log_scale = True, value_type = 'float', fscale = None, rescale = False, stepsize = None, display_name=r'$N_{T,int}^{ETL}$', unit='m$^{-2}$', axis_type = 'log', std = 0,encoding = None,force_log = False)
params.append(ETL_int_trap)
Nions = FitParam(name = 'l2.N_ions', value = 1e22, bounds = [1e20,1e22], type='range', values = None, start_value = None, log_scale = True, value_type = 'float', fscale = None, rescale = False, stepsize = None, display_name=r'$C_{ions}$', unit='m$^{-3}$', axis_type = 'log', std = 0,encoding = None,force_log = False)
params.append(Nions)
muions = FitParam(name = 'l2.mu_ions', value = 5.7e-12, bounds = [1e-13,1e-11], type='range', values = None, start_value = None, log_scale = True, value_type = 'float', fscale = None, rescale = True, stepsize = None, display_name=r'$\mu_{ions}$', unit='m$^2$ V$^{-1}$s$^{-1}$', axis_type = 'log', std = 0,encoding = None,force_log = True)
params.append(muions)
R_series = FitParam(name = 'R_series', value = 0e-4, bounds = [0e-5,1e-3], type='fixed', values = None, start_value = None, log_scale = True, value_type = 'float', fscale = None, rescale = False, stepsize = None, display_name=r'$R_{series}$', unit=r'$\Omega$ m$^2$', axis_type = 'log', std = 0,encoding = None,force_log = False)
params.append(R_series) # here we switch of the Rseries and set it to 0 as it having a series resistance dramatically slows down the simulation. We can switch it on later if needed.
num_free_params = 0
for p in params:
if p.type != 'fixed' :
num_free_params += 1
# save the original parameters for later
params_orig = copy.deepcopy(params)
Generate some fake data
Here we generate some fake data to fit. The data is generated using the same model as the one used for the fitting, so it is a good test of the fitting procedure. For more information on how to run SIMsalabim from python see the pySIMsalabim package.
[3]:
# First we do the JV simulation with the original parameters
# Set the session path for the simulation and the input files
session_path_zimt = os.path.join(os.path.join(os.path.abspath('../'),'SIMsalabim','ZimT'))
input_path_zimt = os.path.join(os.path.join(os.path.join(os.path.abspath('../'),'Data','simsalabim_test_inputs','fakePerovskite')))
simulation_setup_filename_zimt = 'simulation_setup_zimt_fakePerovskite.txt'
simulation_setup_zimt = os.path.join(session_path_zimt, simulation_setup_filename_zimt)
optical_files = ['nk_glass.txt','nk_ITO.txt','nk_PTAA.txt','nk_FACsPbIBr.txt','nk_C60_1.txt','nk_Au.txt']
# path to the layer files defined in the simulation_setup file
l1 = 'PTAA.txt'
l2 = 'fakePerovskite.txt'
l3 = 'C60.txt'
l1 = os.path.join(input_path_zimt, l1)
l2 = os.path.join(input_path_zimt, l2)
l3 = os.path.join(input_path_zimt, l3)
# copy this files to session_path
force_copy = True
if not os.path.exists(session_path_zimt):
os.makedirs(session_path_zimt)
for file in [l1,l2,l3,simulation_setup_filename_zimt]:
file = os.path.join(input_path_zimt, os.path.basename(file))
if force_copy or not os.path.exists(os.path.join(session_path_zimt, os.path.basename(file))):
shutil.copyfile(file, os.path.join(session_path_zimt, os.path.basename(file)))
else:
print('File already exists: ',file)
# copy the optical files to the session path
for file in optical_files:
file = os.path.join(input_path_zimt, os.path.basename(file))
if force_copy or not os.path.exists(os.path.join(session_path_zimt, os.path.basename(file))):
shutil.copyfile(file, os.path.join(session_path_zimt, os.path.basename(file)))
# Show the device structure
fig = sim.plot_band_diagram(simulation_setup_zimt, session_path_zimt)
# Set the JV parameters
direction = -1
G_frac = 1
Vmin = 0
Vmax = 1.2
steps = 100
cmd_pars = [] # see pySIMsalabim documentation for the command line parameters
# Add the parameters to the command line arguments
for param in params:
if param.name == 'l2.N_ions':
cmd_pars.append({'par':'l2.N_cation', 'val':str(param.value)})
cmd_pars.append({'par':'l2.N_anion', 'val':str(param.value)})
elif param.name == 'l2.mu_ions':
cmd_pars.append({'par':'l2.mu_cation', 'val':str(param.value)})
cmd_pars.append({'par':'l2.mu_anion', 'val':str(param.value)})
else:
cmd_pars.append({'par':param.name, 'val':str(param.value)})
# cmd_pars.append({'par':'tolVint', 'val':str(1e-5)}) # add the series resistance
# Define a function to run a single hysteresis simulation
def run_hysteresis_simulation(scan_speed, session_path, simulation_setup, direction, G_frac, Vmin, Vmax, steps, cmd_pars):
UUID = str(uuid.uuid4())
ret, mess, rms = Hysteresis_JV(simulation_setup, session_path, 0, scan_speed, direction, G_frac,
Vmin=Vmin, Vmax=Vmax, steps=steps, UUID=UUID, cmd_pars=cmd_pars)
# Load the data
data = pd.read_csv(os.path.join(session_path, 'tj_'+UUID+'.dat'), sep=r'\s+')
# Extract the data
X = np.asarray(data['Vext'].values)
y = np.asarray(data['Jext'].values)
return scan_speed, X, y, UUID
# List of scan speeds to simulate
scan_speeds = [0.1, 1, 10, 100]
# Run simulations in parallel
results = joblib.Parallel(n_jobs=-1)(
joblib.delayed(run_hysteresis_simulation)(
scan_speed, session_path_zimt, simulation_setup_zimt, direction,
G_frac, Vmin, Vmax, steps, cmd_pars
) for scan_speed in scan_speeds
)
# Extract results
X_data = {}
y_data = {}
UUIDs = {}
for scan_speed, X, y, UUID in results:
X_data[scan_speed] = X
y_data[scan_speed] = y
UUIDs[scan_speed] = UUID
# Assign to variables for backward compatibility
X1, y1 = X_data[0.1], y_data[0.1]
X2, y2 = X_data[1], y_data[1]
X3, y3 = X_data[10], y_data[10]
X4, y4 = X_data[100], y_data[100]
# Plot the results
plt.figure()
plt.plot(X1, y1, label=f'Scan Speed = 0.1')
plt.plot(X2, y2, label=f'Scan Speed = 1')
plt.plot(X3, y3, label=f'Scan Speed = 10')
plt.plot(X4, y4, label=f'Scan Speed = 100')
plt.xlabel('Applied Voltage [V]')
plt.ylabel('Current Density [A/m$^2$]')
plt.legend()
plt.show()


Run the optimization
[4]:
# Define the Agent and the target metric/loss function
from optimpv.DDfits.HysteresisAgent import HysteresisAgent
metric = 'nrmse' # can be 'nrmse', 'mse', 'mae'
loss = 'linear' # can be 'linear', 'huber', 'soft_l1'
threshold = 0.1 # need this to get a reference point for the hypervolume calculation
hyst1 = HysteresisAgent(params, X1, y1, session_path_zimt, Vmin, Vmax, scan_speeds[0], steps, direction, G_frac=1, simulation_setup=simulation_setup_zimt, metric=[metric], loss=[loss], threshold= [threshold],minimize=[True], name='Hyst1')
hyst2 = HysteresisAgent(params, X2, y2, session_path_zimt, Vmin, Vmax, scan_speeds[1], steps, direction, G_frac=1, simulation_setup=simulation_setup_zimt, metric=[metric], loss=[loss], threshold= [threshold],minimize=[True], name='Hyst2')
hyst3 = HysteresisAgent(params, X3, y3, session_path_zimt, Vmin, Vmax, scan_speeds[2], steps, direction, G_frac=1, simulation_setup=simulation_setup_zimt, metric=[metric], loss=[loss], threshold= [threshold],minimize=[True], name='Hyst3')
hyst4 = HysteresisAgent(params, X4, y4, session_path_zimt, Vmin, Vmax, scan_speeds[3], steps, direction, G_frac=1, simulation_setup=simulation_setup_zimt, metric=[metric], loss=[loss], threshold= [threshold],minimize=[True], name='Hyst4')
[5]:
from optimpv.axBOtorch.axBOtorchOptimizer import axBOtorchOptimizer
from botorch.acquisition.multi_objective.logei import qLogExpectedHypervolumeImprovement
from ax.adapter.transforms.standardize_y import StandardizeY
from ax.adapter.transforms.unit_x import UnitX
from ax.adapter.transforms.remove_fixed import RemoveFixed
from ax.adapter.transforms.log import Log
from ax.generators.torch.botorch_modular.utils import ModelConfig
from ax.generators.torch.botorch_modular.surrogate import SurrogateSpec
from gpytorch.kernels import MaternKernel
from gpytorch.kernels import ScaleKernel
from botorch.models import SingleTaskGP
model_gen_kwargs_list = None
parameter_constraints = None
model_kwargs_list = [{},{},{"torch_device":torch.device("cuda" if torch.cuda.is_available() else "cpu"),'botorch_acqf_class':qLogExpectedHypervolumeImprovement,'transforms':[RemoveFixed, Log,UnitX, StandardizeY],'surrogate_spec':SurrogateSpec(model_configs=[ModelConfig(botorch_model_class=SingleTaskGP,covar_module_class=ScaleKernel, covar_module_options={'base_kernel':MaternKernel(nu=2.5, ard_num_dims=num_free_params)})])}]
optimizer = axBOtorchOptimizer(params = params, agents = [hyst1, hyst2, hyst3, hyst4], models = ['CENTER','SOBOL','BOTORCH_MODULAR'],n_batches = [1,1,20], batch_size = [1,10,2], ax_client = None, max_parallelism = -1, model_kwargs_list = model_kwargs_list, model_gen_kwargs_list = None, name = 'ax_opti')
[6]:
optimizer.optimize() # run the optimization with ax
[INFO 08-13 18:17:02] optimpv.axBOtorchOptimizer: Trial 0 with parameters: {'l2.mu_n': -4.0, 'l2.mu_p': -4.0, 'l2.N_t_bulk': 1e+20, 'l1.N_t_int': 1000000000000.0, 'l2.N_t_int': 1000000000000.0, 'l2.N_ions': 1e+21, 'l2.mu_ions': -12.0}
[INFO 08-13 18:17:16] optimpv.axBOtorchOptimizer: Trial 0 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.08498926875954489), 'Hyst2_JV_nrmse_linear': np.float64(0.07765588194941991), 'Hyst3_JV_nrmse_linear': np.float64(0.0696485492867804), 'Hyst4_JV_nrmse_linear': np.float64(0.08292429135537334)} and parameters: {'l2.mu_n': -4.0, 'l2.mu_p': -4.0, 'l2.N_t_bulk': 1e+20, 'l1.N_t_int': 1000000000000.0, 'l2.N_t_int': 1000000000000.0, 'l2.N_ions': 1e+21, 'l2.mu_ions': -12.0}
[INFO 08-13 18:17:16] optimpv.axBOtorchOptimizer: Trial 1 with parameters: {'l2.mu_n': -4.093041753396392, 'l2.mu_p': -4.4247758481651545, 'l2.N_t_bulk': 1.2108783402449297e+19, 'l1.N_t_int': 1060817213971.2566, 'l2.N_t_int': 111190344500.15097, 'l2.N_ions': 1.8891704423836518e+21, 'l2.mu_ions': -12.207976259291172}
[INFO 08-13 18:17:16] optimpv.axBOtorchOptimizer: Trial 2 with parameters: {'l2.mu_n': -3.9177547823637724, 'l2.mu_p': -3.063730938360095, 'l2.N_t_bulk': 2.162235142977446e+20, 'l1.N_t_int': 399093654126.3621, 'l2.N_t_int': 8909749424002.727, 'l2.N_ions': 4.7577830283041964e+20, 'l2.mu_ions': -11.388330977410078}
[INFO 08-13 18:17:16] optimpv.axBOtorchOptimizer: Trial 3 with parameters: {'l2.mu_n': -3.2227960731834173, 'l2.mu_p': -4.948691191151738, 'l2.N_t_bulk': 6.821947890216686e+19, 'l1.N_t_int': 4466025048940.74, 'l2.N_t_int': 1615959107540.3384, 'l2.N_ions': 1.7474362508391727e+20, 'l2.mu_ions': -12.760033290833235}
[INFO 08-13 18:17:16] optimpv.axBOtorchOptimizer: Trial 4 with parameters: {'l2.mu_n': -4.766254810616374, 'l2.mu_p': -3.5554787274450064, 'l2.N_t_bulk': 3.837088572630613e+20, 'l1.N_t_int': 167078454548.4966, 'l2.N_t_int': 636257107516.0986, 'l2.N_ions': 6.845672634575009e+21, 'l2.mu_ions': -11.58114317804575}
[INFO 08-13 18:17:16] optimpv.axBOtorchOptimizer: Trial 5 with parameters: {'l2.mu_n': -4.62531572394073, 'l2.mu_p': -4.612179484218359, 'l2.N_t_bulk': 1.7584921776058286e+20, 'l1.N_t_int': 229168424807.3701, 'l2.N_t_int': 377387540219.8297, 'l2.N_ions': 1.129357720131989e+21, 'l2.mu_ions': -12.679879551753402}
[INFO 08-13 18:17:16] optimpv.axBOtorchOptimizer: Trial 6 with parameters: {'l2.mu_n': -3.3640880193561316, 'l2.mu_p': -3.8763654828071594, 'l2.N_t_bulk': 3.1124168906760815e+19, 'l1.N_t_int': 5790923923806.55, 'l2.N_t_int': 2624737663004.4434, 'l2.N_ions': 7.938578726884888e+20, 'l2.mu_ions': -11.970105180516839}
[INFO 08-13 18:17:16] optimpv.axBOtorchOptimizer: Trial 7 with parameters: {'l2.mu_n': -3.5578010510653257, 'l2.mu_p': -4.01105846837163, 'l2.N_t_bulk': 9.909262077721481e+20, 'l1.N_t_int': 971267881001.4131, 'l2.N_t_int': 4749516685478.387, 'l2.N_ions': 2.8694121327561893e+20, 'l2.mu_ions': -12.350112089887261}
[INFO 08-13 18:17:16] optimpv.axBOtorchOptimizer: Trial 8 with parameters: {'l2.mu_n': -4.452825730666518, 'l2.mu_p': -3.4930733367800713, 'l2.N_t_bulk': 5.524457705809533e+19, 'l1.N_t_int': 2451530995985.938, 'l2.N_t_int': 216446553808.19254, 'l2.N_ions': 4.1748382862263137e+21, 'l2.mu_ions': -11.062327628955245}
[INFO 08-13 18:17:16] optimpv.axBOtorchOptimizer: Trial 9 with parameters: {'l2.mu_n': -4.279175542294979, 'l2.mu_p': -4.851370994001627, 'l2.N_t_bulk': 7.383085594050531e+20, 'l1.N_t_int': 9561815825453.361, 'l2.N_t_int': 6786433934381.234, 'l2.N_ions': 9.496304184729084e+21, 'l2.mu_ions': -12.540784653276205}
[INFO 08-13 18:17:16] optimpv.axBOtorchOptimizer: Trial 10 with parameters: {'l2.mu_n': -3.7279112339019775, 'l2.mu_p': -3.6449854746460915, 'l2.N_t_bulk': 4.169667350572773e+19, 'l1.N_t_int': 246835747742.89642, 'l2.N_t_int': 148587850368.48874, 'l2.N_ions': 1.1712420055704573e+20, 'l2.mu_ions': -11.85993354767561}
An unhandled exception occurred at $000000000040410A:
EOverflow: Floating point overflow
$000000000040410A
$00000000004307A4
$0000000000441906
$00000000004451F1
$0000000000402953
An unhandled exception occurred at $000000000040410A:
EOverflow: Floating point overflow
$000000000040410A
$00000000004307A4
$00000000004417BB
$00000000004451F1
$0000000000402953
[INFO 08-13 18:18:34] optimpv.axBOtorchOptimizer: Trial 1 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.08470691493848534), 'Hyst2_JV_nrmse_linear': np.float64(0.07937503771263024), 'Hyst3_JV_nrmse_linear': np.float64(0.07122510933317738), 'Hyst4_JV_nrmse_linear': np.float64(0.08201939390945705)} and parameters: {'l2.mu_n': -4.093041753396392, 'l2.mu_p': -4.4247758481651545, 'l2.N_t_bulk': 1.2108783402449297e+19, 'l1.N_t_int': 1060817213971.2566, 'l2.N_t_int': 111190344500.15097, 'l2.N_ions': 1.8891704423836518e+21, 'l2.mu_ions': -12.207976259291172}
[INFO 08-13 18:18:34] optimpv.axBOtorchOptimizer: Trial 2 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.030181732900975002), 'Hyst2_JV_nrmse_linear': np.float64(0.028873640422624677), 'Hyst3_JV_nrmse_linear': np.float64(0.039029419674824276), 'Hyst4_JV_nrmse_linear': np.float64(0.030746129819819605)} and parameters: {'l2.mu_n': -3.9177547823637724, 'l2.mu_p': -3.063730938360095, 'l2.N_t_bulk': 2.162235142977446e+20, 'l1.N_t_int': 399093654126.3621, 'l2.N_t_int': 8909749424002.727, 'l2.N_ions': 4.7577830283041964e+20, 'l2.mu_ions': -11.388330977410078}
[INFO 08-13 18:18:34] optimpv.axBOtorchOptimizer: Trial 3 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.16666499053665876), 'Hyst2_JV_nrmse_linear': np.float64(0.16536396519900085), 'Hyst3_JV_nrmse_linear': np.float64(0.16295034011255446), 'Hyst4_JV_nrmse_linear': np.float64(0.16641215947669522)} and parameters: {'l2.mu_n': -3.2227960731834173, 'l2.mu_p': -4.948691191151738, 'l2.N_t_bulk': 6.821947890216686e+19, 'l1.N_t_int': 4466025048940.74, 'l2.N_t_int': 1615959107540.3384, 'l2.N_ions': 1.7474362508391727e+20, 'l2.mu_ions': -12.760033290833235}
[INFO 08-13 18:18:34] optimpv.axBOtorchOptimizer: Trial 4 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.08503574482775778), 'Hyst2_JV_nrmse_linear': np.float64(0.08713293430458285), 'Hyst3_JV_nrmse_linear': np.float64(0.09162863028362067), 'Hyst4_JV_nrmse_linear': np.float64(0.08548350169152023)} and parameters: {'l2.mu_n': -4.766254810616374, 'l2.mu_p': -3.5554787274450064, 'l2.N_t_bulk': 3.837088572630613e+20, 'l1.N_t_int': 167078454548.4966, 'l2.N_t_int': 636257107516.0986, 'l2.N_ions': 6.845672634575009e+21, 'l2.mu_ions': -11.58114317804575}
[INFO 08-13 18:18:34] optimpv.axBOtorchOptimizer: Trial 5 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.07377425153191104), 'Hyst2_JV_nrmse_linear': np.float64(0.07051719546516245), 'Hyst3_JV_nrmse_linear': np.float64(0.07440151263341467), 'Hyst4_JV_nrmse_linear': np.float64(0.07274439233332713)} and parameters: {'l2.mu_n': -4.62531572394073, 'l2.mu_p': -4.612179484218359, 'l2.N_t_bulk': 1.7584921776058286e+20, 'l1.N_t_int': 229168424807.3701, 'l2.N_t_int': 377387540219.8297, 'l2.N_ions': 1.129357720131989e+21, 'l2.mu_ions': -12.679879551753402}
[INFO 08-13 18:18:34] optimpv.axBOtorchOptimizer: Trial 6 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.1687153238737003), 'Hyst2_JV_nrmse_linear': np.float64(0.1626501749746585), 'Hyst3_JV_nrmse_linear': np.float64(0.16438030048978236), 'Hyst4_JV_nrmse_linear': np.float64(0.16803996678779728)} and parameters: {'l2.mu_n': -3.3640880193561316, 'l2.mu_p': -3.8763654828071594, 'l2.N_t_bulk': 3.1124168906760815e+19, 'l1.N_t_int': 5790923923806.55, 'l2.N_t_int': 2624737663004.4434, 'l2.N_ions': 7.938578726884888e+20, 'l2.mu_ions': -11.970105180516839}
[INFO 08-13 18:18:34] optimpv.axBOtorchOptimizer: Trial 7 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.11237552171378515), 'Hyst2_JV_nrmse_linear': np.float64(0.10513015342281481), 'Hyst3_JV_nrmse_linear': np.float64(0.09611414585052688), 'Hyst4_JV_nrmse_linear': np.float64(0.11134613370805219)} and parameters: {'l2.mu_n': -3.5578010510653257, 'l2.mu_p': -4.01105846837163, 'l2.N_t_bulk': 9.909262077721481e+20, 'l1.N_t_int': 971267881001.4131, 'l2.N_t_int': 4749516685478.387, 'l2.N_ions': 2.8694121327561893e+20, 'l2.mu_ions': -12.350112089887261}
[INFO 08-13 18:18:34] optimpv.axBOtorchOptimizer: Trial 8 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.10720806495718793), 'Hyst2_JV_nrmse_linear': np.float64(0.09597226204995206), 'Hyst3_JV_nrmse_linear': np.float64(0.08397138712799673), 'Hyst4_JV_nrmse_linear': np.float64(0.10450244376133633)} and parameters: {'l2.mu_n': -4.452825730666518, 'l2.mu_p': -3.4930733367800713, 'l2.N_t_bulk': 5.524457705809533e+19, 'l1.N_t_int': 2451530995985.938, 'l2.N_t_int': 216446553808.19254, 'l2.N_ions': 4.1748382862263137e+21, 'l2.mu_ions': -11.062327628955245}
[INFO 08-13 18:18:34] optimpv.axBOtorchOptimizer: Trial 9 failed with results: {'Hyst1_JV_nrmse_linear': nan, 'Hyst2_JV_nrmse_linear': nan, 'Hyst3_JV_nrmse_linear': np.float64(0.15838078701917882), 'Hyst4_JV_nrmse_linear': np.float64(0.16580019113946856)} and parameters: {'l2.mu_n': -4.279175542294979, 'l2.mu_p': -4.851370994001627, 'l2.N_t_bulk': 7.383085594050531e+20, 'l1.N_t_int': 9561815825453.361, 'l2.N_t_int': 6786433934381.234, 'l2.N_ions': 9.496304184729084e+21, 'l2.mu_ions': -12.540784653276205}
[INFO 08-13 18:18:34] optimpv.axBOtorchOptimizer: Trial 10 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.07799001721227881), 'Hyst2_JV_nrmse_linear': np.float64(0.08231543682079738), 'Hyst3_JV_nrmse_linear': np.float64(0.09338014279530664), 'Hyst4_JV_nrmse_linear': np.float64(0.07857140139456109)} and parameters: {'l2.mu_n': -3.7279112339019775, 'l2.mu_p': -3.6449854746460915, 'l2.N_t_bulk': 4.169667350572773e+19, 'l1.N_t_int': 246835747742.89642, 'l2.N_t_int': 148587850368.48874, 'l2.N_ions': 1.1712420055704573e+20, 'l2.mu_ions': -11.85993354767561}
[INFO 08-13 18:18:37] optimpv.axBOtorchOptimizer: Trial 11 with parameters: {'l2.mu_n': -4.205529170869975, 'l2.mu_p': -4.986735634597473, 'l2.N_t_bulk': 2.821030616885184e+20, 'l1.N_t_int': 470103596310.03577, 'l2.N_t_int': 8048559652909.517, 'l2.N_ions': 4.458542153746575e+21, 'l2.mu_ions': -11.457738458323494}
[INFO 08-13 18:18:37] optimpv.axBOtorchOptimizer: Trial 12 with parameters: {'l2.mu_n': -4.069106290463373, 'l2.mu_p': -3.0710684561152295, 'l2.N_t_bulk': 2.419256169767869e+19, 'l1.N_t_int': 447301044452.31525, 'l2.N_t_int': 1783332739641.1648, 'l2.N_ions': 1.3882660993173986e+20, 'l2.mu_ions': -12.915806096660956}
[INFO 08-13 18:19:36] optimpv.axBOtorchOptimizer: Trial 11 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.09320716622927398), 'Hyst2_JV_nrmse_linear': np.float64(0.08810882935679198), 'Hyst3_JV_nrmse_linear': np.float64(0.07474871857132262), 'Hyst4_JV_nrmse_linear': np.float64(0.0844136832602806)} and parameters: {'l2.mu_n': -4.205529170869975, 'l2.mu_p': -4.986735634597473, 'l2.N_t_bulk': 2.821030616885184e+20, 'l1.N_t_int': 470103596310.03577, 'l2.N_t_int': 8048559652909.517, 'l2.N_ions': 4.458542153746575e+21, 'l2.mu_ions': -11.457738458323494}
[INFO 08-13 18:19:36] optimpv.axBOtorchOptimizer: Trial 12 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.03885737610593931), 'Hyst2_JV_nrmse_linear': np.float64(0.0421184247739302), 'Hyst3_JV_nrmse_linear': np.float64(0.05530793250729444), 'Hyst4_JV_nrmse_linear': np.float64(0.040233785312012556)} and parameters: {'l2.mu_n': -4.069106290463373, 'l2.mu_p': -3.0710684561152295, 'l2.N_t_bulk': 2.419256169767869e+19, 'l1.N_t_int': 447301044452.31525, 'l2.N_t_int': 1783332739641.1648, 'l2.N_ions': 1.3882660993173986e+20, 'l2.mu_ions': -12.915806096660956}
[INFO 08-13 18:19:40] optimpv.axBOtorchOptimizer: Trial 13 with parameters: {'l2.mu_n': -3.9699139128652132, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 5.7612599666222216e+20, 'l1.N_t_int': 324914709947.7605, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1.569085396632187e+21, 'l2.mu_ions': -11.687135403517306}
[INFO 08-13 18:19:40] optimpv.axBOtorchOptimizer: Trial 14 with parameters: {'l2.mu_n': -3.9746098393029543, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.777547323096385e+20, 'l1.N_t_int': 382914981972.6417, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1.1175923445470903e+20, 'l2.mu_ions': -12.903024998245925}
[INFO 08-13 18:19:54] optimpv.axBOtorchOptimizer: Trial 13 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.03394355480710167), 'Hyst2_JV_nrmse_linear': np.float64(0.03495294516660626), 'Hyst3_JV_nrmse_linear': np.float64(0.04410637910997926), 'Hyst4_JV_nrmse_linear': np.float64(0.03392280064328588)} and parameters: {'l2.mu_n': -3.9699139128652132, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 5.7612599666222216e+20, 'l1.N_t_int': 324914709947.7605, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1.569085396632187e+21, 'l2.mu_ions': -11.687135403517306}
[INFO 08-13 18:19:54] optimpv.axBOtorchOptimizer: Trial 14 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.03518965175105113), 'Hyst2_JV_nrmse_linear': np.float64(0.03264376548932853), 'Hyst3_JV_nrmse_linear': np.float64(0.042491320560671376), 'Hyst4_JV_nrmse_linear': np.float64(0.03542727028838303)} and parameters: {'l2.mu_n': -3.9746098393029543, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.777547323096385e+20, 'l1.N_t_int': 382914981972.6417, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1.1175923445470903e+20, 'l2.mu_ions': -12.903024998245925}
[INFO 08-13 18:19:59] optimpv.axBOtorchOptimizer: Trial 15 with parameters: {'l2.mu_n': -3.7764520233417738, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1e+19, 'l1.N_t_int': 346904438175.0904, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -13.0}
[INFO 08-13 18:19:59] optimpv.axBOtorchOptimizer: Trial 16 with parameters: {'l2.mu_n': -4.088911528515358, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.8759618444013625e+19, 'l1.N_t_int': 477031127145.6788, 'l2.N_t_int': 750484528734.578, 'l2.N_ions': 2.7998380907143973e+21, 'l2.mu_ions': -11.767606363046522}
[INFO 08-13 18:20:15] optimpv.axBOtorchOptimizer: Trial 15 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.05164173526292562), 'Hyst2_JV_nrmse_linear': np.float64(0.052743469266355994), 'Hyst3_JV_nrmse_linear': np.float64(0.0795672398731531), 'Hyst4_JV_nrmse_linear': np.float64(0.05917670863498)} and parameters: {'l2.mu_n': -3.7764520233417738, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1e+19, 'l1.N_t_int': 346904438175.0904, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -13.0}
[INFO 08-13 18:20:15] optimpv.axBOtorchOptimizer: Trial 16 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.029932190164022637), 'Hyst2_JV_nrmse_linear': np.float64(0.039287667924859604), 'Hyst3_JV_nrmse_linear': np.float64(0.05259706885603487), 'Hyst4_JV_nrmse_linear': np.float64(0.030760828517806996)} and parameters: {'l2.mu_n': -4.088911528515358, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.8759618444013625e+19, 'l1.N_t_int': 477031127145.6788, 'l2.N_t_int': 750484528734.578, 'l2.N_ions': 2.7998380907143973e+21, 'l2.mu_ions': -11.767606363046522}
[INFO 08-13 18:20:23] optimpv.axBOtorchOptimizer: Trial 17 with parameters: {'l2.mu_n': -4.074343372689202, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 5.545249234648732e+20, 'l1.N_t_int': 437367274385.92664, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:20:23] optimpv.axBOtorchOptimizer: Trial 18 with parameters: {'l2.mu_n': -4.1661311209663205, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1e+21, 'l1.N_t_int': 451613187164.8935, 'l2.N_t_int': 100000000000.0, 'l2.N_ions': 1e+20, 'l2.mu_ions': -11.0}
[INFO 08-13 18:20:47] optimpv.axBOtorchOptimizer: Trial 17 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.0118982089937709), 'Hyst2_JV_nrmse_linear': np.float64(0.014854277005361075), 'Hyst3_JV_nrmse_linear': np.float64(0.0318013031218533), 'Hyst4_JV_nrmse_linear': np.float64(0.015066706106653156)} and parameters: {'l2.mu_n': -4.074343372689202, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 5.545249234648732e+20, 'l1.N_t_int': 437367274385.92664, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:20:47] optimpv.axBOtorchOptimizer: Trial 18 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.05960437226560999), 'Hyst2_JV_nrmse_linear': np.float64(0.05423286745257882), 'Hyst3_JV_nrmse_linear': np.float64(0.056162152514649226), 'Hyst4_JV_nrmse_linear': np.float64(0.06001417199396586)} and parameters: {'l2.mu_n': -4.1661311209663205, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1e+21, 'l1.N_t_int': 451613187164.8935, 'l2.N_t_int': 100000000000.0, 'l2.N_ions': 1e+20, 'l2.mu_ions': -11.0}
[INFO 08-13 18:20:53] optimpv.axBOtorchOptimizer: Trial 19 with parameters: {'l2.mu_n': -4.218843267565551, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 4.955292007943377e+20, 'l1.N_t_int': 496124005817.8106, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:20:53] optimpv.axBOtorchOptimizer: Trial 20 with parameters: {'l2.mu_n': -4.1458503653870125, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 7.774062946390131e+20, 'l1.N_t_int': 486957602533.51917, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:21:23] optimpv.axBOtorchOptimizer: Trial 19 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.009723907915565263), 'Hyst2_JV_nrmse_linear': np.float64(0.0110687250309328), 'Hyst3_JV_nrmse_linear': np.float64(0.03446283111873789), 'Hyst4_JV_nrmse_linear': np.float64(0.01669835959144029)} and parameters: {'l2.mu_n': -4.218843267565551, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 4.955292007943377e+20, 'l1.N_t_int': 496124005817.8106, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:21:23] optimpv.axBOtorchOptimizer: Trial 20 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.014233386959788631), 'Hyst2_JV_nrmse_linear': np.float64(0.011786356258096148), 'Hyst3_JV_nrmse_linear': np.float64(0.03491418116572195), 'Hyst4_JV_nrmse_linear': np.float64(0.021482240990794356)} and parameters: {'l2.mu_n': -4.1458503653870125, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 7.774062946390131e+20, 'l1.N_t_int': 486957602533.51917, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:21:29] optimpv.axBOtorchOptimizer: Trial 21 with parameters: {'l2.mu_n': -4.3402137086075605, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.7184036820519466e+20, 'l1.N_t_int': 474507380852.0341, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:21:29] optimpv.axBOtorchOptimizer: Trial 22 with parameters: {'l2.mu_n': -4.752229404623299, 'l2.mu_p': -3.2233108465637414, 'l2.N_t_bulk': 1e+19, 'l1.N_t_int': 281701493985.035, 'l2.N_t_int': 2085894469133.8064, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.894278263599519}
[INFO 08-13 18:22:00] optimpv.axBOtorchOptimizer: Trial 21 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.020313227263996134), 'Hyst2_JV_nrmse_linear': np.float64(0.025474030629292814), 'Hyst3_JV_nrmse_linear': np.float64(0.03764619763519731), 'Hyst4_JV_nrmse_linear': np.float64(0.022168315368311816)} and parameters: {'l2.mu_n': -4.3402137086075605, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.7184036820519466e+20, 'l1.N_t_int': 474507380852.0341, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:22:00] optimpv.axBOtorchOptimizer: Trial 22 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.08314543775016425), 'Hyst2_JV_nrmse_linear': np.float64(0.07892848962234576), 'Hyst3_JV_nrmse_linear': np.float64(0.09287137047627239), 'Hyst4_JV_nrmse_linear': np.float64(0.08643503168838991)} and parameters: {'l2.mu_n': -4.752229404623299, 'l2.mu_p': -3.2233108465637414, 'l2.N_t_bulk': 1e+19, 'l1.N_t_int': 281701493985.035, 'l2.N_t_int': 2085894469133.8064, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.894278263599519}
[INFO 08-13 18:22:13] optimpv.axBOtorchOptimizer: Trial 23 with parameters: {'l2.mu_n': -4.120883221426667, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 3.2680806744365315e+20, 'l1.N_t_int': 499278972077.0032, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:22:13] optimpv.axBOtorchOptimizer: Trial 24 with parameters: {'l2.mu_n': -4.141484257630819, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 4.573283907125406e+20, 'l1.N_t_int': 468470966413.6599, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:22:41] optimpv.axBOtorchOptimizer: Trial 23 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.0064699286449172375), 'Hyst2_JV_nrmse_linear': np.float64(0.009991465515291627), 'Hyst3_JV_nrmse_linear': np.float64(0.029146371016507813), 'Hyst4_JV_nrmse_linear': np.float64(0.012837215313713733)} and parameters: {'l2.mu_n': -4.120883221426667, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 3.2680806744365315e+20, 'l1.N_t_int': 499278972077.0032, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:22:41] optimpv.axBOtorchOptimizer: Trial 24 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.009455903865851139), 'Hyst2_JV_nrmse_linear': np.float64(0.012822718936060941), 'Hyst3_JV_nrmse_linear': np.float64(0.0320009049751844), 'Hyst4_JV_nrmse_linear': np.float64(0.01450994635372975)} and parameters: {'l2.mu_n': -4.141484257630819, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 4.573283907125406e+20, 'l1.N_t_int': 468470966413.6599, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:22:51] optimpv.axBOtorchOptimizer: Trial 25 with parameters: {'l2.mu_n': -4.093029695034793, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.5051714626406325e+20, 'l1.N_t_int': 519556395199.3356, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:22:51] optimpv.axBOtorchOptimizer: Trial 26 with parameters: {'l2.mu_n': -4.22773341582885, 'l2.mu_p': -3.02114230228294, 'l2.N_t_bulk': 7.883413629029059e+20, 'l1.N_t_int': 434720289153.3389, 'l2.N_t_int': 8110924873147.023, 'l2.N_ions': 8.377839459026595e+21, 'l2.mu_ions': -11.0}
[INFO 08-13 18:23:18] optimpv.axBOtorchOptimizer: Trial 25 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.005583887806759989), 'Hyst2_JV_nrmse_linear': np.float64(0.00827554653741358), 'Hyst3_JV_nrmse_linear': np.float64(0.02696650031997362), 'Hyst4_JV_nrmse_linear': np.float64(0.012359222381620153)} and parameters: {'l2.mu_n': -4.093029695034793, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.5051714626406325e+20, 'l1.N_t_int': 519556395199.3356, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:23:18] optimpv.axBOtorchOptimizer: Trial 26 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.01649321071487137), 'Hyst2_JV_nrmse_linear': np.float64(0.018109512543043372), 'Hyst3_JV_nrmse_linear': np.float64(0.03895462000175456), 'Hyst4_JV_nrmse_linear': np.float64(0.022432865112872177)} and parameters: {'l2.mu_n': -4.22773341582885, 'l2.mu_p': -3.02114230228294, 'l2.N_t_bulk': 7.883413629029059e+20, 'l1.N_t_int': 434720289153.3389, 'l2.N_t_int': 8110924873147.023, 'l2.N_ions': 8.377839459026595e+21, 'l2.mu_ions': -11.0}
[INFO 08-13 18:23:29] optimpv.axBOtorchOptimizer: Trial 27 with parameters: {'l2.mu_n': -4.08317546958045, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.2119513705591528e+20, 'l1.N_t_int': 535596841347.9194, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:23:29] optimpv.axBOtorchOptimizer: Trial 28 with parameters: {'l2.mu_n': -4.214838890104483, 'l2.mu_p': -3.0219407526790425, 'l2.N_t_bulk': 6.769851093055616e+20, 'l1.N_t_int': 427888391425.4456, 'l2.N_t_int': 7965189398995.414, 'l2.N_ions': 8.231712214799827e+21, 'l2.mu_ions': -11.011087596835289}
[INFO 08-13 18:23:56] optimpv.axBOtorchOptimizer: Trial 27 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.00706883176948637), 'Hyst2_JV_nrmse_linear': np.float64(0.007503255218449157), 'Hyst3_JV_nrmse_linear': np.float64(0.026209865251405232), 'Hyst4_JV_nrmse_linear': np.float64(0.013396372684363477)} and parameters: {'l2.mu_n': -4.08317546958045, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.2119513705591528e+20, 'l1.N_t_int': 535596841347.9194, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:23:56] optimpv.axBOtorchOptimizer: Trial 28 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.01650463407417324), 'Hyst2_JV_nrmse_linear': np.float64(0.01923501435873604), 'Hyst3_JV_nrmse_linear': np.float64(0.03824934296924632), 'Hyst4_JV_nrmse_linear': np.float64(0.02105219599358715)} and parameters: {'l2.mu_n': -4.214838890104483, 'l2.mu_p': -3.0219407526790425, 'l2.N_t_bulk': 6.769851093055616e+20, 'l1.N_t_int': 427888391425.4456, 'l2.N_t_int': 7965189398995.414, 'l2.N_ions': 8.231712214799827e+21, 'l2.mu_ions': -11.011087596835289}
[INFO 08-13 18:24:07] optimpv.axBOtorchOptimizer: Trial 29 with parameters: {'l2.mu_n': -4.090784070111856, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.9828137559575246e+20, 'l1.N_t_int': 541877839595.8417, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:24:07] optimpv.axBOtorchOptimizer: Trial 30 with parameters: {'l2.mu_n': -4.086494578983892, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.958442405481209e+20, 'l1.N_t_int': 537903411547.11566, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -13.0}
[INFO 08-13 18:24:37] optimpv.axBOtorchOptimizer: Trial 29 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.0074219513226072885), 'Hyst2_JV_nrmse_linear': np.float64(0.007633478470414971), 'Hyst3_JV_nrmse_linear': np.float64(0.026245795514603782), 'Hyst4_JV_nrmse_linear': np.float64(0.013501690774922193)} and parameters: {'l2.mu_n': -4.090784070111856, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.9828137559575246e+20, 'l1.N_t_int': 541877839595.8417, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:24:37] optimpv.axBOtorchOptimizer: Trial 30 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.0564225414882325), 'Hyst2_JV_nrmse_linear': np.float64(0.009433652330795734), 'Hyst3_JV_nrmse_linear': np.float64(0.04399708203639206), 'Hyst4_JV_nrmse_linear': np.float64(0.011480829798454651)} and parameters: {'l2.mu_n': -4.086494578983892, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.958442405481209e+20, 'l1.N_t_int': 537903411547.11566, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -13.0}
[INFO 08-13 18:24:43] optimpv.axBOtorchOptimizer: Trial 31 with parameters: {'l2.mu_n': -4.111818091880449, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.9783510205297505e+20, 'l1.N_t_int': 538196159266.2695, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.662292005315136}
[INFO 08-13 18:24:43] optimpv.axBOtorchOptimizer: Trial 32 with parameters: {'l2.mu_n': -4.116441737638811, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.3876924823206288e+20, 'l1.N_t_int': 565005774761.4169, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.816187892299354}
[INFO 08-13 18:25:08] optimpv.axBOtorchOptimizer: Trial 31 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.008512655011399866), 'Hyst2_JV_nrmse_linear': np.float64(0.030521147595350746), 'Hyst3_JV_nrmse_linear': np.float64(0.020556518948249596), 'Hyst4_JV_nrmse_linear': np.float64(0.006696888134559294)} and parameters: {'l2.mu_n': -4.111818091880449, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.9783510205297505e+20, 'l1.N_t_int': 538196159266.2695, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.662292005315136}
[INFO 08-13 18:25:08] optimpv.axBOtorchOptimizer: Trial 32 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.015881432534111384), 'Hyst2_JV_nrmse_linear': np.float64(0.039157417186650514), 'Hyst3_JV_nrmse_linear': np.float64(0.020937979018565613), 'Hyst4_JV_nrmse_linear': np.float64(0.00966082720257555)} and parameters: {'l2.mu_n': -4.116441737638811, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.3876924823206288e+20, 'l1.N_t_int': 565005774761.4169, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.816187892299354}
[INFO 08-13 18:25:14] optimpv.axBOtorchOptimizer: Trial 33 with parameters: {'l2.mu_n': -4.092039015901011, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.726608990816132e+20, 'l1.N_t_int': 489923535545.7575, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.255844938038097}
[INFO 08-13 18:25:14] optimpv.axBOtorchOptimizer: Trial 34 with parameters: {'l2.mu_n': -4.077086628612721, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.678407682028613e+20, 'l1.N_t_int': 488818619283.08453, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.082732479614569}
[INFO 08-13 18:25:40] optimpv.axBOtorchOptimizer: Trial 33 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.009574914398988802), 'Hyst2_JV_nrmse_linear': np.float64(0.013717739435524741), 'Hyst3_JV_nrmse_linear': np.float64(0.025828725476375568), 'Hyst4_JV_nrmse_linear': np.float64(0.011012428069265947)} and parameters: {'l2.mu_n': -4.092039015901011, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.726608990816132e+20, 'l1.N_t_int': 489923535545.7575, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.255844938038097}
[INFO 08-13 18:25:40] optimpv.axBOtorchOptimizer: Trial 34 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.00974686570100668), 'Hyst2_JV_nrmse_linear': np.float64(0.01427390924286347), 'Hyst3_JV_nrmse_linear': np.float64(0.02728894260366614), 'Hyst4_JV_nrmse_linear': np.float64(0.010368645921677735)} and parameters: {'l2.mu_n': -4.077086628612721, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.678407682028613e+20, 'l1.N_t_int': 488818619283.08453, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.082732479614569}
[INFO 08-13 18:25:48] optimpv.axBOtorchOptimizer: Trial 35 with parameters: {'l2.mu_n': -4.049877546862317, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.1189191676150566e+20, 'l1.N_t_int': 505007782500.7022, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.431573070764692}
[INFO 08-13 18:25:48] optimpv.axBOtorchOptimizer: Trial 36 with parameters: {'l2.mu_n': -4.169964954040131, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.934284274100334e+20, 'l1.N_t_int': 484331864306.6095, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -12.460377967932432}
[INFO 08-13 18:26:06] optimpv.axBOtorchOptimizer: Trial 35 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.004998777698880308), 'Hyst2_JV_nrmse_linear': np.float64(0.01716897359229934), 'Hyst3_JV_nrmse_linear': np.float64(0.02052125600183321), 'Hyst4_JV_nrmse_linear': np.float64(0.007173763597927433)} and parameters: {'l2.mu_n': -4.049877546862317, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.1189191676150566e+20, 'l1.N_t_int': 505007782500.7022, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.431573070764692}
[INFO 08-13 18:26:06] optimpv.axBOtorchOptimizer: Trial 36 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.0343994901301602), 'Hyst2_JV_nrmse_linear': np.float64(0.029863645726254835), 'Hyst3_JV_nrmse_linear': np.float64(0.04682201838762566), 'Hyst4_JV_nrmse_linear': np.float64(0.021043474976238586)} and parameters: {'l2.mu_n': -4.169964954040131, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.934284274100334e+20, 'l1.N_t_int': 484331864306.6095, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -12.460377967932432}
[INFO 08-13 18:26:15] optimpv.axBOtorchOptimizer: Trial 37 with parameters: {'l2.mu_n': -3.7634450643493897, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.117077047987702e+20, 'l1.N_t_int': 531597309937.13806, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.281059864436607}
[INFO 08-13 18:26:15] optimpv.axBOtorchOptimizer: Trial 38 with parameters: {'l2.mu_n': -3.808485225404118, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.230481589561937e+20, 'l1.N_t_int': 525135116464.85535, 'l2.N_t_int': 461553543049.7424, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.291368276616291}
[INFO 08-13 18:26:33] optimpv.axBOtorchOptimizer: Trial 37 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.009966438805618571), 'Hyst2_JV_nrmse_linear': np.float64(0.01082928878751976), 'Hyst3_JV_nrmse_linear': np.float64(0.012439981215401233), 'Hyst4_JV_nrmse_linear': np.float64(0.008737545595037114)} and parameters: {'l2.mu_n': -3.7634450643493897, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.117077047987702e+20, 'l1.N_t_int': 531597309937.13806, 'l2.N_t_int': 10000000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.281059864436607}
[INFO 08-13 18:26:33] optimpv.axBOtorchOptimizer: Trial 38 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.0019811043731817147), 'Hyst2_JV_nrmse_linear': np.float64(0.00796880995545576), 'Hyst3_JV_nrmse_linear': np.float64(0.029077221504551717), 'Hyst4_JV_nrmse_linear': np.float64(0.003123495985049425)} and parameters: {'l2.mu_n': -3.808485225404118, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.230481589561937e+20, 'l1.N_t_int': 525135116464.85535, 'l2.N_t_int': 461553543049.7424, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.291368276616291}
[INFO 08-13 18:26:40] optimpv.axBOtorchOptimizer: Trial 39 with parameters: {'l2.mu_n': -3.8972333822402763, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.4787167337211583e+20, 'l1.N_t_int': 541658458427.7625, 'l2.N_t_int': 2612121039878.5156, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.309602047273213}
[INFO 08-13 18:26:40] optimpv.axBOtorchOptimizer: Trial 40 with parameters: {'l2.mu_n': -3.87438788678261, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.4190230353649202e+20, 'l1.N_t_int': 546937104821.4718, 'l2.N_t_int': 5520449247776.352, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.350599767900794}
[INFO 08-13 18:26:57] optimpv.axBOtorchOptimizer: Trial 39 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.006062870052854999), 'Hyst2_JV_nrmse_linear': np.float64(0.008048501298088434), 'Hyst3_JV_nrmse_linear': np.float64(0.02303350814668581), 'Hyst4_JV_nrmse_linear': np.float64(0.004641612422680598)} and parameters: {'l2.mu_n': -3.8972333822402763, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.4787167337211583e+20, 'l1.N_t_int': 541658458427.7625, 'l2.N_t_int': 2612121039878.5156, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.309602047273213}
[INFO 08-13 18:26:57] optimpv.axBOtorchOptimizer: Trial 40 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.009944025335475884), 'Hyst2_JV_nrmse_linear': np.float64(0.01171051887566547), 'Hyst3_JV_nrmse_linear': np.float64(0.01642256668475242), 'Hyst4_JV_nrmse_linear': np.float64(0.0077559029693472096)} and parameters: {'l2.mu_n': -3.87438788678261, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.4190230353649202e+20, 'l1.N_t_int': 546937104821.4718, 'l2.N_t_int': 5520449247776.352, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.350599767900794}
[INFO 08-13 18:27:04] optimpv.axBOtorchOptimizer: Trial 41 with parameters: {'l2.mu_n': -3.8297327566668584, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.3853830792188435e+20, 'l1.N_t_int': 533303581116.29346, 'l2.N_t_int': 2059601753855.4, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.119871196338497}
[INFO 08-13 18:27:04] optimpv.axBOtorchOptimizer: Trial 42 with parameters: {'l2.mu_n': -3.8099893056989558, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.3387924664260913e+20, 'l1.N_t_int': 532077287432.61884, 'l2.N_t_int': 4820578295432.189, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.146884541244251}
[INFO 08-13 18:27:21] optimpv.axBOtorchOptimizer: Trial 41 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.0037324064986065855), 'Hyst2_JV_nrmse_linear': np.float64(0.005963842482554633), 'Hyst3_JV_nrmse_linear': np.float64(0.023919073146611156), 'Hyst4_JV_nrmse_linear': np.float64(0.006085003823329194)} and parameters: {'l2.mu_n': -3.8297327566668584, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.3853830792188435e+20, 'l1.N_t_int': 533303581116.29346, 'l2.N_t_int': 2059601753855.4, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.119871196338497}
[INFO 08-13 18:27:21] optimpv.axBOtorchOptimizer: Trial 42 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.0058643229320700764), 'Hyst2_JV_nrmse_linear': np.float64(0.004733829954539225), 'Hyst3_JV_nrmse_linear': np.float64(0.017290921922960403), 'Hyst4_JV_nrmse_linear': np.float64(0.007310489649638924)} and parameters: {'l2.mu_n': -3.8099893056989558, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.3387924664260913e+20, 'l1.N_t_int': 532077287432.61884, 'l2.N_t_int': 4820578295432.189, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.146884541244251}
[INFO 08-13 18:27:29] optimpv.axBOtorchOptimizer: Trial 43 with parameters: {'l2.mu_n': -3.8178071666685858, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.291058257127655e+20, 'l1.N_t_int': 505471919162.2494, 'l2.N_t_int': 1355038446058.6775, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.213623628930918}
[INFO 08-13 18:27:29] optimpv.axBOtorchOptimizer: Trial 44 with parameters: {'l2.mu_n': -3.7768253712767628, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.2602618640751198e+20, 'l1.N_t_int': 503072480536.1889, 'l2.N_t_int': 2853244521379.9077, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.221121713344468}
[INFO 08-13 18:27:45] optimpv.axBOtorchOptimizer: Trial 43 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.0057886639471142155), 'Hyst2_JV_nrmse_linear': np.float64(0.010448071646425156), 'Hyst3_JV_nrmse_linear': np.float64(0.02886883125933898), 'Hyst4_JV_nrmse_linear': np.float64(0.006161651915358366)} and parameters: {'l2.mu_n': -3.8178071666685858, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.291058257127655e+20, 'l1.N_t_int': 505471919162.2494, 'l2.N_t_int': 1355038446058.6775, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.213623628930918}
[INFO 08-13 18:27:45] optimpv.axBOtorchOptimizer: Trial 44 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.004445484766950791), 'Hyst2_JV_nrmse_linear': np.float64(0.008168483173615593), 'Hyst3_JV_nrmse_linear': np.float64(0.022716063463621084), 'Hyst4_JV_nrmse_linear': np.float64(0.004733419067706095)} and parameters: {'l2.mu_n': -3.7768253712767628, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.2602618640751198e+20, 'l1.N_t_int': 503072480536.1889, 'l2.N_t_int': 2853244521379.9077, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.221121713344468}
[INFO 08-13 18:27:56] optimpv.axBOtorchOptimizer: Trial 45 with parameters: {'l2.mu_n': -3.822624982550837, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.958535741005093e+20, 'l1.N_t_int': 556971745555.8469, 'l2.N_t_int': 846529500964.0835, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.186846395022828}
[INFO 08-13 18:27:56] optimpv.axBOtorchOptimizer: Trial 46 with parameters: {'l2.mu_n': -3.8709506689331508, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.1262327597384155e+20, 'l1.N_t_int': 532396703724.1145, 'l2.N_t_int': 1276771056517.173, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.369382183901903}
[INFO 08-13 18:28:13] optimpv.axBOtorchOptimizer: Trial 45 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.006840928672549961), 'Hyst2_JV_nrmse_linear': np.float64(0.0060524073209316884), 'Hyst3_JV_nrmse_linear': np.float64(0.0256975505352284), 'Hyst4_JV_nrmse_linear': np.float64(0.006946180464347371)} and parameters: {'l2.mu_n': -3.822624982550837, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.958535741005093e+20, 'l1.N_t_int': 556971745555.8469, 'l2.N_t_int': 846529500964.0835, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.186846395022828}
[INFO 08-13 18:28:13] optimpv.axBOtorchOptimizer: Trial 46 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.0024671779186851315), 'Hyst2_JV_nrmse_linear': np.float64(0.00980695579583083), 'Hyst3_JV_nrmse_linear': np.float64(0.02715453664193867), 'Hyst4_JV_nrmse_linear': np.float64(0.003587828246209313)} and parameters: {'l2.mu_n': -3.8709506689331508, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.1262327597384155e+20, 'l1.N_t_int': 532396703724.1145, 'l2.N_t_int': 1276771056517.173, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.369382183901903}
[INFO 08-13 18:28:23] optimpv.axBOtorchOptimizer: Trial 47 with parameters: {'l2.mu_n': -3.890310916669414, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.4998148539375593e+20, 'l1.N_t_int': 513710922751.5511, 'l2.N_t_int': 1262860327633.4104, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.37767421643763}
[INFO 08-13 18:28:23] optimpv.axBOtorchOptimizer: Trial 48 with parameters: {'l2.mu_n': -3.8755192297719776, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.6332102750240306e+20, 'l1.N_t_int': 523132494247.9424, 'l2.N_t_int': 2150641864459.8833, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.234414051786072}
[INFO 08-13 18:28:41] optimpv.axBOtorchOptimizer: Trial 47 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.004340484355241421), 'Hyst2_JV_nrmse_linear': np.float64(0.012361050377805827), 'Hyst3_JV_nrmse_linear': np.float64(0.029576821779035783), 'Hyst4_JV_nrmse_linear': np.float64(0.006501485232724979)} and parameters: {'l2.mu_n': -3.890310916669414, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.4998148539375593e+20, 'l1.N_t_int': 513710922751.5511, 'l2.N_t_int': 1262860327633.4104, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.37767421643763}
[INFO 08-13 18:28:41] optimpv.axBOtorchOptimizer: Trial 48 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.0027907833420766997), 'Hyst2_JV_nrmse_linear': np.float64(0.00660904181228305), 'Hyst3_JV_nrmse_linear': np.float64(0.025560525178246266), 'Hyst4_JV_nrmse_linear': np.float64(0.0031804365901938764)} and parameters: {'l2.mu_n': -3.8755192297719776, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.6332102750240306e+20, 'l1.N_t_int': 523132494247.9424, 'l2.N_t_int': 2150641864459.8833, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.234414051786072}
[INFO 08-13 18:28:48] optimpv.axBOtorchOptimizer: Trial 49 with parameters: {'l2.mu_n': -3.8767034825896127, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.7152615534726922e+20, 'l1.N_t_int': 543263322573.97815, 'l2.N_t_int': 1533205304813.4692, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.142966389863117}
[INFO 08-13 18:28:48] optimpv.axBOtorchOptimizer: Trial 50 with parameters: {'l2.mu_n': -3.223494653234046, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.2852757743260338e+20, 'l1.N_t_int': 617177712596.5895, 'l2.N_t_int': 100000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[INFO 08-13 18:29:06] optimpv.axBOtorchOptimizer: Trial 49 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.00647527876763924), 'Hyst2_JV_nrmse_linear': np.float64(0.005846409616209376), 'Hyst3_JV_nrmse_linear': np.float64(0.026318635425816802), 'Hyst4_JV_nrmse_linear': np.float64(0.00787918855984784)} and parameters: {'l2.mu_n': -3.8767034825896127, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.7152615534726922e+20, 'l1.N_t_int': 543263322573.97815, 'l2.N_t_int': 1533205304813.4692, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.142966389863117}
[INFO 08-13 18:29:06] optimpv.axBOtorchOptimizer: Trial 50 completed with results: {'Hyst1_JV_nrmse_linear': np.float64(0.02379224360189652), 'Hyst2_JV_nrmse_linear': np.float64(0.021283869129847678), 'Hyst3_JV_nrmse_linear': np.float64(0.018619500581546596), 'Hyst4_JV_nrmse_linear': np.float64(0.026657115722467352)} and parameters: {'l2.mu_n': -3.223494653234046, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 1.2852757743260338e+20, 'l1.N_t_int': 617177712596.5895, 'l2.N_t_int': 100000000000.0, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.0}
[7]:
# get the best parameters and update the params list in the optimizer and the agent
ax_client = optimizer.ax_client # get the ax client
optimizer.update_params_with_best_balance() # update the params list in the optimizer with the best parameters
hyst1.params = optimizer.params # update the params list in the agent with the best parameters
hyst2.params = optimizer.params # update the params list in the agent with the best parameters
hyst3.params = optimizer.params # update the params list in the agent with the best parameters
hyst4.params = optimizer.params # update the params list in the agent with the best parameters
# print the best parameters
print('Best parameters:')
for p,po in zip(optimizer.params, params_orig):
print(p.name, 'fitted value:', p.value, 'original value:', po.value)
print('\nSimSS command line:')
print(hyst1.get_SIMsalabim_clean_cmd(hyst1.params,sim_type='zimt')) # print the simss command line with the best parameters
Best parameters:
l2.mu_n fitted value: 0.00013319280656484567 original value: 0.0006
l2.mu_p fitted value: 0.001 original value: 0.0004
l2.N_t_bulk fitted value: 2.6332102750240306e+20 original value: 1e+20
l1.N_t_int fitted value: 523132494247.9424 original value: 500000000000.0
l2.N_t_int fitted value: 2150641864459.8833 original value: 4000000000000.0
l2.N_ions fitted value: 1e+22 original value: 1e+22
l2.mu_ions fitted value: 5.828891189322099e-12 original value: 5.7e-12
R_series fitted value: 0.0 original value: 0.0
SimSS command line:
./zimt -l2.mu_n 0.00013319280656484567 -l2.mu_p 0.001 -l2.N_t_bulk 2.6332102750240306e+20 -l1.N_t_int 523132494247.9424 -l2.N_t_int 2150641864459.8833 -l2.N_anion 1e+22 -l2.N_cation 1e+22 -l2.mu_anion 5.828891189322099e-12 -l2.mu_cation 5.828891189322099e-12 -R_series 0.0
[8]:
# Plot optimization results
data = ax_client.summarize()
all_metrics = optimizer.all_metrics
plt.figure()
plt.plot(np.minimum.accumulate(data[all_metrics]), label="Best value seen so far")
plt.yscale("log")
plt.xlabel("Iteration")
plt.ylabel("Target metric: " + metric + " with " + loss + " loss")
plt.legend()
plt.title("Best value seen so far")
plt.show()

[9]:
import matplotlib
# import itertools
from itertools import combinations
comb = list(combinations(optimizer.all_metrics, 2))
threshold_list = []
for i in range(len(optimizer.agents)):
for j in range(len(optimizer.agents[i].threshold)):
threshold_list.append(optimizer.agents[i].threshold[j])
threshold_comb = list(combinations(threshold_list, 2))
pareto = ax_client.get_pareto_frontier(use_model_predictions=False)
print('Pareto frontier:', pareto)
cm = matplotlib.colormaps.get_cmap('viridis')
df = get_df_from_ax(params, optimizer)
# create pareto df
dum_dic = {}
for eto in pareto:
print(eto[1])
for metr in optimizer.all_metrics:
if metr not in dum_dic.keys():
dum_dic[metr] = []
dum_dic[metr].append(eto[1][metr][0])
df_pareto = pd.DataFrame(dum_dic)
for c,t_c in zip(comb,threshold_comb):
plt.figure(figsize=(10, 10))
plt.scatter(df[c[0]],df[c[1]],c=df.index, cmap=cm, marker='o', s=100) # plot the points with color according to the iteration
cbar = plt.colorbar()
cbar.set_label('Iteration')
sorted_df = df_pareto.sort_values(by=c[0])
plt.plot(sorted_df[c[0]],sorted_df[c[1]],'r')
plt.scatter(t_c[0],t_c[1],c='r', marker='x', s=100) # plot the threshold
plt.xlabel(c[0])
plt.ylabel(c[1])
plt.xscale('log')
plt.yscale('log')
plt.show()
Pareto frontier: [({'l2.mu_n': -3.8755192297719776, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.6332102750240306e+20, 'l1.N_t_int': 523132494247.9424, 'l2.N_t_int': 2150641864459.8833, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.234414051786072}, {'Hyst1_JV_nrmse_linear': (np.float64(0.0027907833420766997), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.00660904181228305), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.025560525178246266), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.0031804365901938764), nan)}, 48, '48_0'), ({'l2.mu_n': -3.7768253712767628, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.2602618640751198e+20, 'l1.N_t_int': 503072480536.1889, 'l2.N_t_int': 2853244521379.9077, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.221121713344468}, {'Hyst1_JV_nrmse_linear': (np.float64(0.004445484766950791), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.008168483173615593), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.022716063463621084), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.004733419067706095), nan)}, 44, '44_0'), ({'l2.mu_n': -3.8297327566668584, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.3853830792188435e+20, 'l1.N_t_int': 533303581116.29346, 'l2.N_t_int': 2059601753855.4, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.119871196338497}, {'Hyst1_JV_nrmse_linear': (np.float64(0.0037324064986065855), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.005963842482554633), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.023919073146611156), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.006085003823329194), nan)}, 41, '41_0'), ({'l2.mu_n': -3.808485225404118, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.230481589561937e+20, 'l1.N_t_int': 525135116464.85535, 'l2.N_t_int': 461553543049.7424, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.291368276616291}, {'Hyst1_JV_nrmse_linear': (np.float64(0.0019811043731817147), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.00796880995545576), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.029077221504551717), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.003123495985049425), nan)}, 38, '38_0'), ({'l2.mu_n': -3.8972333822402763, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.4787167337211583e+20, 'l1.N_t_int': 541658458427.7625, 'l2.N_t_int': 2612121039878.5156, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.309602047273213}, {'Hyst1_JV_nrmse_linear': (np.float64(0.006062870052854999), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.008048501298088434), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.02303350814668581), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.004641612422680598), nan)}, 39, '39_0'), ({'l2.mu_n': -3.8099893056989558, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.3387924664260913e+20, 'l1.N_t_int': 532077287432.61884, 'l2.N_t_int': 4820578295432.189, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.146884541244251}, {'Hyst1_JV_nrmse_linear': (np.float64(0.0058643229320700764), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.004733829954539225), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.017290921922960403), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.007310489649638924), nan)}, 42, '42_0'), ({'l2.mu_n': -3.8709506689331508, 'l2.mu_p': -3.0, 'l2.N_t_bulk': 2.1262327597384155e+20, 'l1.N_t_int': 532396703724.1145, 'l2.N_t_int': 1276771056517.173, 'l2.N_ions': 1e+22, 'l2.mu_ions': -11.369382183901903}, {'Hyst1_JV_nrmse_linear': (np.float64(0.0024671779186851315), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.00980695579583083), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.02715453664193867), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.003587828246209313), nan)}, 46, '46_0')]
{'Hyst1_JV_nrmse_linear': (np.float64(0.0027907833420766997), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.00660904181228305), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.025560525178246266), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.0031804365901938764), nan)}
{'Hyst1_JV_nrmse_linear': (np.float64(0.004445484766950791), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.008168483173615593), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.022716063463621084), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.004733419067706095), nan)}
{'Hyst1_JV_nrmse_linear': (np.float64(0.0037324064986065855), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.005963842482554633), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.023919073146611156), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.006085003823329194), nan)}
{'Hyst1_JV_nrmse_linear': (np.float64(0.0019811043731817147), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.00796880995545576), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.029077221504551717), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.003123495985049425), nan)}
{'Hyst1_JV_nrmse_linear': (np.float64(0.006062870052854999), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.008048501298088434), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.02303350814668581), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.004641612422680598), nan)}
{'Hyst1_JV_nrmse_linear': (np.float64(0.0058643229320700764), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.004733829954539225), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.017290921922960403), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.007310489649638924), nan)}
{'Hyst1_JV_nrmse_linear': (np.float64(0.0024671779186851315), nan), 'Hyst2_JV_nrmse_linear': (np.float64(0.00980695579583083), nan), 'Hyst3_JV_nrmse_linear': (np.float64(0.02715453664193867), nan), 'Hyst4_JV_nrmse_linear': (np.float64(0.003587828246209313), nan)}






[10]:
# Plot the density of the exploration of the parameters
# this gives a nice visualization of where the optimizer focused its exploration and may show some correlation between the parameters
plot_dens = True
if plot_dens:
from optimpv.posterior.posterior import *
params_orig_dict, best_parameters = {}, {}
for p in params_orig:
params_orig_dict[p.name] = p.value
for p in optimizer.params:
best_parameters[p.name] = p.value
fig_dens, ax_dens = plot_density_exploration(params, optimizer = optimizer, best_parameters = best_parameters, params_orig = params_orig_dict, optimizer_type = 'ax')

[11]:
# rerun the simulation with the best parameters
def run_hyst(idx):
if idx == 0:
yfit = hyst1.run(parameters={})
return yfit
elif idx == 1:
yfit = hyst2.run(parameters={})
return yfit
elif idx == 2:
yfit = hyst3.run(parameters={})
return yfit
elif idx == 3:
yfit = hyst4.run(parameters={})
return yfit
# Run the simulations in parallel
results = joblib.Parallel(n_jobs=-1)(
joblib.delayed(run_hyst)(i) for i in range(4)
)
# Extract results hyst.run returns only yfit
yfit1 = results[0]
yfit2 = results[1]
yfit3 = results[2]
yfit4 = results[3]
# Plot the results
plt.figure(figsize=(10, 10))
viridis = plt.get_cmap('viridis', 4)
plt.plot(X1, y1, label=f'Scan Speed = 0.1',c=viridis(0),linewidth=2,alpha=0.5)
plt.plot(X2, y2, label=f'Scan Speed = 1',c=viridis(1),linewidth=2,alpha=0.5)
plt.plot(X3, y3, label=f'Scan Speed = 10',c=viridis(2),linewidth=2,alpha=0.5)
plt.plot(X4, y4, label=f'Scan Speed = 100',c=viridis(3),linewidth=2,alpha=0.5)
plt.plot(X1, yfit1, label=f'Fit Scan Speed = 0.1',c=viridis(0),linewidth=2,linestyle='--')
plt.plot(X2, yfit2, label=f'Fit Scan Speed = 1',c=viridis(1),linewidth=2,linestyle='--')
plt.plot(X3, yfit3, label=f'Fit Scan Speed = 10',c=viridis(2),linewidth=2,linestyle='--')
plt.plot(X4, yfit4, label=f'Fit Scan Speed = 100',c=viridis(3),linewidth=2,linestyle='--')
plt.xlabel('Applied Voltage [V]')
plt.ylabel('Current Density [A/m$^2$]')
plt.legend()
plt.show()

[12]:
# Clean up the output files (comment out if you want to keep the output files)
sim.clean_all_output(session_path_zimt)
sim.delete_folders('tmp',session_path_zimt)
# uncomment the following lines to delete specific files
sim.clean_up_output('PTAA',session_path_zimt)
sim.clean_up_output('fakePerovskite',session_path_zimt)
sim.clean_up_output('C60',session_path_zimt)
sim.clean_up_output('simulation_setup_zimt_fakePerovskite',session_path_zimt)
sim.clean_up_output('freqZ',session_path_zimt)
# same for the input files
for file in optical_files:
sim.clean_up_output(file,session_path_zimt)