First of all, I have searched the topic in the site but I couldn't find exactly what I need.

I am a prospective PhD Student in Industrial and Systems Engineering. I really like CS-related works and OR as well, so I like to create OR tools by using computer skills. In my undergraduate I created a discrete-event simulation tool for production lines as a research; and during my graduate years I created a complex system for a network project which combines Gurobi, Java, Javascript and Google Maps API knowledge (and it was fun).

Then, I thought that I may join an OR-related software/freeware project to develop my skills. I couldn't find anyone to connect with. This thread seems useful but I don't know where to start at the first place. Should I learn new programming languages (or toolkit) to contribute these existing projects (for instance COIN-OR, Drools Planner) or find my way for creating things? Where should I start for creating useful tools and performing valuable studies? I know that I need to work within a team instead of proceed alone so that's why I am asking for your help.

We discussed about which programming skills are necessary before and in that thread JF Puget makes a distinction between OR Research and tool creation. I am asking for both, but especially I am interested with tool creation.

asked 19 Jul '12, 17:29

Sertalp%20Bilal's gravatar image

Sertalp Bilal
accept rate: 33%

You can't contribute code to a software project, if you don't know the programming language of the project. Programming language is a general divisor. Very few programmers are successful polygot programmers. You won't see me (= Java guy) contributing to C or C++ projects: not because I don't want too, but because I don't have the skill (I only know the syntax decently, not the tools or the API's). It would take me days to do a useful contribution. However, I regularly contribute to other open source project in Java, build in Maven and on GitHub, mostly to scratch my own itch. In some cases I 've been able to get the code, build it, fix it, test my fix and contribute my changes back in under an hour. Why? Because I am used to Java, Github, Maven and IntelliJ and those projects are in Github, written in Java and build by Maven. Had I been used to C++, Github, Make and Emacs, I 'd be contributing to other projects.

Starting point for Drools Planner specifically:

For the Drools platform we got a starting point document, that goes through setting up all the tools. It's long and very detailed, but you can skip big portions of it. Note that in the example commands, replace the word guvnor (another project in the drools platform) by drools-planner. Basically that document helps you install and use these tools on the project:

  • Git and GitHub: to get the source code, commit changes and send those changes back to the project
  • Maven: to build the project binaries from source code (and download any dependencies). This is a command-line build tool, but you don't need to run this often, as the Java editor does it for you.
  • Java editor (IntelliJ or Eclipse): to write, run and incrementally build the code.

After following that document, look for the class DroolsPlannerExamplesApp in drools-planner-examples and run it. The examples are often inspirational to find things to improve. If, instead, you're looking for any easy task, check this list.


answered 20 Jul '12, 01:22

Geoffrey%20De%20Smet's gravatar image

Geoffrey De ... ♦
accept rate: 6%

edited 20 Jul '12, 01:24


Agreed. Part of the programming experience's always to develop a healthy awareness that there is no "universal community" - communities spring up around particular languages/operating-systems/developmental environments that they've grown to love. And a first (generally long) step in contribution's always to get to know the community (communities) you're trying to help (bridge)

(20 Jul '12, 01:53) yeesian

I might be completely off, but what is often understated's to scratch your own itch: 'valuable tools' tend come from people who work on problems that they actively encounter, rather than problems they imagine other people will face.

One problem I do face: moving from a theoretical algorithm on paper to 'working code' I am not embarrassed to make public. There is already a huge amount of choices out there, from the modelling/programming language (C/C++/Python/Java/Matlab/Octave/etc) you can use, to the solvers/libraries that are available (Google OR-Tools, COIN-OR, OpenOpt, CVXOPT, CPLEX, matlab/numpy/other libraries, etc). Not to forget the need to

  1. document your code (see: What are good ways to document scientific software?)
  2. have version-control (svn/mercurial/git)
  3. record the environment under which your code runs (eg. sumatra)
  4. (optional) weave your code into your report (eg. sweave, knitr, Pweave)
  5. work with LaTeX
  6. manage the flow of data
    • when to keep them in memory
    • read them from the many different file formats(.lp/mps/xml/json/csv) by scraping from the web/reading from a database
    • pass them around in memory, (i) allocating them to the heap/stack, (ii) using the various data structures (matrices/arrays/lists/sets/dictionaries/etc)
  7. observe good software engineering practices (whatever that means)
  8. finding/generating (valid) test-data that holds up to scrutiny

All of these on top of keeping abreast with 'current research', rushing to meet deadlines, while managing teaching commitments/school work?. I think being observant of the software and workflow that people actually do use, and actually trying them out (and observing how many hours it took you; how you can make it easier for someone new) will generally give you a good nose to sniff out what'll be nice to work on next. (It'll be nice if you can share your journey/problems with many of us here, of course - the problems you do encounter will likely be faced by someone now/in-the-future. That's what's nice about a Q&A format website :P)

I mention all these, rather than the sleek/polished/state-of-the-art commercial solvers/studios available from IBM, because they're equally relevant 'tools' that we seldom acknowledge (perhaps because we don't use them). And very few people in the OR-community are actually know what to do if their matlab code doesn't run fast enough for them, and wants to probe deeper into programming language level APIs, but is intimidated by the need to build an open-source library/solver on their own, perform some/all of the tasks above, and often only has a few examples from cplex/cvx(opt) in the language that they use to go on by.


answered 20 Jul '12, 01:29

yeesian's gravatar image

accept rate: 3%

edited 20 Jul '12, 02:04

Agreed too :) Especially on the statement that you can't imagine problems. You need to experience them. The best way to experience them is write production code or at least prototype examples on real examples with real constraints.

(20 Jul '12, 03:28) Geoffrey De ... ♦

I completely agree about creating tools to solve my problems (first). I actually did it several times. However, I have seen that there are lots of projects going on and I feel I am missing something important. Because rather than waiting problems arise, I can help other people's problems, as common in Q&A websites. The thing here is, although dealing with various problems is beneficial in terms of broadening the knowledge, I would be happy to perform jobs to increase my depth. Thank you for your detailed answer.

(20 Jul '12, 05:23) Sertalp Bilal

Just to add to the list of available and open libraries, GLPK (GNU Linear Programming Kit), which also includes MIP.

(24 Jul '12, 04:52) Carleton

@Carleton, thanks! Perhaps we can start threads on (i) the libraries (open/closed) we do use, and (ii) the order in which we picked them up. Because I did try to use some of the libraries from COIN-OR, and google's or-tools - but I am very new (year 2 undergrad), and require extensive documentation/tutorials/examples to guide me along - I settled for cplex (the free preview) through its python API, because they have alot of help available through examples/user manuals available. And I think people usually pick up open libraries only after they've been weaned on their proprietary counterparts

(24 Jul '12, 05:32) yeesian

Thanks @yeesian I agree a list would be good. I agree with your point. When first starting the APIs can seem cryptic, but in time you know what to expect.

your post reminded me of another good open resource,

(25 Jul '12, 19:33) Carleton

Here's a good starting point:

Interactive tutorial to try Git and GitHub in 15 minutes.

No matter the programming language or even what software tool you're going to work on, you'll find that every community project either:

  • is on git (or mercurial)
  • is going to move to git (or mercurial)
  • doesn't know it yet that it will want to move to git (or mercurial) some day ;-)

SVN, CVS, VSS, ... are just not community friendly: they lack a good way for outsiders to provide code contributions. Since mercurial is very similar to git, learning either is a big step forward.


answered 20 Jul '12, 01:34

Geoffrey%20De%20Smet's gravatar image

Geoffrey De ... ♦
accept rate: 6%

edited 20 Jul '12, 07:56

binary options

Naturally one seeks always to find the quickest and easiest solutions to the problems of misinformation, with the possibilities that the web gives us all kinds of courses online, found a new variant to enable us both in the handling of new computer programs and its derivatives


answered 25 Jul '12, 15:46

ronnie's gravatar image

accept rate: 0%

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here



Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text]( "Title")
  • image?![alt text](/path/img.jpg "Title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported



Asked: 19 Jul '12, 17:29

Seen: 2,389 times

Last updated: 26 Jul '12, 04:23

OR-Exchange! Your site for questions, answers, and announcements about operations research.