jmejia8 / Metaheuristics.jl

High-performance metaheuristics for optimization coded purely in Julia.
https://jmejia8.github.io/Metaheuristics.jl/stable/
Other
255 stars 26 forks source link

Add Decision-Making methods #17

Closed jmejia8 closed 2 years ago

jmejia8 commented 2 years ago

This new feature will include a posteriori decision-making.

Possible Usage Example:

julia> res = optimize(f, bounds, NSGA2())

julia> idx = decisionmaking(res, method) # or

julia> idx = decisionmaking(res.population, method) # or

julia> idx = decisionmaking(pareto_front(res), method) # or

julia> idx = method(res) # optional

decision making will return an integer vector containing solutions in res.population related to that decision suggested by the method. Possible alias for decisionmaking: mcdm.

Consider interfacing https://github.com/jbytecode/JMcDM

jbytecode commented 2 years ago

nice, the mcdm functions follow a single pattern based on providing a dataframe, array of weights, and direction of optimizations. nice to see when integrated!

jmejia8 commented 2 years ago

The integration will be easy thanks to the API implemented in JMcDM.

jbytecode commented 2 years ago

what are you planning for the weights? choosing them with equal chance by default? what is the preferred default method?

jmejia8 commented 2 years ago

Nice question! I think weights have to be user-defined as well as method. However, after overthinking, I only will extend each core method in JMcDM (mcdm, MCDMSetting, etc.), and let JMcDM handles those parameters.

Suggestions are welcome 🤓

jbytecode commented 2 years ago

a default method (maybe Topsis) with equal weights would be useful. It is not a subject which every researchers are supposed to have enough knowledge.

jmejia8 commented 2 years ago

Now, JMcDM has an interface in Metaheuristics (master branch). It can be noted that different nature DM methods have been implemented (many in JMcDM, a Region of Interest filter, and some Compromise Programming methods).

Note that JMcDM is loaded by Requires.jl and it is necessary to import it before Metaheuristics. Therefore, I was unable to establish a default method. Further releases will include an extended tutorial about using MCDM and Metaheuristics.

@jbytecode, it would be nice to know your opinion.

jbytecode commented 2 years ago

psi would be nice as it does not use weights.

do you want me to change mcdm() with default params?

jmejia8 commented 2 years ago

do you want me to change mcdm() with default params?

Yes, I do. Thanks for the support.

jbytecode commented 2 years ago

any contributions are welcome if possible, otherwise, I can implement a default behaviour.

jbytecode commented 2 years ago

How is this: https://github.com/jbytecode/JMcDM/commit/417a2d6aaf8c31156c85f8b7ccecad325140cdeb

jmejia8 commented 2 years ago

Now, Metaheuristics.jl package includes Multi-Criteria Decision-Making methods. An interface for https://github.com/jbytecode/JMcDM has been implemented covering the following functions and types: mcdm, summary, and MCDMSetting.

Moreover, CompromiseProgramming and the ROIArchiving methods have been also included.

The main functions to perform MCDM are decisionmaking (alias dm) and best_alternative.

Example: https://jmejia8.github.io/Metaheuristics.jl/dev/examples/#Decision-Making Documentation: https://jmejia8.github.io/Metaheuristics.jl/dev/mcdm/

Suggestions are welcome.

jbytecode commented 2 years ago

congrats! well done.