What is our primary use case?
I'm a professor in optimization. I do a lot of VIC routing scheduling problems and for those particular cases I use CPLEX and CP Optimizer a lot.
It performs really well. Sometimes you find bugs in there but the support team is good at getting them fixed.
What is most valuable?
I would say its extensibility, and the ability to do both high-level modeling and also go all the way to the engine extensions.
How has it helped my organization?
Whenever you do optimization, having a good CP solver or integer programming solver is a necessity. So CPLEX is a tool that I cannot do without.
What needs improvement?
What I would love to see is better accessibility of the engine extensions. Currently you can do really low-level stuff, and it's great, but you can only do it in C or C++. Whereas, sometimes the application requires another programming language, like Java or Python, and then you simply can't reach the engine extensions from either the Java or Python interface, and that is really a pity.
It would be really nice if you could write your extension in C++ but edit, or use it, through Java. That would be an improvement. But just being able to do everything completely from Java or Python would be a major improvement, and is probably something that CPLEX's competitors already have. So that is something I would really love to see in CPLEX too.
I am also involved in the open-source community and CPLEX is, unfortunately, not particularly nice because it is very expensive to buy. And I understand that obviously you need to earn money with CPLEX, so charging corporate members is necessary. But it would be nice if academics and people in the open-source community could also have access to it, or to a limited version of CPLEX.
What do I think about the stability of the solution?
The stability is reasonably good. Every single version has some bug, which I somehow always encounter. Some of these issues are really severe and literally crash the engine. Very rarely, I find issues which actually impact the accuracy of the results. That has happened twice so far. In general, it is okay.
What do I think about the scalability of the solution?
I find scalability to be more of an issue that comes from the modeling. If it doesn't scale, then it is usually the problem of the modeler. Some problems are just too big to give as a whole piece to solve and expect a reasonable answer in a reasonable amount of time.
How are customer service and technical support?
I do not use technical support because that is for enterprise users but as an academic I do have direct connections to the development team. I find that the support from the development team is superb. I have frequently interacted with people from the team and they usually fix my bug within the next version. Sometimes I get access to an early developer version if it is a really crucial issue.
I used to frequently interact on the IBM website but it was a major pain. It is absolutely a garbage website. It takes effort to find, the form is really bad, the markup is really bad - they should just switch to any other platform and make it searchable. There is a search function but it is really bad.
I download my software through the academic initiative, and obviously I love the initiative, but finding the initiative is an absolutely horrible experience too. Every year or so, there is a new version of CPLEX or CP Optimizer and I think, "Oh that's great, I would love to upgrade." Then I need to search, I actually need to search on Google, to find the link to the academic catalogs and then download it. It is really a painful experience. Try finding anything on the IBM website, and that doesn't work either. So the website is one of the major problems at the moment.
Which solution did I use previously and why did I switch?
I started using CPLEX because I needed access to an integer programming solver and the CP solver. I wasn't using another product beforehand.
How was the initial setup?
The instillation is super easy. You just download it and run the executable in either Linux or Windows, and three questions later it is done.
The only thing that is hard is if you connect directly to CPLEX through Java you will have to deal with classpath information and linking, which is not explained well. I frequently see people asking questions on websites like Stack Overflow or on the IBM forms about how to do this. CP is significantly easier, but it is still hard.
What other advice do I have?
When researching a product I consider what the quality, the support, and the documentation are like. The documentation for CPLEX, specifically the accessibility and where to find the documentation, is something that should be majorly improved.
If you are interested in CPLEX I recommend that after you install it, look over the examples that you get. There are some old, very hidden tutorials on how to do this. At some point, somebody from IBM wrote a manual on how to do scheduling in CP. That manual was very hard to find but if you can find it, it is a very valuable source of information.