09_miscanthus_optimal¶
Miscanthus - Optimal Simulation Configuration Simulation miscanthus_weights i_77
Install the package from pip (skip this step if the package is already installed)
[ ]:
! pip install ligning
Import Code for Lignin Optimization
[1]:
# set ligning path (optional if installed via pip)
import sys, os
project_path = os.path.abspath(os.path.join(os.getcwd(), '..\..\..'))
sys.path.insert(0, project_path)
import ligning.optimization as opt
import ligning.characterization as ch
import ligning.utils as ut
Set the destination of simulation outputs. ResultsName sets the first level of storage, library_name specifies the folder within ‘demo_results’ and the trial_index is optional, specifying the test number. This allows data from multiple simulations to be stored, rather than overwriting past results, if no trial_index is given
[2]:
ResultsName='demo_results'
library_name = 'miscanthus_weights'
trial_index = 0
Set distribution of linkages This sets the expected frequency of each type of linkage between monomers. Setting to 0 will disable that linkage for the simulation. [‘4-O-5’, ‘alpha-O-4’, ‘beta-O-4’, ‘5-5’, ‘beta-5’, ‘beta-beta’, ‘beta-1’]
[3]:
linkage_distribution_input = [0, 0, 68, 0, 15, 17, 0]
Set monomer distributions This sets the expected frequency of each type of monomers. Setting to 0 will disable that monomer for the simulation. [‘H’, ‘G’, ‘S’]
[4]:
monomer_distribution_input = [4, 46, 50]
Setting for additional metrics in simulation output Verbose reports monomer additions to polymers. Additional_metrics reports population data such as branching coefficient in the simulation output.
[5]:
verbose = False
additional_metrics = 0.0
Set branching propensity of polymers Likelihood of a monomer linking to 3 or more neighboring monomers.
[6]:
branching_propensity = 0.0
Set population metrics Determines the target monomer size for the simulation. [‘number average molecular weight’, ‘weight average molecular weight’]
[7]:
population_metrics = [1240, 2310]
Additional setting for expectations the size of the polymer population, including the expected average size, maximum polymer size, and distribution of sizes of polymers.
[8]:
expected_size = 1240
max_size = 10000
# size distribution scaling factor
distribution_scaling = 0.1
# size in MW
size_in_MW = True
Metropolis Temperatures The temperature for the Metropolis Monte Carlo in monomer addition (Tmetro) and polymer addition (Tmetro_out).
[9]:
Tmetro = 5
Tmetro_out = 5
Simulation settings Maximum iterations for monomer addition to each polymer, polymer addition to the population, and ring addition to the population. N_population is the number of polymers in the population. Seed_init sets the random seed for the simulation.
[10]:
i_max = 1000
i_max_out = 1000
i_max_ring = 500
n_population = 100
seed_init = 1
(Optional) Set metric weights 13 metrics are available The first seven are linkage distributions: ‘4-O-5’, ‘alpha-O-4’, ‘beta-O-4’, ‘5-5’, ‘beta-5’, ‘beta-beta’, ‘beta-1’ The next three are monomer distributions: ‘H’, ‘G’, ‘S’ Then the branching coefficient The final two are optional, representing ‘number average molecular weight’ and ‘weight average molecular weight’
[11]:
metrics_weights = [1, 1, 1, 1, 10, 10, 1, 1, 1, 1, 1, 10, 10]
Create and run the simulation
[12]:
sim = opt.Simulation(linkage_distribution_input=linkage_distribution_input,
monomer_distribution_input=monomer_distribution_input,
expected_size=expected_size,
max_size=max_size,
distribution_scaling=distribution_scaling,
Tmetro=Tmetro,
Tmetro_out=Tmetro_out,
seed_init=seed_init,
ResultsName=ResultsName,
library_name=library_name,
trial_index=trial_index,
n_population=n_population,
i_max=i_max,
i_max_out=i_max_out,
i_max_ring=i_max_ring,
additional_metrics=additional_metrics,
population_metrics=population_metrics,
size_in_MW=size_in_MW,
metrics_weights=metrics_weights,
branching_propensity=branching_propensity,
show_plots=False)
sim.run()
Starting a new trial, No.0:
C:\Users\jake_\Documents\GitHub\LigninGraphs\ligning\polymer.py:662: UserWarning: Input linkage type is not supported
warnings.warn("Input linkage type is not supported")
n_polymer 0 added on iteration no 0
n_polymer 1 added on iteration no 1
Polymer addition rejected
n_polymer 2 added on iteration no 3
n_polymer 3 added on iteration no 4
n_polymer 4 added on iteration no 5
n_polymer 5 added on iteration no 6
n_polymer 6 added on iteration no 7
n_polymer 7 added on iteration no 8
Polymer addition rejected
n_polymer 8 added on iteration no 10
n_polymer 9 added on iteration no 11
n_polymer 10 added on iteration no 12
n_polymer 11 added on iteration no 13
n_polymer 12 added on iteration no 14
n_polymer 13 added on iteration no 15
n_polymer 14 added on iteration no 16
n_polymer 15 added on iteration no 17
n_polymer 16 added on iteration no 18
n_polymer 17 added on iteration no 19
n_polymer 18 added on iteration no 20
n_polymer 19 added on iteration no 21
n_polymer 20 added on iteration no 22
n_polymer 21 added on iteration no 23
n_polymer 22 added on iteration no 24
Polymer addition rejected
n_polymer 23 added on iteration no 26
n_polymer 24 added on iteration no 27
n_polymer 25 added on iteration no 28
n_polymer 26 added on iteration no 29
n_polymer 27 added on iteration no 30
Polymer addition rejected
n_polymer 28 added on iteration no 32
n_polymer 29 added on iteration no 33
n_polymer 30 added on iteration no 34
n_polymer 31 added on iteration no 35
n_polymer 32 added on iteration no 36
n_polymer 33 added on iteration no 37
n_polymer 34 added on iteration no 38
n_polymer 35 added on iteration no 39
n_polymer 36 added on iteration no 40
Polymer addition rejected
n_polymer 37 added on iteration no 42
n_polymer 38 added on iteration no 43
n_polymer 39 added on iteration no 44
Polymer addition rejected
n_polymer 40 added on iteration no 46
n_polymer 41 added on iteration no 47
n_polymer 42 added on iteration no 48
n_polymer 43 added on iteration no 49
n_polymer 44 added on iteration no 50
n_polymer 45 added on iteration no 51
n_polymer 46 added on iteration no 52
Polymer addition rejected
n_polymer 47 added on iteration no 54
n_polymer 48 added on iteration no 55
n_polymer 49 added on iteration no 56
n_polymer 50 added on iteration no 57
n_polymer 51 added on iteration no 58
Polymer addition rejected
n_polymer 52 added on iteration no 60
Polymer addition rejected
n_polymer 53 added on iteration no 62
Polymer addition rejected
Polymer addition rejected
Polymer addition rejected
n_polymer 54 added on iteration no 66
n_polymer 55 added on iteration no 67
n_polymer 56 added on iteration no 68
n_polymer 57 added on iteration no 69
n_polymer 58 added on iteration no 70
n_polymer 59 added on iteration no 71
n_polymer 60 added on iteration no 72
n_polymer 61 added on iteration no 73
n_polymer 62 added on iteration no 74
n_polymer 63 added on iteration no 75
n_polymer 64 added on iteration no 76
n_polymer 65 added on iteration no 77
n_polymer 66 added on iteration no 78
n_polymer 67 added on iteration no 79
n_polymer 68 added on iteration no 80
n_polymer 69 added on iteration no 81
n_polymer 70 added on iteration no 82
n_polymer 71 added on iteration no 83
n_polymer 72 added on iteration no 84
n_polymer 73 added on iteration no 85
n_polymer 74 added on iteration no 86
n_polymer 75 added on iteration no 87
n_polymer 76 added on iteration no 88
n_polymer 77 added on iteration no 89
n_polymer 78 added on iteration no 90
n_polymer 79 added on iteration no 91
n_polymer 80 added on iteration no 92
n_polymer 81 added on iteration no 93
n_polymer 82 added on iteration no 94
n_polymer 83 added on iteration no 95
n_polymer 84 added on iteration no 96
n_polymer 85 added on iteration no 97
n_polymer 86 added on iteration no 98
n_polymer 87 added on iteration no 99
n_polymer 88 added on iteration no 100
n_polymer 89 added on iteration no 101
n_polymer 90 added on iteration no 102
n_polymer 91 added on iteration no 103
n_polymer 92 added on iteration no 104
n_polymer 93 added on iteration no 105
n_polymer 94 added on iteration no 106
n_polymer 95 added on iteration no 107
n_polymer 96 added on iteration no 108
n_polymer 97 added on iteration no 109
n_polymer 98 added on iteration no 110
n_polymer 99 added on iteration no 111
n_polymer 100 added on iteration no 112
Runtime for creating all polymers : 19.08 minutes
Target values:
{ '4-O-5': 0.0,
'5-5': 0.0,
'G': 0.46,
'H': 0.04,
'MW': 1240.0,
'MW_weighted': 2310.0,
'S': 0.5,
'alpha-O-4': 0.0,
'beta-1': 0.0,
'beta-5': 0.15,
'beta-O-4': 0.68,
'beta-beta': 0.17,
'branching_coeff': 0.0}
Optimal simulated values:
{ '4-O-5': 0.0,
'5-5': 0.0,
'G': 0.47530864197530864,
'H': 0.040123456790123455,
'MW': 1238.9980990099011,
'MW_weighted': 1328.6685244774267,
'S': 0.4845679012345679,
'alpha-O-4': 0.0,
'beta-1': 0.0,
'beta-5': 0.12248628884826325,
'beta-O-4': 0.7458866544789763,
'beta-beta': 0.1316270566727605,
'branching_coeff': 0.0,
'monomer_count': 6.415841584158416}
Acceptance Rates
Monomer Acceptance: 0.01020652141426821
Polymer Acceptance: 0.9017857142857143
Runtime for analyzing the results : 0.03 minutes
C:\Users\jake_\Documents\GitHub\LigninGraphs\ligning\characterization.py:616: FutureWarning: Dropping of nuisance columns in DataFrame reductions (with 'numeric_only=None') is deprecated; in a future version this will raise TypeError. Select only valid columns before calling the reduction.
numerical_metrics = list(population_data.mean().index)
C:\Users\jake_\Documents\GitHub\LigninGraphs\ligning\characterization.py:617: FutureWarning: Dropping of nuisance columns in DataFrame reductions (with 'numeric_only=None') is deprecated; in a future version this will raise TypeError. Select only valid columns before calling the reduction.
population_mean = np.array([population_data.mean()])
C:\Users\jake_\Documents\GitHub\LigninGraphs\ligning\characterization.py:618: FutureWarning: Dropping of nuisance columns in DataFrame reductions (with 'numeric_only=None') is deprecated; in a future version this will raise TypeError. Select only valid columns before calling the reduction.
population_std = np.array([population_data.std()])
Process Population
[14]:
P_population = sim.P_population
population = ch.Population(P_population, name=library_name, ResultsName=ResultsName, TrialIndex=str(trial_index))
population.analyze()
[ ]: