Layer stack optimization with Transfer Matrix Method (TMM)
This notebook demonstrate the use of multi-objective Bayesian optimization in combination with transfer matrix modeling (TMM) to optimize the thickness of the layers in a multilayer stack and the choice of materials to maximize the average visible transmittance (AVT) and the current density (Jsc) of a solar cell.
To perform the transfer matrix modeling we use a modified version of the open-source program devoloped by McGehee’s group (Stanford University) and adapted to python by Kamil Mielczarek (University of Texas).
For more information about the transfer matrix modeling, please refer to the original paper.
[1]:
# Import necessary libraries
import warnings, os, sys, shutil
# remove warnings from the output
os.environ["PYTHONWARNINGS"] = "ignore"
warnings.filterwarnings('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
from scipy import constants
import torch, copy, uuid, matplotlib, ax, logging
from ax.utils.notebook.plotting import init_notebook_plotting, render
init_notebook_plotting() # for Jupyter notebooks
try:
from optimpv import *
from optimpv.axBOtorch.axUtils import *
from optimpv.axBOtorch.axBOtorchOptimizer import axBOtorchOptimizer
except Exception as e:
sys.path.append('../') # add the path to the optimpv module
from optimpv import *
from optimpv.axBOtorch.axUtils import *
from optimpv.axBOtorch.axBOtorchOptimizer import axBOtorchOptimizer
[INFO 08-14 10:52:54] ax.utils.notebook.plotting: Injecting Plotly library into cell. Do not overwrite or delete cell.
[INFO 08-14 10:52:54] 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 = []
d_3 = FitParam(name = 'd_3', value = 80e-9, bounds = [40e-9, 200e-9], log_scale = False, rescale = True, stepsize=1e-9, value_type = 'int', type='range', display_name='d_3',unit='m')
params.append(d_3)
d_6 = FitParam(name = 'd_6', value = 10e-9, bounds = [5e-9, 20e-9], log_scale = False, rescale = True, stepsize=1e-9, value_type = 'int', type='range', display_name='d_6',unit='m')
params.append(d_6)
d_7 = FitParam(name = 'd_7', value = 100e-9, bounds = [50e-9, 200e-9], log_scale = False, rescale = True, stepsize=1e-9, value_type = 'int', type='range', display_name='d_7',unit='m')
params.append(d_7)
d_8 = FitParam(name = 'd_8', value = 10e-9, bounds = [5e-9, 20e-9], log_scale = False, rescale = True, stepsize=1e-9, value_type = 'int', type='range', display_name='d_8',unit='m')
params.append(d_8)
d_9 = FitParam(name = 'd_9', value = 100e-9, bounds = [50e-9, 200e-9], log_scale = False, rescale = True, stepsize=1e-9, value_type = 'int', type='range', display_name='d_9',unit='m')
params.append(d_9)
nk_3 = FitParam(name = 'nk_3', value = 'PCE10_FOIC_1to1', values = ['PCE10_FOIC_1to1','P3HTPCBM_BHJ','PM6Y6Brabec'], log_scale = False, rescale = False, value_type = 'str', type='choice', display_name='nk_3',unit='')
params.append(nk_3)
Run the optimization
[3]:
# Initialize the agent and default device stack
layers = ['SiOx' , 'ITO' , 'ZnO' , 'PCE10_FOIC_1to1' , 'MoOx' , 'Ag', 'MoOx', 'LiF','MoOx', 'LiF','Air'] # list of layers (need to be the same than the name nk_*.csv file in the matdata folder)
thicknesses = [0 , 100e-9 , 30e-9 , 100e-9 , 9e-9 , 8e-9, 100e-9, 100e-9, 100e-9, 100e-9, 100e-9]# list of thicknesses in nm
mat_dir = os.path.join(os.path.abspath('../'),'Data','matdata') # path to the folder containing the nk_*.csv files
lambda_min = 350e-9 # start of the wavelength range
lambda_max = 800e-9 # end of the wavelength range
lambda_step = 1e-9 # wavelength step
x_step = 1e-9 # x step
activeLayer = 3 # active layer index
spectrum = os.path.join(mat_dir ,'AM15G.txt') # path to the AM15G spectrum file
photopic_file = os.path.join(mat_dir ,'photopic_curve.txt') # path to the photopic spectrum file
[4]:
from optimpv.TransferMatrix.TransferMatrixAgent import TransferMatrixAgent
TMAgent = TransferMatrixAgent(params, [None,None], layers=layers, thicknesses=thicknesses, lambda_min=lambda_min, lambda_max=lambda_max, lambda_step=lambda_step, x_step=x_step, activeLayer=activeLayer, spectrum=spectrum, mat_dir=mat_dir, photopic_file=photopic_file, exp_format=['Jsc', 'AVT'],metric=[None,None],loss=[None,None],threshold=[4,0.1],minimize=[False,False])
[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,}]
# from botorch.acquisition.multi_objective.logei import qLogExpectedHypervolumeImprovement
# model_kwargs_list = [{},{'torch_device': torch.device("cuda" if torch.cuda.is_available() else "cpu"),'torch_dtype': torch.double,'botorch_acqf_class':qLogExpectedHypervolumeImprovement}]
optimizer = axBOtorchOptimizer(params = params, agents = TMAgent, models = ['SOBOL','BOTORCH_MODULAR'],n_batches = [1,20], batch_size = [10,4], ax_client = None, max_parallelism = -1, model_kwargs_list = model_kwargs_list, model_gen_kwargs_list = None, name = 'ax_opti',parameter_constraints=None)
[6]:
optimizer.optimize()
[INFO 08-14 10:52:55] optimpv.axBOtorchOptimizer: Trial 0 with parameters: {'d_3': 165, 'd_6': 17, 'd_7': 170, 'd_8': 14, 'd_9': 192, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:52:55] optimpv.axBOtorchOptimizer: Trial 1 with parameters: {'d_3': 59, 'd_6': 5, 'd_7': 92, 'd_8': 9, 'd_9': 116, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:52:55] optimpv.axBOtorchOptimizer: Trial 2 with parameters: {'d_3': 85, 'd_6': 14, 'd_7': 137, 'd_8': 20, 'd_9': 55, 'nk_3': 'P3HTPCBM_BHJ'}
[INFO 08-14 10:52:55] optimpv.axBOtorchOptimizer: Trial 3 with parameters: {'d_3': 139, 'd_6': 10, 'd_7': 59, 'd_8': 7, 'd_9': 130, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:52:55] optimpv.axBOtorchOptimizer: Trial 4 with parameters: {'d_3': 155, 'd_6': 16, 'd_7': 111, 'd_8': 6, 'd_9': 149, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:52:55] optimpv.axBOtorchOptimizer: Trial 5 with parameters: {'d_3': 108, 'd_6': 12, 'd_7': 189, 'd_8': 17, 'd_9': 73, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:52:55] optimpv.axBOtorchOptimizer: Trial 6 with parameters: {'d_3': 75, 'd_6': 19, 'd_7': 78, 'd_8': 12, 'd_9': 97, 'nk_3': 'P3HTPCBM_BHJ'}
[INFO 08-14 10:52:55] optimpv.axBOtorchOptimizer: Trial 7 with parameters: {'d_3': 188, 'd_6': 7, 'd_7': 156, 'd_8': 15, 'd_9': 172, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:52:55] optimpv.axBOtorchOptimizer: Trial 8 with parameters: {'d_3': 191, 'd_6': 13, 'd_7': 77, 'd_8': 18, 'd_9': 109, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:52:55] optimpv.axBOtorchOptimizer: Trial 9 with parameters: {'d_3': 62, 'd_6': 9, 'd_7': 150, 'd_8': 5, 'd_9': 184, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:52:56] optimpv.axBOtorchOptimizer: Trial 0 completed with results: {'TM_Jsc': np.float64(194.07996125048825), 'TM_AVT': np.float64(0.14367097077356697)} and parameters: {'d_3': 165, 'd_6': 17, 'd_7': 170, 'd_8': 14, 'd_9': 192, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:52:56] optimpv.axBOtorchOptimizer: Trial 1 completed with results: {'TM_Jsc': np.float64(128.82052971192724), 'TM_AVT': np.float64(0.4960292383689154)} and parameters: {'d_3': 59, 'd_6': 5, 'd_7': 92, 'd_8': 9, 'd_9': 116, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:52:56] optimpv.axBOtorchOptimizer: Trial 2 completed with results: {'TM_Jsc': np.float64(66.55923143371515), 'TM_AVT': np.float64(0.36605259265507045)} and parameters: {'d_3': 85, 'd_6': 14, 'd_7': 137, 'd_8': 20, 'd_9': 55, 'nk_3': 'P3HTPCBM_BHJ'}
[INFO 08-14 10:52:56] optimpv.axBOtorchOptimizer: Trial 3 completed with results: {'TM_Jsc': np.float64(165.93955113778694), 'TM_AVT': np.float64(0.32003186316699445)} and parameters: {'d_3': 139, 'd_6': 10, 'd_7': 59, 'd_8': 7, 'd_9': 130, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:52:56] optimpv.axBOtorchOptimizer: Trial 4 completed with results: {'TM_Jsc': np.float64(170.5915375043124), 'TM_AVT': np.float64(0.31380417448401837)} and parameters: {'d_3': 155, 'd_6': 16, 'd_7': 111, 'd_8': 6, 'd_9': 149, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:52:56] optimpv.axBOtorchOptimizer: Trial 5 completed with results: {'TM_Jsc': np.float64(163.33515995677195), 'TM_AVT': np.float64(0.2575914609987644)} and parameters: {'d_3': 108, 'd_6': 12, 'd_7': 189, 'd_8': 17, 'd_9': 73, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:52:56] optimpv.axBOtorchOptimizer: Trial 6 completed with results: {'TM_Jsc': np.float64(62.84646424111506), 'TM_AVT': np.float64(0.3947932115788847)} and parameters: {'d_3': 75, 'd_6': 19, 'd_7': 78, 'd_8': 12, 'd_9': 97, 'nk_3': 'P3HTPCBM_BHJ'}
[INFO 08-14 10:52:56] optimpv.axBOtorchOptimizer: Trial 7 completed with results: {'TM_Jsc': np.float64(187.167063642268), 'TM_AVT': np.float64(0.22384908359069827)} and parameters: {'d_3': 188, 'd_6': 7, 'd_7': 156, 'd_8': 15, 'd_9': 172, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:52:56] optimpv.axBOtorchOptimizer: Trial 8 completed with results: {'TM_Jsc': np.float64(188.63212982594757), 'TM_AVT': np.float64(0.23054866364391807)} and parameters: {'d_3': 191, 'd_6': 13, 'd_7': 77, 'd_8': 18, 'd_9': 109, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:52:56] optimpv.axBOtorchOptimizer: Trial 9 completed with results: {'TM_Jsc': np.float64(127.09964992735344), 'TM_AVT': np.float64(0.36235622259792427)} and parameters: {'d_3': 62, 'd_6': 9, 'd_7': 150, 'd_8': 5, 'd_9': 184, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:53:18] optimpv.axBOtorchOptimizer: Trial 10 with parameters: {'d_3': 97, 'd_6': 20, 'd_7': 179, 'd_8': 20, 'd_9': 138, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:18] optimpv.axBOtorchOptimizer: Trial 11 with parameters: {'d_3': 137, 'd_6': 20, 'd_7': 199, 'd_8': 20, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:18] optimpv.axBOtorchOptimizer: Trial 12 with parameters: {'d_3': 199, 'd_6': 20, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:18] optimpv.axBOtorchOptimizer: Trial 13 with parameters: {'d_3': 75, 'd_6': 18, 'd_7': 160, 'd_8': 17, 'd_9': 105, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:19] optimpv.axBOtorchOptimizer: Trial 10 completed with results: {'TM_Jsc': np.float64(135.0750254890087), 'TM_AVT': np.float64(0.4573170938322589)} and parameters: {'d_3': 97, 'd_6': 20, 'd_7': 179, 'd_8': 20, 'd_9': 138, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:19] optimpv.axBOtorchOptimizer: Trial 11 completed with results: {'TM_Jsc': np.float64(162.8184431462132), 'TM_AVT': np.float64(0.3416116076758316)} and parameters: {'d_3': 137, 'd_6': 20, 'd_7': 199, 'd_8': 20, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:19] optimpv.axBOtorchOptimizer: Trial 12 completed with results: {'TM_Jsc': np.float64(187.9846056270133), 'TM_AVT': np.float64(0.24796876979388602)} and parameters: {'d_3': 199, 'd_6': 20, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:19] optimpv.axBOtorchOptimizer: Trial 13 completed with results: {'TM_Jsc': np.float64(121.0844181109945), 'TM_AVT': np.float64(0.5361805249401563)} and parameters: {'d_3': 75, 'd_6': 18, 'd_7': 160, 'd_8': 17, 'd_9': 105, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:35] optimpv.axBOtorchOptimizer: Trial 14 with parameters: {'d_3': 100, 'd_6': 8, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:35] optimpv.axBOtorchOptimizer: Trial 15 with parameters: {'d_3': 199, 'd_6': 20, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:53:35] optimpv.axBOtorchOptimizer: Trial 16 with parameters: {'d_3': 76, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:35] optimpv.axBOtorchOptimizer: Trial 17 with parameters: {'d_3': 199, 'd_6': 20, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:36] optimpv.axBOtorchOptimizer: Trial 14 completed with results: {'TM_Jsc': np.float64(143.5179159834535), 'TM_AVT': np.float64(0.4360534210683993)} and parameters: {'d_3': 100, 'd_6': 8, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:36] optimpv.axBOtorchOptimizer: Trial 15 completed with results: {'TM_Jsc': np.float64(206.36503055328703), 'TM_AVT': np.float64(0.08941637527827297)} and parameters: {'d_3': 199, 'd_6': 20, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:53:36] optimpv.axBOtorchOptimizer: Trial 16 completed with results: {'TM_Jsc': np.float64(131.60432036139215), 'TM_AVT': np.float64(0.5155124610471571)} and parameters: {'d_3': 76, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:36] optimpv.axBOtorchOptimizer: Trial 17 completed with results: {'TM_Jsc': np.float64(190.16837537835218), 'TM_AVT': np.float64(0.2265163028234459)} and parameters: {'d_3': 199, 'd_6': 20, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:52] optimpv.axBOtorchOptimizer: Trial 18 with parameters: {'d_3': 56, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:52] optimpv.axBOtorchOptimizer: Trial 19 with parameters: {'d_3': 199, 'd_6': 16, 'd_7': 49, 'd_8': 5, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:53:52] optimpv.axBOtorchOptimizer: Trial 20 with parameters: {'d_3': 199, 'd_6': 20, 'd_7': 49, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:52] optimpv.axBOtorchOptimizer: Trial 21 with parameters: {'d_3': 100, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:52] optimpv.axBOtorchOptimizer: Trial 18 completed with results: {'TM_Jsc': np.float64(116.31932211275674), 'TM_AVT': np.float64(0.5880402332550952)} and parameters: {'d_3': 56, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:52] optimpv.axBOtorchOptimizer: Trial 19 completed with results: {'TM_Jsc': np.float64(206.70729327822855), 'TM_AVT': np.float64(0.08859093686978074)} and parameters: {'d_3': 199, 'd_6': 16, 'd_7': 49, 'd_8': 5, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:53:52] optimpv.axBOtorchOptimizer: Trial 20 completed with results: {'TM_Jsc': np.float64(190.1406813827856), 'TM_AVT': np.float64(0.22291954153599156)} and parameters: {'d_3': 199, 'd_6': 20, 'd_7': 49, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:53:52] optimpv.axBOtorchOptimizer: Trial 21 completed with results: {'TM_Jsc': np.float64(144.92463487986277), 'TM_AVT': np.float64(0.43795874519903916)} and parameters: {'d_3': 100, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:09] optimpv.axBOtorchOptimizer: Trial 22 with parameters: {'d_3': 53, 'd_6': 5, 'd_7': 49, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:09] optimpv.axBOtorchOptimizer: Trial 23 with parameters: {'d_3': 94, 'd_6': 5, 'd_7': 49, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:09] optimpv.axBOtorchOptimizer: Trial 24 with parameters: {'d_3': 199, 'd_6': 20, 'd_7': 199, 'd_8': 5, 'd_9': 199, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:54:09] optimpv.axBOtorchOptimizer: Trial 25 with parameters: {'d_3': 102, 'd_6': 5, 'd_7': 49, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:09] optimpv.axBOtorchOptimizer: Trial 22 completed with results: {'TM_Jsc': np.float64(117.53602547210198), 'TM_AVT': np.float64(0.45332402697241336)} and parameters: {'d_3': 53, 'd_6': 5, 'd_7': 49, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:09] optimpv.axBOtorchOptimizer: Trial 23 completed with results: {'TM_Jsc': np.float64(153.2462023497624), 'TM_AVT': np.float64(0.32558825713951295)} and parameters: {'d_3': 94, 'd_6': 5, 'd_7': 49, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:09] optimpv.axBOtorchOptimizer: Trial 24 completed with results: {'TM_Jsc': np.float64(205.9073897075368), 'TM_AVT': np.float64(0.1026497151188219)} and parameters: {'d_3': 199, 'd_6': 20, 'd_7': 199, 'd_8': 5, 'd_9': 199, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:54:09] optimpv.axBOtorchOptimizer: Trial 25 completed with results: {'TM_Jsc': np.float64(156.88732492079708), 'TM_AVT': np.float64(0.30749295507418795)} and parameters: {'d_3': 102, 'd_6': 5, 'd_7': 49, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:29] optimpv.axBOtorchOptimizer: Trial 26 with parameters: {'d_3': 82, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:29] optimpv.axBOtorchOptimizer: Trial 27 with parameters: {'d_3': 116, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:29] optimpv.axBOtorchOptimizer: Trial 28 with parameters: {'d_3': 62, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:29] optimpv.axBOtorchOptimizer: Trial 29 with parameters: {'d_3': 199, 'd_6': 20, 'd_7': 49, 'd_8': 20, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:29] optimpv.axBOtorchOptimizer: Trial 26 completed with results: {'TM_Jsc': np.float64(137.55764327691097), 'TM_AVT': np.float64(0.43627504472845857)} and parameters: {'d_3': 82, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:29] optimpv.axBOtorchOptimizer: Trial 27 completed with results: {'TM_Jsc': np.float64(154.15690970770942), 'TM_AVT': np.float64(0.3595571004653284)} and parameters: {'d_3': 116, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:29] optimpv.axBOtorchOptimizer: Trial 28 completed with results: {'TM_Jsc': np.float64(123.63029944399881), 'TM_AVT': np.float64(0.4991859076795606)} and parameters: {'d_3': 62, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:29] optimpv.axBOtorchOptimizer: Trial 29 completed with results: {'TM_Jsc': np.float64(192.00355055570387), 'TM_AVT': np.float64(0.20657577439773567)} and parameters: {'d_3': 199, 'd_6': 20, 'd_7': 49, 'd_8': 20, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:54] optimpv.axBOtorchOptimizer: Trial 30 with parameters: {'d_3': 64, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 59, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:54] optimpv.axBOtorchOptimizer: Trial 31 with parameters: {'d_3': 180, 'd_6': 20, 'd_7': 199, 'd_8': 5, 'd_9': 72, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:54] optimpv.axBOtorchOptimizer: Trial 32 with parameters: {'d_3': 118, 'd_6': 5, 'd_7': 199, 'd_8': 7, 'd_9': 78, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:54] optimpv.axBOtorchOptimizer: Trial 33 with parameters: {'d_3': 199, 'd_6': 15, 'd_7': 49, 'd_8': 20, 'd_9': 199, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:54:55] optimpv.axBOtorchOptimizer: Trial 30 completed with results: {'TM_Jsc': np.float64(124.66233082633079), 'TM_AVT': np.float64(0.5520041144001298)} and parameters: {'d_3': 64, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 59, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:55] optimpv.axBOtorchOptimizer: Trial 31 completed with results: {'TM_Jsc': np.float64(180.97455901451377), 'TM_AVT': np.float64(0.2698349495572967)} and parameters: {'d_3': 180, 'd_6': 20, 'd_7': 199, 'd_8': 5, 'd_9': 72, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:55] optimpv.axBOtorchOptimizer: Trial 32 completed with results: {'TM_Jsc': np.float64(153.31973509711193), 'TM_AVT': np.float64(0.380090203816487)} and parameters: {'d_3': 118, 'd_6': 5, 'd_7': 199, 'd_8': 7, 'd_9': 78, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:54:55] optimpv.axBOtorchOptimizer: Trial 33 completed with results: {'TM_Jsc': np.float64(207.80646879047916), 'TM_AVT': np.float64(0.08126195975595432)} and parameters: {'d_3': 199, 'd_6': 15, 'd_7': 49, 'd_8': 20, 'd_9': 199, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:55:23] optimpv.axBOtorchOptimizer: Trial 34 with parameters: {'d_3': 134, 'd_6': 20, 'd_7': 56, 'd_8': 20, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:55:23] optimpv.axBOtorchOptimizer: Trial 35 with parameters: {'d_3': 47, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:55:23] optimpv.axBOtorchOptimizer: Trial 36 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 49, 'd_8': 5, 'd_9': 199, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:55:23] optimpv.axBOtorchOptimizer: Trial 37 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:55:24] optimpv.axBOtorchOptimizer: Trial 34 completed with results: {'TM_Jsc': np.float64(163.81201654157485), 'TM_AVT': np.float64(0.29206784940599967)} and parameters: {'d_3': 134, 'd_6': 20, 'd_7': 56, 'd_8': 20, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:55:24] optimpv.axBOtorchOptimizer: Trial 35 completed with results: {'TM_Jsc': np.float64(109.17350050339138), 'TM_AVT': np.float64(0.6161167640612523)} and parameters: {'d_3': 47, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:55:24] optimpv.axBOtorchOptimizer: Trial 36 completed with results: {'TM_Jsc': np.float64(207.27602245161023), 'TM_AVT': np.float64(0.0982140669271522)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 49, 'd_8': 5, 'd_9': 199, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:55:24] optimpv.axBOtorchOptimizer: Trial 37 completed with results: {'TM_Jsc': np.float64(190.10238272247966), 'TM_AVT': np.float64(0.24404363139981394)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:55:43] optimpv.axBOtorchOptimizer: Trial 38 with parameters: {'d_3': 134, 'd_6': 20, 'd_7': 154, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:55:43] optimpv.axBOtorchOptimizer: Trial 39 with parameters: {'d_3': 83, 'd_6': 5, 'd_7': 156, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:55:43] optimpv.axBOtorchOptimizer: Trial 40 with parameters: {'d_3': 146, 'd_6': 20, 'd_7': 146, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:55:43] optimpv.axBOtorchOptimizer: Trial 41 with parameters: {'d_3': 42, 'd_6': 5, 'd_7': 159, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:55:44] optimpv.axBOtorchOptimizer: Trial 38 completed with results: {'TM_Jsc': np.float64(160.38613898243293), 'TM_AVT': np.float64(0.3643502324246979)} and parameters: {'d_3': 134, 'd_6': 20, 'd_7': 154, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:55:44] optimpv.axBOtorchOptimizer: Trial 39 completed with results: {'TM_Jsc': np.float64(142.4501395679214), 'TM_AVT': np.float64(0.4167764750734886)} and parameters: {'d_3': 83, 'd_6': 5, 'd_7': 156, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:55:44] optimpv.axBOtorchOptimizer: Trial 40 completed with results: {'TM_Jsc': np.float64(166.86900549176033), 'TM_AVT': np.float64(0.33385510971050864)} and parameters: {'d_3': 146, 'd_6': 20, 'd_7': 146, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:55:44] optimpv.axBOtorchOptimizer: Trial 41 completed with results: {'TM_Jsc': np.float64(107.9721338283197), 'TM_AVT': np.float64(0.5653046842867643)} and parameters: {'d_3': 42, 'd_6': 5, 'd_7': 159, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:56:15] optimpv.axBOtorchOptimizer: Trial 42 with parameters: {'d_3': 49, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 95, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:56:15] optimpv.axBOtorchOptimizer: Trial 43 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 192, 'd_8': 5, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:56:15] optimpv.axBOtorchOptimizer: Trial 44 with parameters: {'d_3': 189, 'd_6': 14, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:56:15] optimpv.axBOtorchOptimizer: Trial 45 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:56:16] optimpv.axBOtorchOptimizer: Trial 42 completed with results: {'TM_Jsc': np.float64(104.07533206559455), 'TM_AVT': np.float64(0.597524099124768)} and parameters: {'d_3': 49, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 95, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:56:16] optimpv.axBOtorchOptimizer: Trial 43 completed with results: {'TM_Jsc': np.float64(207.25179887674807), 'TM_AVT': np.float64(0.10098891789190183)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 192, 'd_8': 5, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:56:16] optimpv.axBOtorchOptimizer: Trial 44 completed with results: {'TM_Jsc': np.float64(185.20961442416575), 'TM_AVT': np.float64(0.26412084390480367)} and parameters: {'d_3': 189, 'd_6': 14, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:56:16] optimpv.axBOtorchOptimizer: Trial 45 completed with results: {'TM_Jsc': np.float64(191.57866337956608), 'TM_AVT': np.float64(0.24086703533809073)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:56:42] optimpv.axBOtorchOptimizer: Trial 46 with parameters: {'d_3': 82, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 90, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:56:42] optimpv.axBOtorchOptimizer: Trial 47 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:56:42] optimpv.axBOtorchOptimizer: Trial 48 with parameters: {'d_3': 45, 'd_6': 9, 'd_7': 199, 'd_8': 5, 'd_9': 80, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:56:42] optimpv.axBOtorchOptimizer: Trial 49 with parameters: {'d_3': 58, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 82, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:56:42] optimpv.axBOtorchOptimizer: Trial 46 completed with results: {'TM_Jsc': np.float64(134.35163451906223), 'TM_AVT': np.float64(0.4675067841187201)} and parameters: {'d_3': 82, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 90, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:56:42] optimpv.axBOtorchOptimizer: Trial 47 completed with results: {'TM_Jsc': np.float64(208.44326305967124), 'TM_AVT': np.float64(0.09658742130577311)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:56:42] optimpv.axBOtorchOptimizer: Trial 48 completed with results: {'TM_Jsc': np.float64(98.91128774572164), 'TM_AVT': np.float64(0.6255827186400689)} and parameters: {'d_3': 45, 'd_6': 9, 'd_7': 199, 'd_8': 5, 'd_9': 80, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:56:42] optimpv.axBOtorchOptimizer: Trial 49 completed with results: {'TM_Jsc': np.float64(117.19254997274507), 'TM_AVT': np.float64(0.5648249235238477)} and parameters: {'d_3': 58, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 82, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:11] optimpv.axBOtorchOptimizer: Trial 50 with parameters: {'d_3': 165, 'd_6': 13, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:11] optimpv.axBOtorchOptimizer: Trial 51 with parameters: {'d_3': 55, 'd_6': 19, 'd_7': 199, 'd_8': 13, 'd_9': 66, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:11] optimpv.axBOtorchOptimizer: Trial 52 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:57:11] optimpv.axBOtorchOptimizer: Trial 53 with parameters: {'d_3': 128, 'd_6': 20, 'd_7': 199, 'd_8': 20, 'd_9': 64, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:12] optimpv.axBOtorchOptimizer: Trial 50 completed with results: {'TM_Jsc': np.float64(177.36521278224416), 'TM_AVT': np.float64(0.28508866645281955)} and parameters: {'d_3': 165, 'd_6': 13, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:12] optimpv.axBOtorchOptimizer: Trial 51 completed with results: {'TM_Jsc': np.float64(100.74780281554315), 'TM_AVT': np.float64(0.5862835984581525)} and parameters: {'d_3': 55, 'd_6': 19, 'd_7': 199, 'd_8': 13, 'd_9': 66, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:12] optimpv.axBOtorchOptimizer: Trial 52 completed with results: {'TM_Jsc': np.float64(207.2808994177416), 'TM_AVT': np.float64(0.10067196541261245)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:57:12] optimpv.axBOtorchOptimizer: Trial 53 completed with results: {'TM_Jsc': np.float64(156.18577927257712), 'TM_AVT': np.float64(0.33943458398667753)} and parameters: {'d_3': 128, 'd_6': 20, 'd_7': 199, 'd_8': 20, 'd_9': 64, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:40] optimpv.axBOtorchOptimizer: Trial 54 with parameters: {'d_3': 40, 'd_6': 5, 'd_7': 199, 'd_8': 18, 'd_9': 77, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:40] optimpv.axBOtorchOptimizer: Trial 55 with parameters: {'d_3': 91, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 89, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:40] optimpv.axBOtorchOptimizer: Trial 56 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:40] optimpv.axBOtorchOptimizer: Trial 57 with parameters: {'d_3': 98, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 92, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:40] optimpv.axBOtorchOptimizer: Trial 54 completed with results: {'TM_Jsc': np.float64(94.01992084423051), 'TM_AVT': np.float64(0.6439073883826073)} and parameters: {'d_3': 40, 'd_6': 5, 'd_7': 199, 'd_8': 18, 'd_9': 77, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:40] optimpv.axBOtorchOptimizer: Trial 55 completed with results: {'TM_Jsc': np.float64(139.36571993695608), 'TM_AVT': np.float64(0.439992745588439)} and parameters: {'d_3': 91, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 89, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:40] optimpv.axBOtorchOptimizer: Trial 56 completed with results: {'TM_Jsc': np.float64(191.57866337956608), 'TM_AVT': np.float64(0.24086703533809073)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:57:40] optimpv.axBOtorchOptimizer: Trial 57 completed with results: {'TM_Jsc': np.float64(142.93015722034576), 'TM_AVT': np.float64(0.41636819906160794)} and parameters: {'d_3': 98, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 92, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:08] optimpv.axBOtorchOptimizer: Trial 58 with parameters: {'d_3': 108, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 87, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:08] optimpv.axBOtorchOptimizer: Trial 59 with parameters: {'d_3': 40, 'd_6': 8, 'd_7': 199, 'd_8': 20, 'd_9': 73, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:08] optimpv.axBOtorchOptimizer: Trial 60 with parameters: {'d_3': 43, 'd_6': 5, 'd_7': 199, 'd_8': 16, 'd_9': 74, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:08] optimpv.axBOtorchOptimizer: Trial 61 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:09] optimpv.axBOtorchOptimizer: Trial 58 completed with results: {'TM_Jsc': np.float64(146.99459798052354), 'TM_AVT': np.float64(0.3968440066353901)} and parameters: {'d_3': 108, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 87, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:09] optimpv.axBOtorchOptimizer: Trial 59 completed with results: {'TM_Jsc': np.float64(91.1793097434354), 'TM_AVT': np.float64(0.6423327057855264)} and parameters: {'d_3': 40, 'd_6': 8, 'd_7': 199, 'd_8': 20, 'd_9': 73, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:09] optimpv.axBOtorchOptimizer: Trial 60 completed with results: {'TM_Jsc': np.float64(98.9861120293427), 'TM_AVT': np.float64(0.6343827154459456)} and parameters: {'d_3': 43, 'd_6': 5, 'd_7': 199, 'd_8': 16, 'd_9': 74, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:09] optimpv.axBOtorchOptimizer: Trial 61 completed with results: {'TM_Jsc': np.float64(191.57866337956608), 'TM_AVT': np.float64(0.24086703533809073)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:40] optimpv.axBOtorchOptimizer: Trial 62 with parameters: {'d_3': 78, 'd_6': 5, 'd_7': 85, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:40] optimpv.axBOtorchOptimizer: Trial 63 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 135, 'd_8': 14, 'd_9': 122, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:58:40] optimpv.axBOtorchOptimizer: Trial 64 with parameters: {'d_3': 62, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:40] optimpv.axBOtorchOptimizer: Trial 65 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 139, 'd_8': 20, 'd_9': 85, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:40] optimpv.axBOtorchOptimizer: Trial 62 completed with results: {'TM_Jsc': np.float64(134.54529093520864), 'TM_AVT': np.float64(0.45395301969159696)} and parameters: {'d_3': 78, 'd_6': 5, 'd_7': 85, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:40] optimpv.axBOtorchOptimizer: Trial 63 completed with results: {'TM_Jsc': np.float64(206.8994000981847), 'TM_AVT': np.float64(0.09548189636918977)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 135, 'd_8': 14, 'd_9': 122, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:58:40] optimpv.axBOtorchOptimizer: Trial 64 completed with results: {'TM_Jsc': np.float64(121.63931572733166), 'TM_AVT': np.float64(0.56570457737534)} and parameters: {'d_3': 62, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:58:40] optimpv.axBOtorchOptimizer: Trial 65 completed with results: {'TM_Jsc': np.float64(190.17169754631738), 'TM_AVT': np.float64(0.2266587788327066)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 139, 'd_8': 20, 'd_9': 85, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:59:05] optimpv.axBOtorchOptimizer: Trial 66 with parameters: {'d_3': 99, 'd_6': 20, 'd_7': 116, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:59:05] optimpv.axBOtorchOptimizer: Trial 67 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 103, 'd_8': 20, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:59:05] optimpv.axBOtorchOptimizer: Trial 68 with parameters: {'d_3': 113, 'd_6': 20, 'd_7': 112, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:59:05] optimpv.axBOtorchOptimizer: Trial 69 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 49, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:59:06] optimpv.axBOtorchOptimizer: Trial 66 completed with results: {'TM_Jsc': np.float64(139.43518805735474), 'TM_AVT': np.float64(0.3981067047826454)} and parameters: {'d_3': 99, 'd_6': 20, 'd_7': 116, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:59:06] optimpv.axBOtorchOptimizer: Trial 67 completed with results: {'TM_Jsc': np.float64(210.7668508410122), 'TM_AVT': np.float64(0.06865966405610277)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 103, 'd_8': 20, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:59:06] optimpv.axBOtorchOptimizer: Trial 68 completed with results: {'TM_Jsc': np.float64(147.77976608912198), 'TM_AVT': np.float64(0.3667533715055199)} and parameters: {'d_3': 113, 'd_6': 20, 'd_7': 112, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:59:06] optimpv.axBOtorchOptimizer: Trial 69 completed with results: {'TM_Jsc': np.float64(190.38913894936948), 'TM_AVT': np.float64(0.2411277567849281)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 49, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:59:34] optimpv.axBOtorchOptimizer: Trial 70 with parameters: {'d_3': 40, 'd_6': 12, 'd_7': 199, 'd_8': 20, 'd_9': 70, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:59:34] optimpv.axBOtorchOptimizer: Trial 71 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 194, 'd_8': 5, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:59:34] optimpv.axBOtorchOptimizer: Trial 72 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 49, 'd_8': 5, 'd_9': 181, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:59:34] optimpv.axBOtorchOptimizer: Trial 73 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 49, 'd_8': 20, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:59:34] optimpv.axBOtorchOptimizer: Trial 70 completed with results: {'TM_Jsc': np.float64(87.39616656817898), 'TM_AVT': np.float64(0.6389566810606374)} and parameters: {'d_3': 40, 'd_6': 12, 'd_7': 199, 'd_8': 20, 'd_9': 70, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 10:59:34] optimpv.axBOtorchOptimizer: Trial 71 completed with results: {'TM_Jsc': np.float64(207.2600055061483), 'TM_AVT': np.float64(0.10097070657806233)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 194, 'd_8': 5, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:59:34] optimpv.axBOtorchOptimizer: Trial 72 completed with results: {'TM_Jsc': np.float64(207.2461581709891), 'TM_AVT': np.float64(0.09899326923901028)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 49, 'd_8': 5, 'd_9': 181, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 10:59:34] optimpv.axBOtorchOptimizer: Trial 73 completed with results: {'TM_Jsc': np.float64(211.14207413011866), 'TM_AVT': np.float64(0.07018149816691949)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 49, 'd_8': 20, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 11:00:05] optimpv.axBOtorchOptimizer: Trial 74 with parameters: {'d_3': 164, 'd_6': 16, 'd_7': 163, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:00:05] optimpv.axBOtorchOptimizer: Trial 75 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 11:00:05] optimpv.axBOtorchOptimizer: Trial 76 with parameters: {'d_3': 40, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 62, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:00:05] optimpv.axBOtorchOptimizer: Trial 77 with parameters: {'d_3': 40, 'd_6': 17, 'd_7': 199, 'd_8': 20, 'd_9': 70, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:00:05] optimpv.axBOtorchOptimizer: Trial 74 completed with results: {'TM_Jsc': np.float64(175.36775128567683), 'TM_AVT': np.float64(0.3019329908007998)} and parameters: {'d_3': 164, 'd_6': 16, 'd_7': 163, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:00:05] optimpv.axBOtorchOptimizer: Trial 75 completed with results: {'TM_Jsc': np.float64(207.2808994177416), 'TM_AVT': np.float64(0.10067196541261245)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 11:00:05] optimpv.axBOtorchOptimizer: Trial 76 completed with results: {'TM_Jsc': np.float64(95.59792063454546), 'TM_AVT': np.float64(0.6471637065438198)} and parameters: {'d_3': 40, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 62, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:00:05] optimpv.axBOtorchOptimizer: Trial 77 completed with results: {'TM_Jsc': np.float64(82.16656907579154), 'TM_AVT': np.float64(0.6306351137853266)} and parameters: {'d_3': 40, 'd_6': 17, 'd_7': 199, 'd_8': 20, 'd_9': 70, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:00:36] optimpv.axBOtorchOptimizer: Trial 78 with parameters: {'d_3': 199, 'd_6': 5, 'd_7': 49, 'd_8': 5, 'd_9': 153, 'nk_3': 'P3HTPCBM_BHJ'}
[INFO 08-14 11:00:36] optimpv.axBOtorchOptimizer: Trial 79 with parameters: {'d_3': 82, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 83, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:00:36] optimpv.axBOtorchOptimizer: Trial 80 with parameters: {'d_3': 40, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:00:36] optimpv.axBOtorchOptimizer: Trial 81 with parameters: {'d_3': 40, 'd_6': 20, 'd_7': 199, 'd_8': 20, 'd_9': 72, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:00:37] optimpv.axBOtorchOptimizer: Trial 78 completed with results: {'TM_Jsc': np.float64(116.7761606081823), 'TM_AVT': np.float64(0.16318945507527918)} and parameters: {'d_3': 199, 'd_6': 5, 'd_7': 49, 'd_8': 5, 'd_9': 153, 'nk_3': 'P3HTPCBM_BHJ'}
[INFO 08-14 11:00:37] optimpv.axBOtorchOptimizer: Trial 79 completed with results: {'TM_Jsc': np.float64(132.72796382241384), 'TM_AVT': np.float64(0.4771800234548467)} and parameters: {'d_3': 82, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 83, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:00:37] optimpv.axBOtorchOptimizer: Trial 80 completed with results: {'TM_Jsc': np.float64(97.37531626961953), 'TM_AVT': np.float64(0.6498768827259269)} and parameters: {'d_3': 40, 'd_6': 5, 'd_7': 199, 'd_8': 20, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:00:37] optimpv.axBOtorchOptimizer: Trial 81 completed with results: {'TM_Jsc': np.float64(78.94248299322696), 'TM_AVT': np.float64(0.6248120164589577)} and parameters: {'d_3': 40, 'd_6': 20, 'd_7': 199, 'd_8': 20, 'd_9': 72, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:07] optimpv.axBOtorchOptimizer: Trial 82 with parameters: {'d_3': 125, 'd_6': 20, 'd_7': 142, 'd_8': 5, 'd_9': 106, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:07] optimpv.axBOtorchOptimizer: Trial 83 with parameters: {'d_3': 193, 'd_6': 5, 'd_7': 49, 'd_8': 20, 'd_9': 199, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 11:01:07] optimpv.axBOtorchOptimizer: Trial 84 with parameters: {'d_3': 164, 'd_6': 5, 'd_7': 49, 'd_8': 20, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:07] optimpv.axBOtorchOptimizer: Trial 85 with parameters: {'d_3': 98, 'd_6': 20, 'd_7': 133, 'd_8': 5, 'd_9': 96, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:08] optimpv.axBOtorchOptimizer: Trial 82 completed with results: {'TM_Jsc': np.float64(153.593923809424), 'TM_AVT': np.float64(0.3901627686551984)} and parameters: {'d_3': 125, 'd_6': 20, 'd_7': 142, 'd_8': 5, 'd_9': 106, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:08] optimpv.axBOtorchOptimizer: Trial 83 completed with results: {'TM_Jsc': np.float64(207.45022514884707), 'TM_AVT': np.float64(0.08635944750929626)} and parameters: {'d_3': 193, 'd_6': 5, 'd_7': 49, 'd_8': 20, 'd_9': 199, 'nk_3': 'PM6Y6Brabec'}
[INFO 08-14 11:01:08] optimpv.axBOtorchOptimizer: Trial 84 completed with results: {'TM_Jsc': np.float64(180.98444955255027), 'TM_AVT': np.float64(0.25460466261806497)} and parameters: {'d_3': 164, 'd_6': 5, 'd_7': 49, 'd_8': 20, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:08] optimpv.axBOtorchOptimizer: Trial 85 completed with results: {'TM_Jsc': np.float64(139.20733096145716), 'TM_AVT': np.float64(0.46225875946578765)} and parameters: {'d_3': 98, 'd_6': 20, 'd_7': 133, 'd_8': 5, 'd_9': 96, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:43] optimpv.axBOtorchOptimizer: Trial 86 with parameters: {'d_3': 40, 'd_6': 5, 'd_7': 49, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:43] optimpv.axBOtorchOptimizer: Trial 87 with parameters: {'d_3': 75, 'd_6': 5, 'd_7': 49, 'd_8': 5, 'd_9': 184, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:43] optimpv.axBOtorchOptimizer: Trial 88 with parameters: {'d_3': 41, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:43] optimpv.axBOtorchOptimizer: Trial 89 with parameters: {'d_3': 176, 'd_6': 5, 'd_7': 80, 'd_8': 5, 'd_9': 166, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:43] optimpv.axBOtorchOptimizer: Trial 86 completed with results: {'TM_Jsc': np.float64(96.97755482500958), 'TM_AVT': np.float64(0.6443997854194952)} and parameters: {'d_3': 40, 'd_6': 5, 'd_7': 49, 'd_8': 5, 'd_9': 199, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:43] optimpv.axBOtorchOptimizer: Trial 87 completed with results: {'TM_Jsc': np.float64(134.1533873869834), 'TM_AVT': np.float64(0.4995035989631592)} and parameters: {'d_3': 75, 'd_6': 5, 'd_7': 49, 'd_8': 5, 'd_9': 184, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:43] optimpv.axBOtorchOptimizer: Trial 88 completed with results: {'TM_Jsc': np.float64(101.11382183022452), 'TM_AVT': np.float64(0.6418398801015027)} and parameters: {'d_3': 41, 'd_6': 5, 'd_7': 199, 'd_8': 5, 'd_9': 49, 'nk_3': 'PCE10_FOIC_1to1'}
[INFO 08-14 11:01:43] optimpv.axBOtorchOptimizer: Trial 89 completed with results: {'TM_Jsc': np.float64(183.1378715924572), 'TM_AVT': np.float64(0.2714266151083576)} and parameters: {'d_3': 176, 'd_6': 5, 'd_7': 80, 'd_8': 5, 'd_9': 166, 'nk_3': 'PCE10_FOIC_1to1'}
[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
TMAgent.params = optimizer.params # update the params list in the agent with the best parameters
# print the best parameters
print('Best parameters:')
for p in optimizer.params:
print(p.name, 'fitted value:', p.value)
Best parameters:
d_3 fitted value: 1.0000000000000001e-07
d_6 fitted value: 5e-09
d_7 fitted value: 1.9900000000000002e-07
d_8 fitted value: 2e-08
d_9 fitted value: 4.9e-08
nk_3 fitted value: PCE10_FOIC_1to1
[8]:
# Plot optimization results
data = ax_client.summarize()
all_metrics = optimizer.all_metrics
all_metrics = optimizer.all_metrics
plt.figure()
for i, metric in enumerate(all_metrics):
if optimizer.all_minimize[i]:
plt.plot(np.minimum.accumulate(data[metric]), label=metric)
else:
plt.plot(np.maximum.accumulate(data[metric]), label=metric)
plt.yscale("log")
plt.xlabel("Iteration")
plt.ylabel("Target")
plt.legend()
plt.title("Best value seen so far")
plt.show()

[9]:
# 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 *
fig_dens, ax_dens = plot_density_exploration(params, optimizer = optimizer, optimizer_type = 'ax')
Error in kdeplot: The y variable is categorical, but one of ['numeric', 'datetime'] is required
Error in kdeplot: The y variable is categorical, but one of ['numeric', 'datetime'] is required
Error in kdeplot: The y variable is categorical, but one of ['numeric', 'datetime'] is required
Error in kdeplot: The y variable is categorical, but one of ['numeric', 'datetime'] is required
Error in kdeplot: The y variable is categorical, but one of ['numeric', 'datetime'] is required

[10]:
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)
cm = matplotlib.colormaps.get_cmap('viridis')
df = get_df_from_ax(params, optimizer)
# create pareto df
dum_dic = {}
for eto in pareto:
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()
