$darkmode
DENOPTIM
RunTimeParameters.java
Go to the documentation of this file.
1/*
2 * DENOPTIM
3 * Copyright (C) 2019 Marco Foscato <marco.foscato@uib.no>
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as published
7 * by the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19package denoptim.programs;
20
21import java.io.BufferedReader;
22import java.io.FileReader;
23import java.io.IOException;
24import java.lang.reflect.Constructor;
25import java.util.HashMap;
26import java.util.Map;
27import java.util.logging.ConsoleHandler;
28import java.util.logging.FileHandler;
29import java.util.logging.Level;
30import java.util.logging.Logger;
31import java.util.logging.SimpleFormatter;
32import java.util.logging.StreamHandler;
33
34import denoptim.exception.DENOPTIMException;
35import denoptim.files.FileUtils;
36import denoptim.fitness.FitnessParameters;
37import denoptim.fragspace.FragmentSpaceParameters;
38import denoptim.graph.rings.RingClosureParameters;
39import denoptim.main.Main.RunType;
40import denoptim.programs.combinatorial.CEBLParameters;
41import denoptim.programs.denovo.GAParameters;
42import denoptim.programs.fitnessevaluator.FRParameters;
43import denoptim.programs.fragmenter.FragmenterParameters;
44import denoptim.programs.genetweeker.GeneOpsRunnerParameters;
45import denoptim.programs.grapheditor.GraphEdParameters;
46import denoptim.programs.graphlisthandler.GraphListsHandlerParameters;
47import denoptim.programs.isomorphism.IsomorphismParameters;
48import denoptim.programs.mol2graph.Mol2GraphParameters;
49import denoptim.programs.moldecularmodelbuilder.MMBuilderParameters;
50import denoptim.utils.Randomizer;
51
52
68public abstract class RunTimeParameters
69{
77 protected boolean isMaster = true;
78
82 protected String workDir = System.getProperty("user.dir");
83
87 protected String logFile = "unset";
88
96 private Logger logger = Logger.getLogger("DummyLogger");
97
101 private Randomizer rng = null;
102
108 protected int verbosity = 0;
109
113 protected Map<ParametersType, RunTimeParameters> otherParameters =
114 new HashMap<ParametersType, RunTimeParameters>();
115
119 private ParametersType paramType = null;
120
124 public static enum ParametersType {
129
134
139
144
150
156
161
166
171
176
181
186
191
196 private String keywordRoot;
197
201 private Class<?> implementation;
202
203 static {
204 CEBL_PARAMS.keywordRoot = "FSE-";
205 GA_PARAMS.keywordRoot = "GA-";
206 FS_PARAMS.keywordRoot = "FS-";
207 FRG_PARAMS.keywordRoot = "FRG-";
208 RC_PARAMS.keywordRoot = "RC-";
209 FIT_PARAMS.keywordRoot = "FP-";
210 FR_PARAMS.keywordRoot = "FR-";
211 MMB_PARAM.keywordRoot = "3DB-";
212 GO_PARAMS.keywordRoot = "TESTGENOPS-";
213 GE_PARAMS.keywordRoot = "GRAPHEDIT-";
214 GLH_PARAMS.keywordRoot = "GRAPHLISTS-";
215 ISO_PARAMS.keywordRoot = "ISOMORPHISM-";
216 M2G_PARAMS.keywordRoot = "M2G-";
217
218 CEBL_PARAMS.implementation = CEBLParameters.class;
219 GA_PARAMS.implementation = GAParameters.class;
220 FS_PARAMS.implementation = FragmentSpaceParameters.class;
221 FRG_PARAMS.implementation = FragmenterParameters.class;
222 RC_PARAMS.implementation = RingClosureParameters.class;
223 FIT_PARAMS.implementation = FitnessParameters.class;
224 FR_PARAMS.implementation = FRParameters.class;
225 MMB_PARAM.implementation = MMBuilderParameters.class;
226 GO_PARAMS.implementation = GeneOpsRunnerParameters.class;
227 GE_PARAMS.implementation = GraphEdParameters.class;
228 GLH_PARAMS.implementation = GraphListsHandlerParameters.class;
229 ISO_PARAMS.implementation = IsomorphismParameters.class;
230 M2G_PARAMS.implementation = Mol2GraphParameters.class;
231 }
232
236 public Class<?> getImplementation()
237 {
238 return implementation;
239 }
240
245 public String getKeywordRoot()
246 {
247 return keywordRoot;
248 }
249 }
250
251 /*
252 * TODO: if we want a general Parameter class it will have to define
253 * - unique name of the parameter
254 * - java type used to collect the value
255 * - default value
256 * - description of what the parameter is or what it controls
257 * - code for parsing the value from input files
258 * - code for checking
259 * - core for processing the parameter
260 * - what else?
261 *
262 * Challenge: what about parameters that depend on other parameters?
263 * Need to control order of processing the parameters, in some occasions.
264 */
265
266
270 public final String NL = System.getProperty("line.separator");
271
272//-----------------------------------------------------------------------------
273
279 {
280 this.paramType = paramType;
281
282 /*
283 * This is the default logger "DummyLogger". It should be overwritten
284 * by a call to startProgramSpecificLogger
285 */
286 this.logger.setLevel(Level.SEVERE);
287 }
288
289//-----------------------------------------------------------------------------
290
295 public String paramTypeName()
296 {
297 return paramType.toString();
298 }
299
300//-----------------------------------------------------------------------------
301
306 public String getWorkDirectory()
307 {
308 return workDir;
309 }
310
311//-----------------------------------------------------------------------------
312
317 public void setWorkDirectory(String pathname)
318 {
319 this.workDir = pathname;
320 }
321
322//-----------------------------------------------------------------------------
323
328 public String getLogFilePathname()
329 {
330 return logFile;
331 }
332
333//-----------------------------------------------------------------------------
334
339 public void setLogFilePathname(String pathname)
340 {
341 this.workDir = pathname;
342 }
343
344//-----------------------------------------------------------------------------
345
349 public Logger getLogger()
350 {
351 return logger;
352 }
353
354//-----------------------------------------------------------------------------
355
362 private void setLogger(Logger logger)
363 {
364 this.logger = logger;
365 for (RunTimeParameters innerParams : otherParameters.values())
366 {
367 innerParams.setLogger(logger);
368 }
369 }
370
371//-----------------------------------------------------------------------------
372
386 public Logger startProgramSpecificLogger(String loggerIdentifier)
387 throws SecurityException, IOException
388 {
389 return startProgramSpecificLogger(loggerIdentifier, true);
390 }
391
392//-----------------------------------------------------------------------------
393
408 public Logger startProgramSpecificLogger(String loggerIdentifier,
409 boolean toLogFile)
410 throws SecurityException, IOException
411 {
412 logger = Logger.getLogger(loggerIdentifier);
413
414 int n = logger.getHandlers().length;
415 for (int i=0; i<n; i++)
416 {
417 logger.removeHandler(logger.getHandlers()[0]);
418 }
419
420 if (toLogFile)
421 {
422 FileHandler fileHdlr = new FileHandler(logFile);
423 SimpleFormatter formatterTxt = new SimpleFormatter();
424 fileHdlr.setFormatter(formatterTxt);
425 logger.setUseParentHandlers(false);
426 logger.addHandler(fileHdlr);
427 logger.setLevel(Level.INFO);
428 String header = "Started logging for " + loggerIdentifier;
429 logger.log(Level.INFO,header);
430 } else {
431 logger.addHandler(new StreamHandler(System.out,
432 new SimpleFormatter()));
433 }
434
435 if (verbosity!=0)
436 {
437 logger.setLevel(verbosityTologLevel());
438 for (int iH=0; iH<logger.getHandlers().length; iH++)
439 {
440 logger.getHandlers()[iH].setLevel(verbosityTologLevel());
441 }
442 }
443
444 for (RunTimeParameters innerParams : otherParameters.values())
445 {
446 innerParams.setLogger(logger);
447 }
448
449 return logger;
450 }
451
452//-----------------------------------------------------------------------------
453
459 public Logger startConsoleLogger(String loggerIdentifier)
460 {
461 logger = Logger.getLogger(loggerIdentifier);
462
463 int n = logger.getHandlers().length;
464 for (int i=0; i<n; i++)
465 {
466 logger.removeHandler(logger.getHandlers()[0]);
467 }
468 ConsoleHandler handler = new ConsoleHandler();
469 handler.setFormatter(new SimpleFormatter());
470 handler.setLevel(Level.INFO);
471 logger.addHandler(handler);
472
473 if (verbosity!=0)
474 {
475 logger.setLevel(verbosityTologLevel());
476 for (int iH=0; iH<logger.getHandlers().length; iH++)
477 {
478 logger.getHandlers()[iH].setLevel(verbosityTologLevel());
479 }
480 }
481
482 for (RunTimeParameters innerParams : otherParameters.values())
483 {
484 innerParams.setLogger(logger);
485 }
486
487 return logger;
488 }
489
490//-----------------------------------------------------------------------------
491
499 public static boolean readYesNoTrueFalse(String s)
500 {
501 boolean result = false;
502 String value = s.trim().toUpperCase();
503 if (value.equals("YES")
504 || value.equals("Y")
505 || value.equals("T")
506 || value.equals("TRUE"))
507 {
508 result = true;
509 } else if (value.equals("NO")
510 || value.equals("N")
511 || value.equals("F")
512 || value.equals("FALSE"))
513 {
514 result = false;
515 }
516 return result;
517 }
518
519//-----------------------------------------------------------------------------
520
521 private Level verbosityTologLevel()
522 {
523 int rebased = verbosity+3;
524 switch (rebased)
525 {
526 case 0:
527 return Level.OFF;
528 case 1:
529 return Level.SEVERE;
530 case 2:
531 return Level.WARNING;
532 case 3:
533 return Level.INFO;
534 case 4:
535 return Level.FINE;
536 case 5:
537 return Level.FINER;
538 case 6:
539 return Level.FINEST;
540 default:
541 // NB: Level.ALL does not actually allow all log. Don't use it.
542 if (rebased>6)
543 return Level.FINEST;
544 else
545 return Level.OFF;
546 }
547 }
548
549//-----------------------------------------------------------------------------
550
556 public int getVerbosity()
557 {
558 return verbosity;
559 }
560
561//------------------------------------------------------------------------------
562
571 public void setVerbosity(int l)
572 {
573 this.verbosity = l;
574 if (logger!=null)
575 {
576 logger.setLevel(verbosityTologLevel());
577 for (int iH=0; iH<logger.getHandlers().length; iH++)
578 {
579 logger.getHandlers()[iH].setLevel(verbosityTologLevel());
580 }
581 }
582
583 for (RunTimeParameters innerParams : otherParameters.values())
584 {
585 innerParams.setVerbosity(l);
586 }
587 }
588
589//-----------------------------------------------------------------------------
590
599 {
600 if (rng==null)
601 {
602 for (RunTimeParameters innerParams : otherParameters.values())
603 {
604 if (innerParams.rng!=null)
605 {
606 rng = innerParams.rng;
607 return innerParams.rng;
608 }
609 }
610
611 rng = new Randomizer();
612 for (RunTimeParameters innerParams : otherParameters.values())
613 {
614 innerParams.setRandomizer(rng);
615 }
616 }
617 return rng;
618 }
619
620//-----------------------------------------------------------------------------
621
626 public long getRandomSeed()
627 {
628 return rng.getSeed();
629 }
630
631//-----------------------------------------------------------------------------
632
639 {
640 this.rng = rng;
641 for (RunTimeParameters innerParams : otherParameters.values())
642 {
643 innerParams.setRandomizer(rng);
644 }
645 }
646
647//-----------------------------------------------------------------------------
648
655 {
656 rng = new Randomizer();
657 for (RunTimeParameters innerParams : otherParameters.values())
658 {
659 innerParams.setRandomizer(rng);
660 }
661 return rng;
662 }
663
664//-----------------------------------------------------------------------------
665
671 public Randomizer startRandomizer(long seed)
672 {
673 rng = new Randomizer(seed);
674 for (RunTimeParameters innerParams : otherParameters.values())
675 {
676 innerParams.setRandomizer(rng);
677 }
678 return rng;
679 }
680
681//-----------------------------------------------------------------------------
682
688 public void readParameterFile(String infile) throws DENOPTIMException
689 {
690 String line;
691 BufferedReader br = null;
692 try
693 {
694 br = new BufferedReader(new FileReader(infile));
695 while ((line = br.readLine()) != null)
696 {
697 readParameterLine(line);
698 }
699 }
700 catch (NumberFormatException | IOException nfe)
701 {
702 throw new DENOPTIMException(nfe);
703 }
704 finally
705 {
706 try
707 {
708 if (br != null)
709 {
710 br.close();
711 br = null;
712 }
713 }
714 catch (IOException ioe)
715 {
716 throw new DENOPTIMException(ioe);
717 }
718 }
719 }
720
721//-----------------------------------------------------------------------------
722
728 public void readParameterLine(String line) throws DENOPTIMException
729 {
730 if ((line.trim()).length() == 0)
731 return;
732
733 if (line.startsWith("#")) //commented out lines
734 return;
735
736 if (line.toUpperCase().startsWith(paramType.keywordRoot))
737 {
738 interpretKeyword(line);
739 } else {
740 for (ParametersType parType : ParametersType.values())
741 {
742 if (line.toUpperCase().startsWith(parType.keywordRoot))
743 {
744 if (!otherParameters.containsKey(parType))
745 {
746 RunTimeParameters otherParams =
748 otherParams.isMaster = false;
749 otherParameters.put(parType, otherParams);
750 }
751 otherParameters.get(parType).interpretKeyword(line);
752 }
753 }
754 }
755 }
756
757//-----------------------------------------------------------------------------
758
767 {
768 RunTimeParameters instance = null;
769 try
770 {
771 Constructor<?> c = paramType.getImplementation().getConstructor();
772 instance = (RunTimeParameters) c.newInstance();
773 } catch (Exception e) {
774 e.printStackTrace();
775 // This should never happen because the constructor has to be there.
776 }
777 return instance;
778 }
779
780//------------------------------------------------------------------------------
781
788 {
789 return otherParameters.containsKey(type);
790 }
791
792//------------------------------------------------------------------------------
793
799 {
800 return otherParameters.get(type);
801 }
802
803//------------------------------------------------------------------------------
804
808 public void setParameters(RunTimeParameters otherParams)
809 {
810 otherParams.isMaster = false;
811 otherParameters.put(otherParams.paramType, otherParams);
812 }
813
814//------------------------------------------------------------------------------
815
816// TODO: consider this mechanism for retrieving parameters once all parameters
817// will be of type Parameter.
818//
819// /**
820// * @param type the type of embedded parameters to search for.
821// * @return the requested parameter, or null.
822// */
823// public RunTimeParameters getParameter(ParametersType type,
824// String parName)
825// {
826// if (!containsParameters(type))
827// {
828// otherParams.isMaster = false;
829// otherParameters.put(type, getInstanceFor(type));
830// }
831//
832// return otherParameters.get(type).get(parName);
833// }
834//
836//
837// public Parameter get(String parameterName)
838// {
839// return ...;
840// }
841
842//-----------------------------------------------------------------------------
843
849 public void interpretKeyword(String line) throws DENOPTIMException
850 {
851 String key = line.trim();
852 String value = "";
853 if (line.contains("="))
854 {
855 key = line.substring(paramType.keywordRoot.length(),
856 line.indexOf("=") + 1).trim();
857 value = line.substring(line.indexOf("=") + 1).trim();
858 } else {
859 key = line.substring(paramType.keywordRoot.length());
860 }
861 try
862 {
863 interpretKeyword(key,value);
864 }
865 catch (DENOPTIMException e)
866 {
867 throw new DENOPTIMException(e.getMessage()+" Check line "+line);
868 }
869 }
870
871//-----------------------------------------------------------------------------
872
880 public abstract void interpretKeyword(String key, String value)
881 throws DENOPTIMException;
882
883//-----------------------------------------------------------------------------
884
889 public abstract void checkParameters() throws DENOPTIMException;
890
891//------------------------------------------------------------------------------
892
898 {
899 for (RunTimeParameters otherCollector : otherParameters.values())
900 {
901 otherCollector.checkParameters();
902 }
903 }
904
905//------------------------------------------------------------------------------
906
911 public abstract void processParameters() throws DENOPTIMException;
912
913//------------------------------------------------------------------------------
914
920 {
921 for (RunTimeParameters otherCollector : otherParameters.values())
922 {
923 otherCollector.processParameters();
924 }
925 }
926
927//------------------------------------------------------------------------------
928
935 //NB: this must be abstract because the superclass cannot look into the
936 // private fields of the subclass. When the parameters will be stored as
937 // objects rather then fields, then we should be able to have the
938 // public String getPrintedList only in this class.
939 public abstract String getPrintedList();
940 /*
941 public String getPrintedList()
942 {
943 StringBuilder sb = new StringBuilder(1024);
944 sb.append(" " + paramTypeName() + " ").append(NL);
945 for (Field f : this.getClass().getDeclaredFields())
946 {
947 try
948 {
949 sb.append(f.getName()).append(" = ").append(
950 f.get(this)).append(NL);
951 }
952 catch (Throwable t)
953 {
954 sb.append("ERROR! Unable to print " + paramTypeName()
955 + " parameters. Cause: " + t);
956 break;
957 }
958 }
959 for (RunTimeParameters otherCollector : otherParameters.values())
960 {
961 sb.append(otherCollector.getPrintedList());
962 }
963 return sb.toString();
964 }
965 */
966
967//----------------------------------------------------------------------------
968
973 public void printParameters()
974 {
975 StringBuilder sb = new StringBuilder(1024);
976 sb.append(getPrintedList()).append(NL);
977 sb.append("-------------------------------------------"
978 + "----------------------").append(NL);
979 logger.log(Level.INFO,sb.toString());
980 }
981
982 //------------------------------------------------------------------------------
983
990 protected void ensureFileExistsIfSet(String pathname)
991 {
992 if (pathname == null || pathname.isBlank())
993 return;
994
995 if (!FileUtils.checkExists(pathname))
996 {
997 String msg = "ERROR! File '" + pathname + "' not found!";
998 throw new Error(msg);
999 }
1000 }
1001
1002//------------------------------------------------------------------------------
1003
1009 protected void ensureFileExists(String pathname)
1010 {
1011 if (!FileUtils.checkExists(pathname))
1012 {
1013 String msg = "ERROR! File '" + pathname + "' not found!";
1014 throw new Error(msg);
1015 }
1016 }
1017
1018//------------------------------------------------------------------------------
1019
1025 protected void ensureNotNull(String paramName, String param, String paramKey)
1026 {
1027 if (param == null)
1028 {
1029 String msg = "ERROR! Parameter '" + paramName + "' is null! "
1030 + "Please, add '" + paramType.keywordRoot + paramKey
1031 + "' to the input parameters.";
1032 throw new Error(msg);
1033 }
1034 }
1035
1036//------------------------------------------------------------------------------
1037
1043 protected void ensureIsPositive(String paramName, int value, String paramKey)
1044 {
1045 if (value <= 0)
1046 {
1047 String msg = "ERROR! Parameter '" + paramName + "' not striktly "
1048 + "positive (" + value + "). "
1049 + "Please, use a positive value for '" + paramType.keywordRoot
1050 + paramKey + "'.";
1051 throw new Error(msg);
1052 }
1053 }
1054
1055//------------------------------------------------------------------------------
1056
1062 protected void ensureIsPositiveOrZero(String paramName, int value,
1063 String paramKey)
1064 {
1065 if (value < 0)
1066 {
1067 String msg = "ERROR! Parameter '" + paramName + "' is negative ("
1068 + value + "). "
1069 + "Please, use a positive value for '" + paramType.keywordRoot
1070 + paramKey + "'.";
1071 throw new Error(msg);
1072 }
1073 }
1074
1075//------------------------------------------------------------------------------
1076
1082 protected void ensureInRange(String paramName, int value, int min, int max,
1083 String paramKey)
1084 {
1085 if (max < value || min > value)
1086 {
1087 String msg = "ERROR! Parameter '" + paramName + "' is not in range"
1088 + min + " < x < " + max + " (value: " + value + "). "
1089 + "Please, correct the value of '" + paramType.keywordRoot
1090 + paramKey + "'.";
1091 throw new Error(msg);
1092 }
1093 }
1094
1095//----------------------------------------------------------------------------
1096
1097}
static boolean checkExists(String fileName)
Definition: FileUtils.java:241
Settings defining the calculation of fitness.
Parameters defining the fragment space.
Parameters and setting related to handling ring closures.
Collection of parameters controlling the behavior of the software.
Map< ParametersType, RunTimeParameters > otherParameters
Collection of other parameters by type.
void setRandomizer(Randomizer rng)
Sets the randomizer.
Logger startProgramSpecificLogger(String loggerIdentifier)
Starts a logger with the given name.
RunTimeParameters(ParametersType paramType)
Constructor.
boolean isMaster
Flag signaling this is the master collection of parameters.
boolean containsParameters(ParametersType type)
void setLogger(Logger logger)
Set the name of the program specific logger.
abstract void checkParameters()
Evaluate consistency of input parameters.
void setParameters(RunTimeParameters otherParams)
String getWorkDirectory()
Gets the pathname to the working directory.
static RunTimeParameters getInstanceFor(ParametersType paramType)
Builds the implementation of this class suitable to allocate parameters of the given type.
Randomizer startRandomizer(long seed)
Starts a program specific randomizer, i.e., a tool for generating random numbers and taking random de...
static boolean readYesNoTrueFalse(String s)
Reads a string searching for any common way to say either yes/true (including shorthand t/y) or no/fa...
abstract String getPrintedList()
Returns the list of parameters in a string with newline characters as delimiters.
void ensureFileExists(String pathname)
Ensures a pathname does lead to an existing file or triggers an error.
void interpretKeyword(String line)
Processes a string looking for keyword and a possibly associated value.
RunTimeParameters getParameters(ParametersType type)
void readParameterFile(String infile)
Read the parameter TXT file line by line and interpret its content.
Logger getLogger()
Get the name of the program specific logger.
Logger startProgramSpecificLogger(String loggerIdentifier, boolean toLogFile)
Starts a logger with the given name.
Logger logger
Program-specific logger.
void ensureIsPositiveOrZero(String paramName, int value, String paramKey)
Ensures that a parameter is a positive number (x>=0) or triggers an error.
String getLogFilePathname()
Gets the pathname to the log file.
void printParameters()
Print all parameters.
void setLogFilePathname(String pathname)
Sets the pathname to the log file.
abstract void processParameters()
Processes all parameters and initialize related objects.
void ensureNotNull(String paramName, String param, String paramKey)
Ensures that a parameter is not null or triggers an error.
String paramTypeName()
Returns a string defining the type the parameters collected here.
void ensureInRange(String paramName, int value, int min, int max, String paramKey)
Ensures that a parameter is within a range or triggers an error.
void ensureIsPositive(String paramName, int value, String paramKey)
Ensures that a parameter is a positive number (x>=0) or triggers an error.
Randomizer rng
Program-specific random numbers and random decisions generator.
void checkOtherParameters()
Checks any of the parameter collections contained in this instance.
abstract void interpretKeyword(String key, String value)
Processes a keyword/value pair and assign the related parameters.
Logger startConsoleLogger(String loggerIdentifier)
Starts a program-specific logger that prints to System.err stream.
final String NL
New line character.
Randomizer startRandomizer()
Starts a program specific randomizer, i.e., a tool for generating random numbers and taking random de...
ParametersType paramType
The type of parameters collected in this instance.
int getVerbosity()
Returns the level of verbosity, i.e., the amount of log that we want to print.
void processOtherParameters()
Processes any of the parameter collections contained in this instance.
int verbosity
Verbosity level for logger.
void setVerbosity(int l)
Set the level of verbosity.
Randomizer getRandomizer()
Returns the current program-specific randomizer.
void setWorkDirectory(String pathname)
Gets the pathname to the working directory.
void ensureFileExistsIfSet(String pathname)
Ensures a pathname is not empty nor null and that it does lead to an existing file or triggers an err...
Parameters controlling execution of the combinatorial algorithm for exploration of a fragment space b...
Parameters for genetic algorithm.
Parameters controlling execution of FitnessRunner.
Parameters controlling execution of the fragmenter.
Parameters controlling execution of TestOperator.
Parameters controlling execution of GraphEditor.
Parameters controlling execution of Isomorphism main class.
Parameters controlling execution of GraphEditor.
Parameters for the conformer generator (3D builder).
Tool to generate random numbers and random decisions.
Definition: Randomizer.java:35
GO_PARAMS
Parameters controlling stand-alone run of genetic operators.
FR_PARAMS
Parameters controlling a stand-alone fitness evaluation run.
M2G_PARAMS
Parameters controlling molecule-to-graph conversion.
String keywordRoot
The root of any keyword that is meant to be used to set any of the parameters belonging to this class...
FS_PARAMS
Parameters pertaining the definition of the fragment space.
CEBL_PARAMS
Parameters pertaining the combinatorial exploration by layer.
ISO_PARAMS
Parameters controlling the stand-alone detection of graph isomorphism.
FRG_PARAMS
Parameters controlling the fragmenter.
MMB_PARAM
Parameters pertaining the construction of three-dimensional molecular models using the Tinker-based m...
GLH_PARAMS
Parameters controlling the stand-alone management of list of graphs.
FIT_PARAMS
Parameters pertaining the calculation of fitness (i.e., the fitness provider).
GA_PARAMS
Parameters pertaining the genetic algorithm.
RC_PARAMS
Parameters pertaining to ring closures in graphs.
GE_PARAMS
Parameters controlling the stand-alone editing of graphs.