ILS Driver

The ILS Driver performs the Iterated Local Search algorithm, introducing a large conformational change in between local optimization runs.

ProtoSyn.Drivers.ILSType
ILS(eval!::Union{Function, EnergyFunction}, jump!::Union{Function, AbstractMutator, Driver}, inner_driver!::Driver, callback::Opt{Callback}, max_steps::Int, temperature::Function)

An ILS Driver instance. As such, this object is callable as a functor with the following signature:

(driver::ILS)(pose::Pose)

This simulation performs an Iterated Local Search algorithm. In this type of simulation, an inner_driver! takes the system from a state to another, possibly optimizing the structure into a local minimum. As an example, this can be a MonteCarlo or a SteepestDescent Driver. The resulting structure is evaluated (according to an eval! EnergyFunction instance or custom function) and accepted or rejected according to the Metropolis Criterion, based on the current temperature of the simulation (see MonteCarlo for more information regarding the Metropolis Criterion). In either case, the accepted structure or the recovered previous state structure is subjected to a jump!, that is, a large conformational change, taking the system to a new conformational space. This simulation loop runs for max_steps iteration. Each step, a call to an optional Callback callback is performed. A companion ILSState DriverState instance is also updated each step and provided to the Callback callback.

Fields

  • eval!::Union{Function, EnergyFunction} - The evaluator EnergyFunction or custom function, receives a Pose pose as the single argument;
  • jump!::Union{Function, AbstractMutator, Driver} - The jump method, receives a Pose pose as the single input argument, should introduce a relative high change in the conformation;
  • inner_driver!::Driver - The inner loop Driver;
  • callback::Opt{Callback} - An optional Callback instance for the outer loop, receives two input arguments: the current Pose pose and the current DriverState driver_state;
  • max_steps::Int - The total number of simulation steps to be performed in the outer loop;
  • temperature::Function - The temperature function thermostat for the outer loop (see Available thermostats), receives the current step (as an Int) as the single input argument.

See also

ILSState

Examples

julia> ils = ProtoSyn.Drivers.ILS(energy_function, dihedral_mutator, monte_carlo, cb, 1000, ProtoSyn.Drivers.get_linear_quench(1.0, 1000))
⚒  ILS Driver:
 ├──  ●  Evaluator:
 |    └── 🗲  Energy Function (4 components):
 |        +----------------------------------------------------------------------+
 |        | Index | Component name                                | Weight (α)   |
 |        +----------------------------------------------------------------------+
 |        | 1     | TorchANI_ML_Model                             |      1.000   |
 |        | 2     | Caterpillar_Solvation                         |      0.010   |
 |        | 3     | Bond_Distance_Restraint                       |      1.000   |
 |        | 4     | Cα-Cα_Clash_Restraint                         |    100.000   |
 |        +----------------------------------------------------------------------+
 |   
 ├──  ● Jump:
 |    └── ⚯  Dihedral Mutator:
 |        +----------------------------------------------------------------------+
 |        | Index | Field                       | Value                          |
 |        +----------------------------------------------------------------------+
 |        | 1     | angle_sampler               | Function randn                 |
 |        | 2     | p_mut                       | 0.0100                         |
 |        | 3     | step_size                   | 0.5000                         |
 |        +----------------------------------------------------------------------+
 |         ● Selection: Set
 |         └── FieldSelection › Atom.name = r"C|N"
 |   
 ├──  ● Inner Driver:
 |    └── ⚒  Monte Carlo Driver:
 |         ├──  ●  Evaluator:
 |         |    └── 🗲  Energy Function (4 components):
 |         |        +----------------------------------------------------------------------+
 |         |        | Index | Component name                                | Weight (α)   |
 |         |        +----------------------------------------------------------------------+
 |         |        | 1     | TorchANI_ML_Model                             |      1.000   |
 |         |        | 2     | Caterpillar_Solvation                         |      0.010   |
 |         |        | 3     | Bond_Distance_Restraint                       |      1.000   |
 |         |        | 4     | Cα-Cα_Clash_Restraint                         |    100.000   |
 |         |        +----------------------------------------------------------------------+
 |         |   
 |         ├──  ● Sampler:
 |         |    └── ⚯  Dihedral Mutator:
 |         |        +----------------------------------------------------------------------+
 |         |        | Index | Field                       | Value                          |
 |         |        +----------------------------------------------------------------------+
 |         |        | 1     | angle_sampler               | Function randn                 |
 |         |        | 2     | p_mut                       | 0.0100                         |
 |         |        | 3     | step_size                   | 0.5000                         |
 |         |        +----------------------------------------------------------------------+
 |         |         ● Selection: Set
 |         |         └── FieldSelection › Atom.name = r"C|N"
 |         |   
 |         ├──  ○  Callback: Not set
 |         |   
 |         └──  ● Settings:
 |               Max steps: 10
 |             Temperature: linear_quench
 |   
 ├──  ● Callback:
 |    └── ✉  Callback:
 |        +----------------------------------------------------------------------+
 |        | Index | Field                     | Value                            |
 |        +----------------------------------------------------------------------+
 |        | 1     | Event                     | energy_step_frame                |
 |        | 2     | Frequency                 | 10                               |
 |        +----------------------------------------------------------------------+
 |   
 └──  ● Settings:
       Max steps: 1000
     Temperature: linear_quench
source
ProtoSyn.Drivers.ILSStateType
ILSState{T <: AbstractFloat}(step::Int = 0, converged::Bool = false, completed::Bool = false, stalled::Bool = false, acceptance_count = 0, temperature::T = T(0.0))
ILSState{T <: AbstractFloat}()

A ILSState instance is a DriverState that keeps track of a ILS simulation status. Besides the default :step, :converged, :completed and :stalled fields, a ILSState instance adds the following tracking fields specific for ILS simulations:

  • acceptance_count::Int - The number of accepted Pose changes by the Metropolis criterion;
  • temperature::T - The current temperature of the simulation.

See also

ILS

Examples

julia> ProtoSyn.Drivers.ILSState{Float64}()
ProtoSyn.Drivers.ILSState{Float64}(0, false, false, false, 0, 0.0)
source

ProtoSyn ils-driver

Figure 1 | A schematic overview of the different stages in a ILS Driver: (1) - A jump! introduces a relative large conformational change into the system's structure, taking the Pose into a new conformational space; (2) - An inner_driver! optimizes the new structure, finding new local minima.