A mind dump after working through several OPL and GAMS models, as well as looking at a number of other algebraic modelling languages. It mostly is about perceived lack of features and options.
- I would like to nest of datatypes. E.g. an array of struct of arrays.
- I would like compile-time data check of known data? There are a lots of assertions/checks/even some constraints which could be checked before running the model, i.e., populating it with data?
- For a LP: I would like to derive the dual formulation automatically.
- For a MILP: I would like to derive the LP relaxation automatically.
- I would like to have type checking on indices?
- Are constant indices valid?
- Do I iterate/sum over valid subsets?
- I would like to have units of measurement annotations available for numeric values.
- I would like to symbollically presolve linear equalities.
- I want to extract a minimal model. Or dually: I want to remove superflous statements.
- I would like to use the same syntax in model and data files. (Looking at OPL and GAMS …) I would like to have data checks as part of data files.
- I would like to derivea model interface (needed inputs and pre-solver data checks, outputs) automatically.
- I want to declare indices in data files as nicely as in model files:
- In particular, I would like to have generative data files.
- I would like to specialize a model by providing some data/indices and getting another model.
- I would like to have a subtyping check between model interfaces?
- This answers questions like: Are the models instantiable with the same data? Do they deliver the same output?
- I would like to statically declare ragged arrays indexed by dependent index maps? E.g.
param A[i in 1..n][j in 1..J[i]]
? - I would like subset and powerset declarations for index sets.
- I would like to model using set-based or symbol/index-based decision variables.
- I would like to transform an advanced MILP model to a standard MILP formulation.
- I.e. for conditional constraints to Big-M formulations.
- I would like to generate randomly test data for a give model input interface to fuzzy test the model.
- I would like to topological sort statements according to logical dependence between them.
- I would like to generate a dependency graph for the whole model.
- I would like to treat data and model files in a unified way.
- I want to merge simpler/partial models into a bigger model.
- I would like to check for non-overlap in certain ranges statically.
- I would like more operations on (integer) ranges: length, size, intersection, product …
- I would like to have separate (integer) range and (real) interval types.
- I would like to have more structural types: records and discriminated unions.