Closed ili3p closed 5 years ago
DYCORS implements DYCORS-LMSRBF. The idea of perturbing fewer and fewer coordinates comes from DDS, but I agree it is confusing. I'll clarify the documentation.
I have two more questions:
When set to CandidateDYCORS
is pySOT using the DYCORS-LMSRBF
algorithm for both integer and continuous decision variables?
Is the SO-MI ([1]) algorithm implemented in pySOT? If yes, how to use it?
Thanks
[1] Juliane Mueller, Christine A Shoemaker, and R Piche. SO-MI: A Surrogate Model Algorithm for Computationally Expensive Nonlinear Mixed-Integer, Black-Box Global Optimization Problems. Computers and Operations Research, 40(5):1383–1400, 2013.
That's correct. There are also methods for perturbing the continuous or integer variables separately. It should be possible to do something similar to SO-MI by cycling the adaptive sampling methods that are used in the paper. I believe they are all available in pySOT?
Yes! From the documentation:
search_strategies = [CandidateDYCORS(data=data, numcand=100*data.dim),
CandidateDYCORS_CONT(data=data, numcand=100*data.dim),
CandidateDYCORS_INT(data=data, numcand=100*data.dim),
CandidateUniform(data=data, numcand=100*data.dim)]
Which is what SO-MI is doing i.e. generate 4 groups of candidate points, and evaluate the best point from each of the groups.
So to use the SO-MI algorithm from the paper, we only need to define the search_strategy
as such.
Thanks a lot, now it's all clear 👍
Edit:
Just for reference: this is not all what SO-MI is doing. Besides generating 4 groups of candidate points, the perturbations are also done differently. From the paper [1]:
Randomly chosen continuous variables of z_min are perturbed by randomly adding or subtracting small, medium and large perturbations. If k > 5, then each variable is perturbed with a probability of 5/k. Otherwise, every variable is perturbed.
Here k is the number of continuous variables.
Thus I would say for now the SO-MI algorithm is not implemented in pySOT. Although with just a few changes one can code SO-MI like algorithm using the current version of pySOT.
Great! :)
I missed the edit you made and I'll look into how to add support for perturbations of different sizes.
I'm closing this and I'll open a new enhancement issue for implementing SO-MI.
In the documentation it says:
however after reading the code and the DYCORS paper (Regis & Shoemaker, 2012), the search strategy it's actually DYCORS-LMSRBF, not DYCORS-DDSRBF.
Please confirm.
Thanks