View Javadoc
1   // ******************************************************************************
2   //
3   // Title:       Force Field X.
4   // Description: Force Field X - Software for Molecular Biophysics.
5   // Copyright:   Copyright (c) Michael J. Schnieders 2001-2024.
6   //
7   // This file is part of Force Field X.
8   //
9   // Force Field X is free software; you can redistribute it and/or modify it
10  // under the terms of the GNU General Public License version 3 as published by
11  // the Free Software Foundation.
12  //
13  // Force Field X is distributed in the hope that it will be useful, but WITHOUT
14  // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
16  // details.
17  //
18  // You should have received a copy of the GNU General Public License along with
19  // Force Field X; if not, write to the Free Software Foundation, Inc., 59 Temple
20  // Place, Suite 330, Boston, MA 02111-1307 USA
21  //
22  // Linking this library statically or dynamically with other modules is making a
23  // combined work based on this library. Thus, the terms and conditions of the
24  // GNU General Public License cover the whole combination.
25  //
26  // As a special exception, the copyright holders of this library give you
27  // permission to link this library with independent modules to produce an
28  // executable, regardless of the license terms of these independent modules, and
29  // to copy and distribute the resulting executable under terms of your choice,
30  // provided that you also meet, for each linked independent module, the terms
31  // and conditions of the license of that module. An independent module is a
32  // module which is not derived from or based on this library. If you modify this
33  // library, you may extend this exception to your version of the library, but
34  // you are not obligated to do so. If you do not wish to do so, delete this
35  // exception statement from your version.
36  //
37  // ******************************************************************************
38  package ffx.algorithms.optimize.anneal;
39  
40  /**
41   * Temperature schedule for simulated annealing
42   *
43   * @author Jacob M. Litman
44   * @author Michael J. Schnieders
45   * @since 1.0
46   */
47  public interface AnnealingSchedule {
48  
49    /**
50     * Gets the starting temperature.
51     *
52     * @return Starting temperature in Kelvin.
53     */
54    double getHighTemp();
55  
56    /**
57     * Gets the final temperature.
58     *
59     * @return Final temperature in Kelvin.
60     */
61    double getLowTemp();
62  
63    /**
64     * Gets the number of annealing windows (including repeat windows).
65     *
66     * @return Number of annealing windows.
67     */
68    int getNumWindows();
69  
70    /**
71     * Get the temperature for annealing step i.
72     *
73     * @param i An annealing step [0-nWindows)
74     * @return Associated temperature.
75     */
76    double getTemperature(int i);
77  
78    /**
79     * Get all temperatures this schedule specifies.
80     *
81     * @return An array of temperatures specified.
82     */
83    double[] getTemperatures();
84  
85    /**
86     * Returns the longest window to be used (normalized to the number of MD steps in a "regular"
87     * window).
88     *
89     * @return Maximum normalized window length.
90     */
91    double maxWindowLength();
92  
93    /**
94     * Returns the shortest window to be used (normalized to the number of MD steps in a "regular"
95     * window).
96     *
97     * @return Minimum normalized window length.
98     */
99    double minWindowLength();
100 
101   /**
102    * Returns the sum of window lengths to be used (normalized to the number of MD steps in a
103    * "regular" window).
104    *
105    * @return Total normalized window length.
106    */
107   double totalWindowLength();
108 
109   /**
110    * Get the relative size of a window (normalized to the number of MD steps in a "regular" window).
111    *
112    * @param window Window to check.
113    * @return Normalized length of the window.
114    */
115   double windowLength(int window);
116 }