1 Introduction

The list of mathematical modeling software is huge. One can find free and commercial software for all kind of problems. Searching the Internet under “mathematial modeling”, “mathematical software”, “optimization software”, “mathematics learning”, “mathematical tools” exposes many links. Wikipedia and other sites list various categories, many other links exist, the field is very dynamic and new approaches appear all the time:

In this paper, I present a limited number of systems, hopefully some of the most relevant once, by implementing a simple example for each tool to get a flavor and a first impression of them. I give my personal comments in the light of the following criteria for a – what I think is a “good” – mathematical modeling system. In my opinion, a mathematical modeling system should fulfill the following requirements:

  1. A modeling system should be based in a formal language. Like a programming language, which is based on a written text and a formal syntax, a modeling system should be based on an executable language.

  2. The modeling language syntax should be as close as possible to a common mathematical notation used to specify a model.

  3. In addition, the modeling language should be a complete programming language, that is, rich enough to implement any algorithm (Turing complete), and it should contain features of a modern programming language.

  4. An important part of the syntax should be its (sparse) index capability in order to be able to formulate large models in a concise way.

  5. It should be possible to formulate within the language all kinds of model paradigms: linear, non-linear, permutations, containing logical constraints, constraint programming (CP), differential systems, etc.

  6. In the language it should be possible to modularize an model into sub-modules, in order to encapsulate entities and objects, similar to a modern programming language that contains classes (objects), modules, procedures, functions, etc.

  7. The model formulation should be independent of a solution method (solver). From the structure of the model, it should be possible to infer automatically what solver is apt to solve the model.

  8. The model should be independent from the data instances. A model structure should be executable without data. The data could be part of the code, but it is not necessary and normally would be separated from the model structure.

  9. On the base of the language, visual representations, like A-C graphs or others, and “visual” editors to build, manipulate and to modify the model could be built, as alternatives to editing and viewing the textual code – a modeling framework.

  10. Likewise programming languages, documenting a model is an important part in modeling – I guess it is even more important in modeling to understand its semantic.

In my opinion, mathematical modeling should not be just an “addon” package within a common programming language, this would always be somewhat artificial. Modeling is too important to be a supplement or an annex of an (existing) programming language. I know this is not the actual trend, a lot of packages have been developed for Python, Julia, and other languages that allow a modeler to code mathematical models. It is said that this has some advantages: One must learn only one language; a language like Python contains thousands of packages for all kinds of tasks: manipulating, reading/writing data, generating graphics and others; implementing efficient algorithms. However, the modeling language that I have in mind (which has not been found by now in my opinion) is also a complete programming language with all its interfaces to libraries, other software and own extensions with packages.