$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.Handler;
30import java.util.logging.Level;
31import java.util.logging.Logger;
32import java.util.logging.SimpleFormatter;
33import java.util.logging.StreamHandler;
34
35import denoptim.exception.DENOPTIMException;
36import denoptim.files.FileUtils;
37import denoptim.fitness.FitnessParameters;
38import denoptim.fragspace.FragmentSpaceParameters;
39import denoptim.graph.rings.RingClosureParameters;
40import denoptim.main.Main.RunType;
41import denoptim.programs.combinatorial.CEBLParameters;
42import denoptim.programs.denovo.GAParameters;
43import denoptim.programs.fitnessevaluator.FRParameters;
44import denoptim.programs.fragmenter.FragmenterParameters;
45import denoptim.programs.genetweeker.GeneOpsRunnerParameters;
46import denoptim.programs.grapheditor.GraphEdParameters;
47import denoptim.programs.graphlisthandler.GraphListsHandlerParameters;
48import denoptim.programs.isomorphism.IsomorphismParameters;
49import denoptim.programs.mol2graph.Mol2GraphParameters;
50import denoptim.programs.moldecularmodelbuilder.MMBuilderParameters;
51import denoptim.utils.Randomizer;
52
53
69public abstract class RunTimeParameters
70{
78 protected boolean isMaster = true;
79
83 protected String workDir = System.getProperty("user.dir");
84
88 protected String logFile = "unset";
89
97 private Logger logger = Logger.getLogger("DummyLogger");
98
102 private Randomizer rng = null;
103
109 protected int verbosity = 0;
110
114 protected Map<ParametersType, RunTimeParameters> otherParameters =
115 new HashMap<ParametersType, RunTimeParameters>();
116
120 private ParametersType paramType = null;
121
125 public static enum ParametersType {
130
135
140
145
151
157
162
167
172
177
182
187
192
197 private String keywordRoot;
198
202 private Class<?> implementation;
203
204 static {
205 CEBL_PARAMS.keywordRoot = "FSE-";
206 GA_PARAMS.keywordRoot = "GA-";
207 FS_PARAMS.keywordRoot = "FS-";
208 FRG_PARAMS.keywordRoot = "FRG-";
209 RC_PARAMS.keywordRoot = "RC-";
210 FIT_PARAMS.keywordRoot = "FP-";
211 FR_PARAMS.keywordRoot = "FR-";
212 MMB_PARAM.keywordRoot = "3DB-";
213 GO_PARAMS.keywordRoot = "TESTGENOPS-";
214 GE_PARAMS.keywordRoot = "GRAPHEDIT-";
215 GLH_PARAMS.keywordRoot = "GRAPHLISTS-";
216 ISO_PARAMS.keywordRoot = "ISOMORPHISM-";
217 M2G_PARAMS.keywordRoot = "M2G-";
218
219 CEBL_PARAMS.implementation = CEBLParameters.class;
220 GA_PARAMS.implementation = GAParameters.class;
221 FS_PARAMS.implementation = FragmentSpaceParameters.class;
222 FRG_PARAMS.implementation = FragmenterParameters.class;
223 RC_PARAMS.implementation = RingClosureParameters.class;
224 FIT_PARAMS.implementation = FitnessParameters.class;
225 FR_PARAMS.implementation = FRParameters.class;
226 MMB_PARAM.implementation = MMBuilderParameters.class;
227 GO_PARAMS.implementation = GeneOpsRunnerParameters.class;
228 GE_PARAMS.implementation = GraphEdParameters.class;
229 GLH_PARAMS.implementation = GraphListsHandlerParameters.class;
230 ISO_PARAMS.implementation = IsomorphismParameters.class;
231 M2G_PARAMS.implementation = Mol2GraphParameters.class;
232 }
233
237 public Class<?> getImplementation()
238 {
239 return implementation;
240 }
241
246 public String getKeywordRoot()
247 {
248 return keywordRoot;
249 }
250 }
251
252 /*
253 * TODO: if we want a general Parameter class it will have to define
254 * - unique name of the parameter
255 * - java type used to collect the value
256 * - default value
257 * - description of what the parameter is or what it controls
258 * - code for parsing the value from input files
259 * - code for checking
260 * - core for processing the parameter
261 * - what else?
262 *
263 * Challenge: what about parameters that depend on other parameters?
264 * Need to control order of processing the parameters, in some occasions.
265 */
266
267
271 public final String NL = System.getProperty("line.separator");
272
273//-----------------------------------------------------------------------------
274
280 {
281 this.paramType = paramType;
282
283 /*
284 * This is the default logger "DummyLogger". It should be overwritten
285 * by a call to startProgramSpecificLogger
286 */
287 this.logger.setLevel(Level.SEVERE);
288 }
289
290//-----------------------------------------------------------------------------
291
296 public String paramTypeName()
297 {
298 return paramType.toString();
299 }
300
301//-----------------------------------------------------------------------------
302
307 public String getWorkDirectory()
308 {
309 return workDir;
310 }
311
312//-----------------------------------------------------------------------------
313
318 public void setWorkDirectory(String pathname)
319 {
320 this.workDir = pathname;
321 }
322
323//-----------------------------------------------------------------------------
324
329 public String getLogFilePathname()
330 {
331 return logFile;
332 }
333
334//-----------------------------------------------------------------------------
335
340 public void setLogFilePathname(String pathname)
341 {
342 this.workDir = pathname;
343 }
344
345//-----------------------------------------------------------------------------
346
350 public Logger getLogger()
351 {
352 return logger;
353 }
354
355//-----------------------------------------------------------------------------
356
363 private void setLogger(Logger logger)
364 {
365 this.logger = logger;
366 for (RunTimeParameters innerParams : otherParameters.values())
367 {
368 innerParams.setLogger(logger);
369 }
370 }
371
372//-----------------------------------------------------------------------------
373
387 public Logger startProgramSpecificLogger(String loggerIdentifier)
388 throws SecurityException, IOException
389 {
390 return startProgramSpecificLogger(loggerIdentifier, true);
391 }
392
393//-----------------------------------------------------------------------------
394
409 public Logger startProgramSpecificLogger(String loggerIdentifier,
410 boolean toLogFile)
411 throws SecurityException, IOException
412 {
413 logger = Logger.getLogger(loggerIdentifier);
414
415 int n = logger.getHandlers().length;
416 for (int i=0; i<n; i++)
417 {
418 logger.removeHandler(logger.getHandlers()[0]);
419 }
420
421 if (toLogFile)
422 {
423 FileHandler fileHdlr = new FileHandler(logFile);
424 SimpleFormatter formatterTxt = new SimpleFormatter();
425 fileHdlr.setFormatter(formatterTxt);
426 logger.setUseParentHandlers(false);
427 logger.addHandler(fileHdlr);
428 logger.setLevel(Level.INFO);
429 String header = "Started logging for " + loggerIdentifier;
430 logger.log(Level.INFO,header);
431 } else {
432 logger.addHandler(new StreamHandler(System.out,
433 new SimpleFormatter()));
434 }
435
436 if (verbosity!=0)
437 {
438 Logger parlogger = logger;
439 while (parlogger != null)
440 {
441 parlogger.setLevel(verbosityTologLevel());
442 for (Handler handler : parlogger.getHandlers())
443 {
444 handler.setLevel(verbosityTologLevel());
445 }
446 parlogger = parlogger.getParent();
447 }
448 }
449
450 for (RunTimeParameters innerParams : otherParameters.values())
451 {
452 innerParams.setLogger(logger);
453 }
454
455 return logger;
456 }
457
458//-----------------------------------------------------------------------------
459
465 public Logger startConsoleLogger(String loggerIdentifier)
466 {
467 logger = Logger.getLogger(loggerIdentifier);
468
469 int n = logger.getHandlers().length;
470 for (int i=0; i<n; i++)
471 {
472 logger.removeHandler(logger.getHandlers()[0]);
473 }
474 ConsoleHandler handler = new ConsoleHandler();
475 handler.setFormatter(new SimpleFormatter());
476 handler.setLevel(Level.INFO);
477 logger.addHandler(handler);
478
479 if (verbosity!=0)
480 {
481 logger.setLevel(verbosityTologLevel());
482 for (int iH=0; iH<logger.getHandlers().length; iH++)
483 {
484 logger.getHandlers()[iH].setLevel(verbosityTologLevel());
485 }
486 }
487
488 for (RunTimeParameters innerParams : otherParameters.values())
489 {
490 innerParams.setLogger(logger);
491 }
492
493 return logger;
494 }
495
496//-----------------------------------------------------------------------------
497
505 public static boolean readYesNoTrueFalse(String s)
506 {
507 boolean result = false;
508 String value = s.trim().toUpperCase();
509 if (value.equals("YES")
510 || value.equals("Y")
511 || value.equals("T")
512 || value.equals("TRUE"))
513 {
514 result = true;
515 } else if (value.equals("NO")
516 || value.equals("N")
517 || value.equals("F")
518 || value.equals("FALSE"))
519 {
520 result = false;
521 }
522 return result;
523 }
524
525//-----------------------------------------------------------------------------
526
527 private Level verbosityTologLevel()
528 {
529 int rebased = verbosity+3;
530 switch (rebased)
531 {
532 case 0:
533 return Level.OFF;
534 case 1:
535 return Level.SEVERE;
536 case 2:
537 return Level.WARNING;
538 case 3:
539 return Level.INFO;
540 case 4:
541 return Level.FINE;
542 case 5:
543 return Level.FINER;
544 case 6:
545 return Level.FINEST;
546 default:
547 // NB: Level.ALL does not actually allow all log. Don't use it.
548 if (rebased>6)
549 return Level.FINEST;
550 else
551 return Level.OFF;
552 }
553 }
554
555//-----------------------------------------------------------------------------
556
562 public int getVerbosity()
563 {
564 return verbosity;
565 }
566
567//------------------------------------------------------------------------------
568
577 public void setVerbosity(int l)
578 {
579 this.verbosity = l;
580 if (logger!=null)
581 {
582 logger.setLevel(verbosityTologLevel());
583 for (int iH=0; iH<logger.getHandlers().length; iH++)
584 {
585 logger.getHandlers()[iH].setLevel(verbosityTologLevel());
586 }
587 }
588
589 for (RunTimeParameters innerParams : otherParameters.values())
590 {
591 innerParams.setVerbosity(l);
592 }
593 }
594
595//-----------------------------------------------------------------------------
596
605 {
606 if (rng==null)
607 {
608 for (RunTimeParameters innerParams : otherParameters.values())
609 {
610 if (innerParams.rng!=null)
611 {
612 rng = innerParams.rng;
613 return innerParams.rng;
614 }
615 }
616
617 rng = new Randomizer();
618 for (RunTimeParameters innerParams : otherParameters.values())
619 {
620 innerParams.setRandomizer(rng);
621 }
622 }
623 return rng;
624 }
625
626//-----------------------------------------------------------------------------
627
632 public long getRandomSeed()
633 {
634 return rng.getSeed();
635 }
636
637//-----------------------------------------------------------------------------
638
645 {
646 this.rng = rng;
647 for (RunTimeParameters innerParams : otherParameters.values())
648 {
649 innerParams.setRandomizer(rng);
650 }
651 }
652
653//-----------------------------------------------------------------------------
654
661 {
662 rng = new Randomizer();
663 for (RunTimeParameters innerParams : otherParameters.values())
664 {
665 innerParams.setRandomizer(rng);
666 }
667 return rng;
668 }
669
670//-----------------------------------------------------------------------------
671
677 public Randomizer startRandomizer(long seed)
678 {
679 rng = new Randomizer(seed);
680 for (RunTimeParameters innerParams : otherParameters.values())
681 {
682 innerParams.setRandomizer(rng);
683 }
684 return rng;
685 }
686
687//-----------------------------------------------------------------------------
688
694 public void readParameterFile(String infile) throws DENOPTIMException
695 {
696 String line;
697 BufferedReader br = null;
698 try
699 {
700 br = new BufferedReader(new FileReader(infile));
701 while ((line = br.readLine()) != null)
702 {
703 readParameterLine(line);
704 }
705 }
706 catch (NumberFormatException | IOException nfe)
707 {
708 throw new DENOPTIMException(nfe);
709 }
710 finally
711 {
712 try
713 {
714 if (br != null)
715 {
716 br.close();
717 br = null;
718 }
719 }
720 catch (IOException ioe)
721 {
722 throw new DENOPTIMException(ioe);
723 }
724 }
725 }
726
727//-----------------------------------------------------------------------------
728
734 public void readParameterLine(String line) throws DENOPTIMException
735 {
736 if ((line.trim()).length() == 0)
737 return;
738
739 if (line.startsWith("#")) //commented out lines
740 return;
741
742 if (line.toUpperCase().startsWith(paramType.keywordRoot))
743 {
744 interpretKeyword(line);
745 } else {
746 for (ParametersType parType : ParametersType.values())
747 {
748 if (line.toUpperCase().startsWith(parType.keywordRoot))
749 {
750 if (!otherParameters.containsKey(parType))
751 {
752 RunTimeParameters otherParams =
754 otherParams.isMaster = false;
755 otherParameters.put(parType, otherParams);
756 }
757 otherParameters.get(parType).interpretKeyword(line);
758 }
759 }
760 }
761 }
762
763//-----------------------------------------------------------------------------
764
773 {
774 RunTimeParameters instance = null;
775 try
776 {
777 Constructor<?> c = paramType.getImplementation().getConstructor();
778 instance = (RunTimeParameters) c.newInstance();
779 } catch (Exception e) {
780 e.printStackTrace();
781 // This should never happen because the constructor has to be there.
782 }
783 return instance;
784 }
785
786//------------------------------------------------------------------------------
787
794 {
795 return otherParameters.containsKey(type);
796 }
797
798//------------------------------------------------------------------------------
799
805 {
806 return otherParameters.get(type);
807 }
808
809//------------------------------------------------------------------------------
810
814 public void setParameters(RunTimeParameters otherParams)
815 {
816 otherParams.isMaster = false;
817 otherParameters.put(otherParams.paramType, otherParams);
818 }
819
820//------------------------------------------------------------------------------
821
822// TODO: consider this mechanism for retrieving parameters once all parameters
823// will be of type Parameter.
824//
825// /**
826// * @param type the type of embedded parameters to search for.
827// * @return the requested parameter, or null.
828// */
829// public RunTimeParameters getParameter(ParametersType type,
830// String parName)
831// {
832// if (!containsParameters(type))
833// {
834// otherParams.isMaster = false;
835// otherParameters.put(type, getInstanceFor(type));
836// }
837//
838// return otherParameters.get(type).get(parName);
839// }
840//
842//
843// public Parameter get(String parameterName)
844// {
845// return ...;
846// }
847
848//-----------------------------------------------------------------------------
849
855 public void interpretKeyword(String line) throws DENOPTIMException
856 {
857 String key = line.trim();
858 String value = "";
859 if (line.contains("="))
860 {
861 key = line.substring(paramType.keywordRoot.length(),
862 line.indexOf("=") + 1).trim();
863 value = line.substring(line.indexOf("=") + 1).trim();
864 } else {
865 key = line.substring(paramType.keywordRoot.length());
866 }
867 try
868 {
869 interpretKeyword(key,value);
870 }
871 catch (DENOPTIMException e)
872 {
873 throw new DENOPTIMException(e.getMessage()+" Check line "+line);
874 }
875 }
876
877//-----------------------------------------------------------------------------
878
886 public abstract void interpretKeyword(String key, String value)
887 throws DENOPTIMException;
888
889//-----------------------------------------------------------------------------
890
895 public abstract void checkParameters() throws DENOPTIMException;
896
897//------------------------------------------------------------------------------
898
904 {
905 for (RunTimeParameters otherCollector : otherParameters.values())
906 {
907 otherCollector.checkParameters();
908 }
909 }
910
911//------------------------------------------------------------------------------
912
917 public abstract void processParameters() throws DENOPTIMException;
918
919//------------------------------------------------------------------------------
920
926 {
927 for (RunTimeParameters otherCollector : otherParameters.values())
928 {
929 otherCollector.processParameters();
930 }
931 }
932
933//------------------------------------------------------------------------------
934
941 //NB: this must be abstract because the superclass cannot look into the
942 // private fields of the subclass. When the parameters will be stored as
943 // objects rather then fields, then we should be able to have the
944 // public String getPrintedList only in this class.
945 public abstract String getPrintedList();
946 /*
947 public String getPrintedList()
948 {
949 StringBuilder sb = new StringBuilder(1024);
950 sb.append(" " + paramTypeName() + " ").append(NL);
951 for (Field f : this.getClass().getDeclaredFields())
952 {
953 try
954 {
955 sb.append(f.getName()).append(" = ").append(
956 f.get(this)).append(NL);
957 }
958 catch (Throwable t)
959 {
960 sb.append("ERROR! Unable to print " + paramTypeName()
961 + " parameters. Cause: " + t);
962 break;
963 }
964 }
965 for (RunTimeParameters otherCollector : otherParameters.values())
966 {
967 sb.append(otherCollector.getPrintedList());
968 }
969 return sb.toString();
970 }
971 */
972
973//----------------------------------------------------------------------------
974
979 public void printParameters()
980 {
981 StringBuilder sb = new StringBuilder(1024);
982 sb.append(getPrintedList()).append(NL);
983 sb.append("-------------------------------------------"
984 + "----------------------").append(NL);
985 logger.log(Level.INFO,sb.toString());
986 }
987
988 //------------------------------------------------------------------------------
989
996 protected void ensureFileExistsIfSet(String pathname)
997 {
998 if (pathname == null || pathname.isBlank())
999 return;
1000
1001 if (!FileUtils.checkExists(pathname))
1002 {
1003 String msg = "ERROR! File '" + pathname + "' not found!";
1004 throw new Error(msg);
1005 }
1006 }
1007
1008//------------------------------------------------------------------------------
1009
1015 protected void ensureFileExists(String pathname)
1016 {
1017 if (!FileUtils.checkExists(pathname))
1018 {
1019 String msg = "ERROR! File '" + pathname + "' not found!";
1020 throw new Error(msg);
1021 }
1022 }
1023
1024//------------------------------------------------------------------------------
1025
1031 protected void ensureNotNull(String paramName, String param, String paramKey)
1032 {
1033 if (param == null)
1034 {
1035 String msg = "ERROR! Parameter '" + paramName + "' is null! "
1036 + "Please, add '" + paramType.keywordRoot + paramKey
1037 + "' to the input parameters.";
1038 throw new Error(msg);
1039 }
1040 }
1041
1042//------------------------------------------------------------------------------
1043
1049 protected void ensureIsPositive(String paramName, int value, String paramKey)
1050 {
1051 if (value <= 0)
1052 {
1053 String msg = "ERROR! Parameter '" + paramName + "' not striktly "
1054 + "positive (" + value + "). "
1055 + "Please, use a positive value for '" + paramType.keywordRoot
1056 + paramKey + "'.";
1057 throw new Error(msg);
1058 }
1059 }
1060
1061//------------------------------------------------------------------------------
1062
1068 protected void ensureIsPositiveOrZero(String paramName, int value,
1069 String paramKey)
1070 {
1071 if (value < 0)
1072 {
1073 String msg = "ERROR! Parameter '" + paramName + "' is negative ("
1074 + value + "). "
1075 + "Please, use a positive value for '" + paramType.keywordRoot
1076 + paramKey + "'.";
1077 throw new Error(msg);
1078 }
1079 }
1080
1081//------------------------------------------------------------------------------
1082
1088 protected void ensureInRange(String paramName, int value, int min, int max,
1089 String paramKey)
1090 {
1091 if (max < value || min > value)
1092 {
1093 String msg = "ERROR! Parameter '" + paramName + "' is not in range"
1094 + min + " < x < " + max + " (value: " + value + "). "
1095 + "Please, correct the value of '" + paramType.keywordRoot
1096 + paramKey + "'.";
1097 throw new Error(msg);
1098 }
1099 }
1100
1101//----------------------------------------------------------------------------
1102
1103}
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.