dme65 / pySOT

Surrogate Optimization Toolbox for Python
Other
205 stars 53 forks source link

CandidateDYCORS implements which strategy? #12

Closed ili3p closed 5 years ago

ili3p commented 8 years ago

In the documentation it says:

CandidateDYCORS Uses a DDS strategy...

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

dme65 commented 8 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.

ili3p commented 8 years ago

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.

dme65 commented 8 years ago

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?

ili3p commented 8 years ago

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.

dme65 commented 8 years ago

Great! :)

dme65 commented 8 years ago

I missed the edit you made and I'll look into how to add support for perturbations of different sizes.

dme65 commented 5 years ago

I'm closing this and I'll open a new enhancement issue for implementing SO-MI.