Hi Herman,
Thanks for developing James. I have used it to do some tests in my research. I have found it very useful and so I would like to tell you some of my suggestion to make James even better. But first, I have to say that in my opinion, the most strength of James is the documentation. It is really helpful, insightful for using different heuristics, and full of practical examples. And my points (they are not very clear as I used James few months ago, so I can't remember the details):
1. It think James really needs a time parameters to stop the search "wherever" it is. At the moment the time parameter is a bit limited and I would suggest to investigate other time measurement approaches in Java as well.
2. It would be great to implement some common neighborhood structures like other parts of James.
3. That would be great if there is another implementation for someone who would like to run the algorithm only on one thread. In terms of performance, sometimes multi threading implementations are slightly slow. Also at the moment, the multi threading approach is implemented for only a few algorithms not all, which highlight the need to my point.
4. That would be great if there can be some parametrized neighborhood structures. Also in evaluating the objective function in each cycle, sometime calculating the difference in objective function depends on the parameter used in the neighborhood structure.
5. It would be great if the user can have more controls over the engaged algorithm in VNS algorithm such as call backs.
6. Implementation of .ToString() for the algorithms and neighborhood structures.
7. In SA algorithm, other cooling scheme implementations,
8. Population-based meta-heuristics. I know that at the moment there are a lot of packages for this purpose. But if the user can use the same framework, that would be great.
9. A parametrized evaluation class. Sometime it needs to have a table of penalties for different parts of the solution which is also is beneficial for evaluating the difference in the objective function.
10. A callback for the current neighborhood structure during the running of a multi-neighborhood algorithm.
Many thanks,
Eric