CEGO Patch Notes 

Version 2.4.4 @ 2025-01-09
	- Removed dependency on ParamHelpers due to a potential archiving of that package.
	  This means that parameters in optimEA will have to be defined slightly differently as a list, 
	  see the example provided with mutationSelfAdapt.

Version 2.4.3 @ 2024-01-27
	- New function: distanceSequenceLevenshtein for computing Levenshtein distances
	  between numeric vectors or integer vectors.
	- Fixed: bug that prevented optimCEGO from successfully dealing with multiple
    distance functions simultaneously.
	- Fixed: computing a more appropriate penalty in the likelihood function. 
    Thus, a rare issues with larger numbers of samples in modelKriging should be avoided.
	- Updates to function documentation 
    (including a fixed error in the documentation of distancePermutationEuclidean, 
    regarding scaling factor)
    (including missing/superfluous/mistyped arguments)

Version 2.4.2 @ 2021-05-13
	- Fixed: distancePermutationSwap now computes the swap distance on the provided 
    permutations rather on the inverse permutations.
    distancePermutationSwapInv reproduces the original behavior.
    Manuel Lopez-Ibanez kindly reported this issue. The difference in behavior 
    between the two versions of the swap distance are discussed in the publication:
    Ekhine Irurozki and Manuel Lopez-Ibanez. 
    Unbalanced Mallows Models for Optimizing Expensive Black-Box Permutation Problems. 
    In Proceedings of the Genetic and Evolutionary Computation Conference, GECCO 2021. 
    ACM Press, New York, NY, 2021. doi: 10.1145/3449639.3459366 
	- Fixes an issue reported by CRAN / Prof. Ripley. 
    Specifically, this patch fixes an example, where the warning "data length differs from size of matrix" was produced.
	
Version 2.4.0 @ 2019-12-07
	- Fixed a bug in optimMIES: strategy parameters are now removed correctly, before evaluating a candidate solution
    with the objective function. This bug affected evaluations of the initial population.
	- testFunctionGeneratorSim: now has defaults for the control lists, as well as a fixed documentation
	- Compliance with changes in R 4.0.0

Version 2.3.0 @ 2019-03-05
	- Fixed a bug that occured when checking for duplicates (to avoid them) in optimCEGO
	- A bug in optimMIES was fixed. The wrong sigma variable was used in the self-adpation for real-valued parameters.
	- optimMIES was changed to include categoricals only if they are coded as integers (but not necessarily as a sequence)
	  See also the changed example in optimMIES' help.
	- Fixed a potential alloc/PROTECT problem in distancePermutationInterchange and distancePermutationInsert (found by rchk)
	- This update now includes all methods for dealing with indefinite kernels in Kriging, as reported
	  in Chapter 8 of "Surrogate Models for Discrete Optimization Problems" by Martin Zaefferer (2018). 
		See ?modelKriging for some more details.

Version 2.2.0 @ 2017-07-12
	- New functionality: 
	- CEGO now contains an implementation of a Mixed Integer Evolution Strategy (MIES), see optimMIES.
	- Distances for numerical (binary) data as well as for string data are now included in the package. See distanceNumeric* and distanceString*
	- Several new mutation* and recombination* functions (for binary, string and permutation data) have been added.
	- The EA (optimEA) can now handle parts of its configuration in a self-adaptive way. See documentation.
	- Objects created by modelKriging can now be used for simulation (rather than just estimation/prediction), by calling simulate.modelKriging.
	  Connected to this last, there are now two functions that can be used to create simulation-based test functions:
	  createSimulatedTestFunction and testFunctionGeneratorSim
	
	- Other major changes:
	- Changed some details (e.g., registering, interfacing) of C code calls, to satisfy recently introduced CRAN check procedures. 
	  Incidentally, this may speed up calls to the various distance* functions that employ C code.
	
	- Other minor changes:
	- Fixed a bug in the optimInterface function: the restarts variable is now actually used (and by default TRUE)
	- Feature embedding is now included in the correctionDistanceMatrix function
	- The object returned by modelKriging now has a more informative print function
	- Various improvements of documentation (content and formatting)


Version 2.1.0 @ 2016-08-17
	- New functionality: 
	- By setting the control parameters indefiniteType, indefiniteMethod and indefiniteRepair,
		the modelKriging function has now several options of dealing with indefinite kernels / correlation functions.
  - The new functions is.CNSD, is.NSD and is.PSD check for (conditional) definiteness of matrices. These 
		Properties are required, e.g., for distance/kernel matrices in Kriging or Support Vector Machine Modelsmodels.
	- The new functions correctionCNSD, correctionDefinite, correctionKernelMatrix and correctionDistanceMatrix take matrices that lack required
		properties (definiteness) and correct the matrices to enforce the required properties.
	- The new functions repairConditionsDistanceMatrix and repairConditionsCorrelationMatrix repair the diagonal as well as the value range
		of the respective definite matrices, so that they are valid distance or correlation matrices.
	- The new function nearCNSD computes the nearest Conditionally Negative Semi-Definite matrix, similar to the nearPD function from
		the Matrix package (which computes the nearest Positive Semi-Definite matrix).
	
	- Other major changes:
	- Instead of choosing, multiple distances can now be combined in modelKriging, using a weighting scheme. 
	  This can be done by providing several distances function (or distance matrices)	and setting 
		control$combineDistances to TRUE.
	- A new design function and a new optimizer: 
		designMaxMinDist creates a design of experiment, by sequentially adding samples with maximum minimum distances to the existing samples
		optimMaxMinDist uses the above method as an one-shot optimizer.	
	
	- Other minor changes:
  - Landscapes generated by landscapeGeneratorUNI (or *MUL, *Gaussian) now wrap non-list inputs into a list.
	- Slightly changed configuration of landscapeGeneratorGaussian
  - Fixed optimInterface: in case of method="L-BFGS-B", the number of function evaluations (counts) should now be calculated correctly.
  - Improved the numerical stability of the maximum likelihood estimation in modelKriging.
	- optim2opt now also keeps an archive of solutions (optional, default).	
	- Various documentation improvements.
	- Switched off several warnings in likelihood estimation function for modelKriging, because they occured to frequentlty without being problematic.		
	
Version 2.0.0 @ 2015-10-06
	- General remark: This update includes some changes that are not backwards compatible.
		E.g., Several of the main function interfaces changed,
		to make functions more usable/flexible/understandable. See details below.  
		- Deprecated distancePermutationLCSeq. Replaced by distancePermutationInsert to stress edit-distance character of the function,
			for better readability and to avoid confusion of LCSeq and LCStr. The deprecated distancePermutationLCSeq will be removed in the next patch.
		- Variable names in optimInterface changed
		- Unified the interfaces of all optim* functions in the package. Now all take x, fun and control as input. creationFunction is part of control now.
		- Unfied interface for distance based landscape generators, landscapes now expect list of solutions as input. (i.e., even a single solution has to be wrapped into a list)
		- Renamed all modeling functions and the corresponding objects, e.g., combinatorialKriging is now modelKriging (old functions are deprecated and will be removed in next update).
	- Moved from .C to .Call interface for several permutation distance measures. 
    This may speed up distance calculation quite significantly in some cases:
    E.g., distancePermutationInterchange and distancePermutationInsert (formerly LCSeq) are now 
    ~3 times faster for typical test cases. Some distance measures that do not rely on 
    C code (e.g., Hamming, Euclidean) are not affected by this change.  
	- Added pivoting to Cholesky decomposition in likelihood estimation
		function for modelKriging. Allows for PSD correlation matrices.
	- New "control" parameter in modelKriging: control$scaling. 
    When this is set to TRUE, the distance matrix is divided by the 
    maximum distance to yield values between 0 and 1. This allows to 
    avoid scaling bias when distance functions may yield values larger 
		than one.
  - Improved documentation for several functions
	- Bugfix for the weighted tardiness benchmark, weight vector now handled correctly
  - New mutation operator for permutations (reversal mutation): mutationPermutationReversal 
  - Keeping an archive of candidate solutions in the EA is now optional. See the control parameter "archive" in optimEA.
 	- Custom choices for duplicate removal are now in optimEA. See control parameters "duplicateFunction" and "duplicateRemoval".
  - In case model building fails during a run of optimCEGO, the run stops (with a warning), giving the result so far as well as a termination message.
	
Version 1.0.1108 @ 2015-01-06
	- Initial Release