$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.moldecularmodelbuilder.MMBuilderParameters;
49import denoptim.utils.Randomizer;
50
51
67public abstract class RunTimeParameters
68{
76 protected boolean isMaster = true;
77
81 protected String workDir = System.getProperty("user.dir");
82
86 protected String logFile = "unset";
87
95 private Logger logger = Logger.getLogger("DummyLogger");
96
100 private Randomizer rng = null;
101
107 protected int verbosity = 0;
108
112 protected Map<ParametersType, RunTimeParameters> otherParameters =
113 new HashMap<ParametersType, RunTimeParameters>();
114
118 private ParametersType paramType = null;
119
123 public static enum ParametersType {
128
133
138
143
149
155
160
165
170
175
180
185
190 private String keywordRoot;
191
195 private Class<?> implementation;
196
197 static {
198 CEBL_PARAMS.keywordRoot = "FSE-";
199 GA_PARAMS.keywordRoot = "GA-";
200 FS_PARAMS.keywordRoot = "FS-";
201 FRG_PARAMS.keywordRoot = "FRG-";
202 RC_PARAMS.keywordRoot = "RC-";
203 FIT_PARAMS.keywordRoot = "FP-";
204 FR_PARAMS.keywordRoot = "FR-";
205 MMB_PARAM.keywordRoot = "3DB-";
206 GO_PARAMS.keywordRoot = "TESTGENOPS-";
207 GE_PARAMS.keywordRoot = "GRAPHEDIT-";
208 GLH_PARAMS.keywordRoot = "GRAPHLISTS-";
209 ISO_PARAMS.keywordRoot = "ISOMORPHISM-";
210
211 CEBL_PARAMS.implementation = CEBLParameters.class;
212 GA_PARAMS.implementation = GAParameters.class;
213 FS_PARAMS.implementation = FragmentSpaceParameters.class;
214 FRG_PARAMS.implementation = FragmenterParameters.class;
215 RC_PARAMS.implementation = RingClosureParameters.class;
216 FIT_PARAMS.implementation = FitnessParameters.class;
217 FR_PARAMS.implementation = FRParameters.class;
218 MMB_PARAM.implementation = MMBuilderParameters.class;
219 GO_PARAMS.implementation = GeneOpsRunnerParameters.class;
220 GE_PARAMS.implementation = GraphEdParameters.class;
221 GLH_PARAMS.implementation = GraphListsHandlerParameters.class;
222 ISO_PARAMS.implementation = IsomorphismParameters.class;
223 }
224
228 public Class<?> getImplementation()
229 {
230 return implementation;
231 }
232
237 public String getKeywordRoot()
238 {
239 return keywordRoot;
240 }
241 }
242
243 /*
244 * TODO: if we want a general Parameter class it will have to define
245 * - unique name of the parameter
246 * - java type used to collect the value
247 * - default value
248 * - description of what the parameter is or what it controls
249 * - code for parsing the value from input files
250 * - code for checking
251 * - core for processing the parameter
252 * - what else?
253 *
254 * Challenge: what about parameters that depend on other parameters?
255 * Need to control order of processing the parameters, in some occasions.
256 */
257
258
262 public final String NL = System.getProperty("line.separator");
263
264//-----------------------------------------------------------------------------
265
271 {
272 this.paramType = paramType;
273
274 /*
275 * This is the default logger "DummyLogger". It should be overwritten
276 * by a call to startProgramSpecificLogger
277 */
278 this.logger.setLevel(Level.SEVERE);
279 }
280
281//-----------------------------------------------------------------------------
282
287 public String paramTypeName()
288 {
289 return paramType.toString();
290 }
291
292//-----------------------------------------------------------------------------
293
298 public String getWorkDirectory()
299 {
300 return workDir;
301 }
302
303//-----------------------------------------------------------------------------
304
309 public void setWorkDirectory(String pathname)
310 {
311 this.workDir = pathname;
312 }
313
314//-----------------------------------------------------------------------------
315
320 public String getLogFilePathname()
321 {
322 return logFile;
323 }
324
325//-----------------------------------------------------------------------------
326
331 public void setLogFilePathname(String pathname)
332 {
333 this.workDir = pathname;
334 }
335
336//-----------------------------------------------------------------------------
337
341 public Logger getLogger()
342 {
343 return logger;
344 }
345
346//-----------------------------------------------------------------------------
347
354 private void setLogger(Logger logger)
355 {
356 this.logger = logger;
357 for (RunTimeParameters innerParams : otherParameters.values())
358 {
359 innerParams.setLogger(logger);
360 }
361 }
362
363//-----------------------------------------------------------------------------
364
378 public Logger startProgramSpecificLogger(String loggerIdentifier)
379 throws SecurityException, IOException
380 {
381 return startProgramSpecificLogger(loggerIdentifier, true);
382 }
383
384//-----------------------------------------------------------------------------
385
400 public Logger startProgramSpecificLogger(String loggerIdentifier,
401 boolean toLogFile)
402 throws SecurityException, IOException
403 {
404 logger = Logger.getLogger(loggerIdentifier);
405
406 int n = logger.getHandlers().length;
407 for (int i=0; i<n; i++)
408 {
409 logger.removeHandler(logger.getHandlers()[0]);
410 }
411
412 if (toLogFile)
413 {
414 FileHandler fileHdlr = new FileHandler(logFile);
415 SimpleFormatter formatterTxt = new SimpleFormatter();
416 fileHdlr.setFormatter(formatterTxt);
417 logger.setUseParentHandlers(false);
418 logger.addHandler(fileHdlr);
419 logger.setLevel(Level.INFO);
420 String header = "Started logging for " + loggerIdentifier;
421 logger.log(Level.INFO,header);
422 } else {
423 logger.addHandler(new StreamHandler(System.out,
424 new SimpleFormatter()));
425 }
426
427 if (verbosity!=0)
428 {
429 logger.setLevel(verbosityTologLevel());
430 for (int iH=0; iH<logger.getHandlers().length; iH++)
431 {
432 logger.getHandlers()[iH].setLevel(verbosityTologLevel());
433 }
434 }
435
436 for (RunTimeParameters innerParams : otherParameters.values())
437 {
438 innerParams.setLogger(logger);
439 }
440
441 return logger;
442 }
443
444//-----------------------------------------------------------------------------
445
451 public Logger startConsoleLogger(String loggerIdentifier)
452 {
453 logger = Logger.getLogger(loggerIdentifier);
454
455 int n = logger.getHandlers().length;
456 for (int i=0; i<n; i++)
457 {
458 logger.removeHandler(logger.getHandlers()[0]);
459 }
460 ConsoleHandler handler = new ConsoleHandler();
461 handler.setFormatter(new SimpleFormatter());
462 handler.setLevel(Level.INFO);
463 logger.addHandler(handler);
464
465 if (verbosity!=0)
466 {
467 logger.setLevel(verbosityTologLevel());
468 for (int iH=0; iH<logger.getHandlers().length; iH++)
469 {
470 logger.getHandlers()[iH].setLevel(verbosityTologLevel());
471 }
472 }
473
474 for (RunTimeParameters innerParams : otherParameters.values())
475 {
476 innerParams.setLogger(logger);
477 }
478
479 return logger;
480 }
481
482//-----------------------------------------------------------------------------
483
491 public static boolean readYesNoTrueFalse(String s)
492 {
493 boolean result = false;
494 String value = s.trim().toUpperCase();
495 if (value.equals("YES")
496 || value.equals("Y")
497 || value.equals("T")
498 || value.equals("TRUE"))
499 {
500 result = true;
501 } else if (value.equals("NO")
502 || value.equals("N")
503 || value.equals("F")
504 || value.equals("FALSE"))
505 {
506 result = false;
507 }
508 return result;
509 }
510
511//-----------------------------------------------------------------------------
512
513 private Level verbosityTologLevel()
514 {
515 int rebased = verbosity+3;
516 switch (rebased)
517 {
518 case 0:
519 return Level.OFF;
520 case 1:
521 return Level.SEVERE;
522 case 2:
523 return Level.WARNING;
524 case 3:
525 return Level.INFO;
526 case 4:
527 return Level.FINE;
528 case 5:
529 return Level.FINER;
530 case 6:
531 return Level.FINEST;
532 default:
533 // NB: Level.ALL does not actually allow all log. Don't use it.
534 if (rebased>6)
535 return Level.FINEST;
536 else
537 return Level.OFF;
538 }
539 }
540
541//-----------------------------------------------------------------------------
542
548 public int getVerbosity()
549 {
550 return verbosity;
551 }
552
553//------------------------------------------------------------------------------
554
563 public void setVerbosity(int l)
564 {
565 this.verbosity = l;
566 if (logger!=null)
567 {
568 logger.setLevel(verbosityTologLevel());
569 for (int iH=0; iH<logger.getHandlers().length; iH++)
570 {
571 logger.getHandlers()[iH].setLevel(verbosityTologLevel());
572 }
573 }
574
575 for (RunTimeParameters innerParams : otherParameters.values())
576 {
577 innerParams.setVerbosity(l);
578 }
579 }
580
581//-----------------------------------------------------------------------------
582
591 {
592 if (rng==null)
593 {
594 for (RunTimeParameters innerParams : otherParameters.values())
595 {
596 if (innerParams.rng!=null)
597 {
598 rng = innerParams.rng;
599 return innerParams.rng;
600 }
601 }
602
603 rng = new Randomizer();
604 for (RunTimeParameters innerParams : otherParameters.values())
605 {
606 innerParams.setRandomizer(rng);
607 }
608 }
609 return rng;
610 }
611
612//-----------------------------------------------------------------------------
613
618 public long getRandomSeed()
619 {
620 return rng.getSeed();
621 }
622
623//-----------------------------------------------------------------------------
624
631 {
632 this.rng = rng;
633 for (RunTimeParameters innerParams : otherParameters.values())
634 {
635 innerParams.setRandomizer(rng);
636 }
637 }
638
639//-----------------------------------------------------------------------------
640
647 {
648 rng = new Randomizer();
649 for (RunTimeParameters innerParams : otherParameters.values())
650 {
651 innerParams.setRandomizer(rng);
652 }
653 return rng;
654 }
655
656//-----------------------------------------------------------------------------
657
663 public Randomizer startRandomizer(long seed)
664 {
665 rng = new Randomizer(seed);
666 for (RunTimeParameters innerParams : otherParameters.values())
667 {
668 innerParams.setRandomizer(rng);
669 }
670 return rng;
671 }
672
673//-----------------------------------------------------------------------------
674
680 public void readParameterFile(String infile) throws DENOPTIMException
681 {
682 String line;
683 BufferedReader br = null;
684 try
685 {
686 br = new BufferedReader(new FileReader(infile));
687 while ((line = br.readLine()) != null)
688 {
689 readParameterLine(line);
690 }
691 }
692 catch (NumberFormatException | IOException nfe)
693 {
694 throw new DENOPTIMException(nfe);
695 }
696 finally
697 {
698 try
699 {
700 if (br != null)
701 {
702 br.close();
703 br = null;
704 }
705 }
706 catch (IOException ioe)
707 {
708 throw new DENOPTIMException(ioe);
709 }
710 }
711 }
712
713//-----------------------------------------------------------------------------
714
720 public void readParameterLine(String line) throws DENOPTIMException
721 {
722 if ((line.trim()).length() == 0)
723 return;
724
725 if (line.startsWith("#")) //commented out lines
726 return;
727
728 if (line.toUpperCase().startsWith(paramType.keywordRoot))
729 {
730 interpretKeyword(line);
731 } else {
732 for (ParametersType parType : ParametersType.values())
733 {
734 if (line.toUpperCase().startsWith(parType.keywordRoot))
735 {
736 if (!otherParameters.containsKey(parType))
737 {
738 RunTimeParameters otherParams =
740 otherParams.isMaster = false;
741 otherParameters.put(parType, otherParams);
742 }
743 otherParameters.get(parType).interpretKeyword(line);
744 }
745 }
746 }
747 }
748
749//-----------------------------------------------------------------------------
750
759 {
760 RunTimeParameters instance = null;
761 try
762 {
763 Constructor<?> c = paramType.getImplementation().getConstructor();
764 instance = (RunTimeParameters) c.newInstance();
765 } catch (Exception e) {
766 e.printStackTrace();
767 // This should never happen because the constructor has to be there.
768 }
769 return instance;
770 }
771
772//------------------------------------------------------------------------------
773
780 {
781 return otherParameters.containsKey(type);
782 }
783
784//------------------------------------------------------------------------------
785
791 {
792 return otherParameters.get(type);
793 }
794
795//------------------------------------------------------------------------------
796
800 public void setParameters(RunTimeParameters otherParams)
801 {
802 otherParams.isMaster = false;
803 otherParameters.put(otherParams.paramType, otherParams);
804 }
805
806//------------------------------------------------------------------------------
807
808// TODO: consider this mechanism for retrieving parameters once all parameters
809// will be of type Parameter.
810//
811// /**
812// * @param type the type of embedded parameters to search for.
813// * @return the requested parameter, or null.
814// */
815// public RunTimeParameters getParameter(ParametersType type,
816// String parName)
817// {
818// if (!containsParameters(type))
819// {
820// otherParams.isMaster = false;
821// otherParameters.put(type, getInstanceFor(type));
822// }
823//
824// return otherParameters.get(type).get(parName);
825// }
826//
828//
829// public Parameter get(String parameterName)
830// {
831// return ...;
832// }
833
834//-----------------------------------------------------------------------------
835
841 public void interpretKeyword(String line) throws DENOPTIMException
842 {
843 String key = line.trim();
844 String value = "";
845 if (line.contains("="))
846 {
847 key = line.substring(paramType.keywordRoot.length(),
848 line.indexOf("=") + 1).trim();
849 value = line.substring(line.indexOf("=") + 1).trim();
850 } else {
851 key = line.substring(paramType.keywordRoot.length());
852 }
853 try
854 {
855 interpretKeyword(key,value);
856 }
857 catch (DENOPTIMException e)
858 {
859 throw new DENOPTIMException(e.getMessage()+" Check line "+line);
860 }
861 }
862
863//-----------------------------------------------------------------------------
864
872 public abstract void interpretKeyword(String key, String value)
873 throws DENOPTIMException;
874
875//-----------------------------------------------------------------------------
876
881 public abstract void checkParameters() throws DENOPTIMException;
882
883//------------------------------------------------------------------------------
884
890 {
891 for (RunTimeParameters otherCollector : otherParameters.values())
892 {
893 otherCollector.checkParameters();
894 }
895 }
896
897//------------------------------------------------------------------------------
898
903 public abstract void processParameters() throws DENOPTIMException;
904
905//------------------------------------------------------------------------------
906
912 {
913 for (RunTimeParameters otherCollector : otherParameters.values())
914 {
915 otherCollector.processParameters();
916 }
917 }
918
919//------------------------------------------------------------------------------
920
927 //NB: this must be abstract because the superclass cannot look into the
928 // private fields of the subclass. When the parameters will be stored as
929 // objects rather then fields, then we should be able to have the
930 // public String getPrintedList only in this class.
931 public abstract String getPrintedList();
932 /*
933 public String getPrintedList()
934 {
935 StringBuilder sb = new StringBuilder(1024);
936 sb.append(" " + paramTypeName() + " ").append(NL);
937 for (Field f : this.getClass().getDeclaredFields())
938 {
939 try
940 {
941 sb.append(f.getName()).append(" = ").append(
942 f.get(this)).append(NL);
943 }
944 catch (Throwable t)
945 {
946 sb.append("ERROR! Unable to print " + paramTypeName()
947 + " parameters. Cause: " + t);
948 break;
949 }
950 }
951 for (RunTimeParameters otherCollector : otherParameters.values())
952 {
953 sb.append(otherCollector.getPrintedList());
954 }
955 return sb.toString();
956 }
957 */
958
959//----------------------------------------------------------------------------
960
965 public void printParameters()
966 {
967 StringBuilder sb = new StringBuilder(1024);
968 sb.append(getPrintedList()).append(NL);
969 sb.append("-------------------------------------------"
970 + "----------------------").append(NL);
971 logger.log(Level.INFO,sb.toString());
972 }
973
974 //------------------------------------------------------------------------------
975
982 protected void ensureFileExistsIfSet(String pathname)
983 {
984 if (pathname == null || pathname.isBlank())
985 return;
986
987 if (!FileUtils.checkExists(pathname))
988 {
989 String msg = "ERROR! File '" + pathname + "' not found!";
990 throw new Error(msg);
991 }
992 }
993
994//------------------------------------------------------------------------------
995
1001 protected void ensureFileExists(String pathname)
1002 {
1003 if (!FileUtils.checkExists(pathname))
1004 {
1005 String msg = "ERROR! File '" + pathname + "' not found!";
1006 throw new Error(msg);
1007 }
1008 }
1009
1010//------------------------------------------------------------------------------
1011
1017 protected void ensureNotNull(String paramName, String param, String paramKey)
1018 {
1019 if (param == null)
1020 {
1021 String msg = "ERROR! Parameter '" + paramName + "' is null! "
1022 + "Please, add '" + paramType.keywordRoot + paramKey
1023 + "' to the input parameters.";
1024 throw new Error(msg);
1025 }
1026 }
1027
1028//------------------------------------------------------------------------------
1029
1035 protected void ensureIsPositive(String paramName, int value, String paramKey)
1036 {
1037 if (value <= 0)
1038 {
1039 String msg = "ERROR! Parameter '" + paramName + "' not striktly "
1040 + "positive (" + value + "). "
1041 + "Please, use a positive value for '" + paramType.keywordRoot
1042 + paramKey + "'.";
1043 throw new Error(msg);
1044 }
1045 }
1046
1047//------------------------------------------------------------------------------
1048
1054 protected void ensureIsPositiveOrZero(String paramName, int value,
1055 String paramKey)
1056 {
1057 if (value < 0)
1058 {
1059 String msg = "ERROR! Parameter '" + paramName + "' is negative ("
1060 + value + "). "
1061 + "Please, use a positive value for '" + paramType.keywordRoot
1062 + paramKey + "'.";
1063 throw new Error(msg);
1064 }
1065 }
1066
1067//------------------------------------------------------------------------------
1068
1074 protected void ensureInRange(String paramName, int value, int min, int max,
1075 String paramKey)
1076 {
1077 if (max < value || min > value)
1078 {
1079 String msg = "ERROR! Parameter '" + paramName + "' is not in range"
1080 + min + " < x < " + max + " (value: " + value + "). "
1081 + "Please, correct the value of '" + paramType.keywordRoot
1082 + paramKey + "'.";
1083 throw new Error(msg);
1084 }
1085 }
1086
1087//----------------------------------------------------------------------------
1088
1089}
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 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.
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.