I’m excited to share that MetaheuristicsAlgorithms.jl has grown significantly since its release. The package now includes over 100 algorithms, with plans to expand it to 200 original algorithms as well as enhanced versions of popular ones, including winners of the CEC competitions.
In addition, I’ve added more comprehensive documentation to make it easier to explore and utilize the package.
This is my first Julia package, and my vision is to create a comprehensive and global environment for metaheuristics, similar to or even surpassing frameworks like MEALPY.
I’d love to hear your feedback, suggestions, and any features you’d like to see. Please take a look and let me know what you think!
I took a look at the repo site. Clicking either of the documentation links results in a 404 error. Looking at the code, the docstrings for the optimizer functions cite the reference where the algorithm was published, but there is no documentation for how to call the functions. There are no unit tests implemented. So I don’t understand how you can claim that the documentation is “more comprehensive”. How can users try your package in this state?
Hello, thank you for the package. A few suggestions:
"MetaheuristicsAlgorithms.jl is one of the world’s most comprehensive Julia packages, "… attention in writing absolute sentences like this one
when posting a package announcement in a general forum like this one, consider a broader audience. In this case for example, you could spend a sentence saying what is a metaheuristic algorithm and what is used for.
In the readme you could just give the name of the algorithm with a link to the doc (that, how others have said, has some problems right now). In the doc, then provide a full reference to the original paper of the algorithm (a doi based link would be ideal)
implement unit tests. This is for yr users to “trust” the software, but also for you to be sure that when something get updated your software continue working.
We can visualize great the amount of work and effort behind this code. I can understand your script without documentation as a peer (but still suggest you provide the documentation). Two suggestions:
It would be nice to label which are the winners of the CEC competitions and in which year they were ranked. Algorithms that win CEC are usually of higher quality than others.
There are significant limitations to the practice of passing an objective function into an algorithmic function, though many deterministic algorithms do so. This is because the user needs to supply the objective function according to the paradigm you have written in the function. For example, fobj(x[i, :]) is used. If the user still needs to supply some arguments, they will need to write a bridge function that connects the existing objective function to the function supplied to the algorithmic function. And, users have to expect anything to work smoothly after passing the objective function into the function you provide.
I would recommend programming using the OOP paradigm with a structure that remembers all the current state of the algorithm, including some parameters. Using some function to receive that structure as input to iterate or update the algorithm. (I can make some contributions to the package if you wish.)
struct ABC
Best_pos
Best_score
X
...
end
function iterate!(algo::ABC, fitness)
# update the position
return algo # or algo.X
end
In this way, the metaheuristics provides an interface to the user and they are free to use this algorithm in the main program. Instead, the entire main program is fed into the algorithm functions.
algo = ABC(...)
while # stop criteria
fitness = fobj(X, a, b, c, d; kwarg1=..., kwarg2=...)
println(...)
# do something
iterate!(algo, fitness)
end