09_miscanthus_optimal

Miscanthus - Optimal Simulation Configuration Open In Colab 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()
[ ]: