28

To go beyond prototyping a model, you will need a programming language. Here is a non-exhaustive list : Sometimes simply modeling and calling the solver won't suffice to handle complex problems. To develop custom algorithms, heuristics, etc you will need to learn a programming language. Python is a good choice for fast prototyping and C/C++ for developing ...


27

Here is the augmented and updated list. This should be a good starting point for further improvements. This list is very optimization-heavy (even the automatic differentiation software is most likely to be used by O.R. people in support of nonlinear optimization). So perhaps some additions outside optimization would be warranted, as well as machine learning ...


21

I am in a similar situation, where we mainly solve this by providing the servers on which the algorithms are running. This allows us to frequently monitor the input data and solutions, as well as the user behavior (is the user frequently optimizing and then re-optimizing with some other parameters). This applies to both exact methods and heuristics. The ...


19

In my opinion, programming languages are necessary as an OR practitioner. There are a number of reasons for this: Data Input/Output often requires some programming language. Whether it’s reading in data from an excel spreadsheet, or an SQL database or what have you, you will want to do this programmatically using Python etc. Many companies do not have GAMS, ...


17

Here are a couple lessons I've learned over the years on this problem. This is in addition to Tue Christensen's answer--there are lots of reasons your problem can "rust." First, if you can formulate the problem as an LP/MIP, rather than custom algorithm or heuristic, you'll be able to take advantage of commercial solvers. It doesn't take many years for ...


15

Let's make an inventory of example code for each common OR problem? Vehicle Routing Problem OptaPlanner: explanation + videos - source code (capacitated, time windows, multiple depots, ...) LocalSolver: explanation + source code (same with time windows) OR-tools: explanation + source code Jsprit: source code - company website (capacitated, time windows, ...


15

A good place to start is COIN-OR, which aims to "create for mathematical software what the open literature is for mathematical theory". You can also take a look at Google's OR-Tools. It contains many algorithms for specific problems (like knapsack or max flow) and also generic LP and CP solvers.


12

I try to publish all my O.R. code on my GitHub page. There are both exact and heuristic algorithms. I am learning about better coding practices every day, so there is no guarantee that code I published 1-4 years ago is of acceptable quality (for my standards of today and even less for my future standards), but perhaps it is better than nothing! Frameworks ...


12

There are quite a few good answers here. I'll mention one more thing (related to two previously mentioned issues, building a GUI and accessing data): data cleaning. This may mean a number of things: detecting and removing errors or anomalies in input data; merging observations into single parameters (averages, etc.); converting units; and my personal ...


11

I would, for everything knapsack-like, always go to David Pisingers homepage. Here you can find very efficient codes for knapsack problems (COMBO), multiple-choice knapsack problems (Mcknap), and quadratick knapsack problems (quadknap) among others. I don't know if it qualifies as a "common OR problem" but for linear vector optimization (and therefore also ...


11

I'd say that you are comparing software packages with very different aims and capabilities. Tensorflow was developed to solve problems which involve (deep) neural nets. Mosek and gurobi on the other hand are usually used to solve optimization problems that involve discrete decisions (i.e. variables that can take only discrete values which means you are ...


10

I did not want to answer here, but Alex challenged me :) I agree on all the benefits of using a modeling language (as Alex indicates) and totally on the importance of finding a "good" model (as Alex also indicates), but neither answers your question which, in my understanding, pertains to regardless of the platform used to code up the model [...], it is the ...


9

Agree with all the mentioned great answers, I also think general programming languages are necessary for the OR practitioners and would like to add the following points: Applications: Beside the theoretical advancement of OR techniques and concepts in academia, there is another parallel and strong branch of OR, namely application of the OR in real-world ...


9

The following suggestion is conjecture (I don't do it myself) and certainly not guaranteed to prevent all possible errors. Develop your initial model, run it against multiple scenarios, and store the scenarios (parameter values) and solutions. As you modify the model, be sure to retain previous model versions (perhaps using a version control system, perhaps ...


9

Unfortunately writing high quality OR code is beyond the reach of most academic settings. This is mainly because: Writing high quality code is very time consuming. The scope of OR code is much better suited to teams of people rather than a lone wolf trying to do everything alone. Because it's time consuming, there's never enough time in academia to do this ...


9

VRPy is a python library for solving a range of vehicle routing problems. It is open source and open to new contributors. There are at least two ways to contribute: solve one of the existing issues have fun with it and propose new enhancements based on your personal experience with the library


8

This may be a related question: Why is the programming code of many algorithms not public in the OR community? A recent example I've liked is this large-scale location modeling paper by Cordeau, Furini and Ljubic, 2019. Here's their code.


8

As you mentioned about "scheduling/production planning problems", I refer it to manufacturing planning and detailed schedule. Also, I know that there are specific methods to solve other planning and scheduling problems. (E.g. vehicle routing problem variants). Planning and Scheduling, specifically in the real application, will need to survey from some ...


8

Before you even start worrying about algorithms, you need to figure out the solver's architecture. You can do so by posing and answering questions such as the ones I ask below. The answers will be a function of the goals of the project, the help & know-how of the people who employ you and, crucially, what you can realistically do in 6 months. Keep in ...


8

Disclaimer: I have worked for 3 years as an optimization software developer at a utility company and now work for Gurobi. Is the expectation for entry level positions, that the applicant is able to produce high quality code, or is that something that would be learned on the job? There is no expectation because it is often not the case (as Nikos said). ...


7

This applies to Gurobi: I found that solver parameter tuning rarely helps (apart from picking the right method) and generally seem to make Gurobi perform worse when confronted with unusual instances. Keeping in touch with users helps obviously. Either by talking to people or by collecting logs (if you have the social skills of an OR practitioner 😉). When ...


7

Earlier this year I needed a web application to let some Chinese students (with varying English language proficiencies) play around with models for Timetabling and Rolling Stock scheduling. I used an architecture much flatter than what Gurobi proposes, which did work in the small scale classroom setting (10~20 students). I first toyed around with a client-...


7

Since you are asking from a MSc student's point of view and actually need to use CPLEX, I assume that your research mainly focuses on the applications of OR. Therefore, two things are required to be considered. How difficult it is to implement your model? What is the possible solving approach for this model? My suggestion: If your research problem can ...


7

While the other answers are solid, to directly answer your stated questions: (2) Very broadly, I believe understanding how to program will help your students better understand and compare processes which involve software (which I hear is quite popular these days). (2) OR students specifically will be more prepared to do modeling and simulation with a ...


7

You may be interested in the following paper because it uses chance-constrained programming and bi-objective optimization together in a transportation application: https://link.springer.com/article/10.1007/s10288-019-00429-7 I would suggest to do the followings for your problem: 1- If you have bi-linear terms in your formulation then try to linearize them ...


7

Here and here (list is generated by Github based on the tags on the open projects) you can find long lists of open operations research projects on Github. By clicking on the "Open Issues" link on each page you can directly access the Github repository for that specific project. Note that @Kuifje's own repository VRPy is a great example.


6

Some optimization software/frameworks (commercial or open-source) such as AMPL, GAMS, Cplex, ... have a specific Algebraic modelling language. Some of them have another type of programming that uses APIs to connect with general programming languages ​​like C ++ / Java or others. AFAIK, Algebraic modelling language is a bit easier than general programming ...


6

I found a manual in Coin-OR Github page where they explained the implementation of the method through 3 different examples. You can find the document in this web address


6

Hastie, Tibshirani and Tibshirani did a comparison of Best Subset Selection (the MIP-formulation introduced by Bertsimas, King and Mazumder), Forward Stepwise Selection and the Lasso. For their calculations they created an R-package which they shared here.


6

For biased random-key genetic algorithms (BRKGA) there is a paper of Toso & Resende and accompanying software. In a BRKGA the solution is represented as vector $v\in\mathbb{R}^n$ of real "keys" and all you have to do is to provide a "decoder" that maps $v$ to a solution and computes its fitness. A bit dated, but still useful is the chapter on ...


Only top voted, non community-wiki answers of a minimum length are eligible