-
Notifications
You must be signed in to change notification settings - Fork 25
Motivation
InPUT allows you to describe computer experiments independent from programming language, or implementation. It provides adapters for the integration of InPUT descriptors into your programming language of choice. That way, you can share your experiments with others, or run experiments from third parties, verifying their experimental results. Experimental descriptors are basically sets of well defined parameters and their ranges. Therefore, another use case is the configuration of software applications. InPUT is more powerful than other configuration frameworks, such as Apache Commons Configuration, or the Spring Java Configuration framework, because it allows for the description of hierarchical and complex data-structures, enforcing a separation of concerns. In that realm, InPUT uses a combination of XML with validation support (XML-schema), inversion of control, and aspect oriented software development.
If the InPUT way is followed rigorously, you can change the scope of your parameter ranges at any time without a recompile of your program.
The figure below illustrates the coupling between algorithms that solve optimization problems, given their implementation as a program. A standard for the platform and language independent description of experiments would help to make the discussion of programming languages a secondary, as everyone would be able to exchange experimental setup and results; validation of experiments would be made significantly easier over language/implementation borders.
In the area of computational intelligence no central piece exists*, and to our knowledge, no such generic approach has been taken so far for (computer) experiments in general. InPUT simplifies experiments in that it allows to easily extract decisions from source code into (XML) descriptors. Changing an experimental scope simply requires the change of descriptors, and not the change of the program. Results can then be stored and used for analysis purposes, for instance by using Python or R. A small InPUT interface for R already exists, and can soon be downloaded from the code section.
The InPUT tool was presented for the first time at the GECCO 2012 (paper, presentation). If you use InPUT for your research, please refer to the paper. In case you mention InPUT in your work, you are welcome to use the LaTeX InPUT markup template.
- describe experiments programming language independent
- define primitive parameters (integer, long, short, boolean, double, float, decimal)
- define ranges for primitive parameters (e.g. x in [0.1,0.42[ )
- define complex, hierarchical, algorithmic components as parameters (e.g. operators, or whole algorithms)
- define valid choices for parameters, containing sub-parameters (e.g. operator A uses one of techniques X or Y)
- define multidimensional parameters
- define design spaces for experimental design
- create random parameter designs for design spaces
- define relative parameter ranges using an evaluation engines (e.g. "c < sin(b)+a")
- customize import, export mechanism (LaTeX tables, XML, and archives already supported)
Initially, InPUT is only available for Java (InPUT4j). The only dependency InPUT4j contains is to the XML processing api, jdom, which is included in the bundle as of now. The logging, extras, and injection extensions are in alpha state, and depend on AspectJ to extend InPUT. Peter Edsbäcker is working on an implementation for C++ (InPUT4cpp), which will be made available later this year. I will try to update this wiki frequently.
InPUT is open source (MIT license), provided by me, Felix Dobslaw. I will try to answer your questions and improve InPUT to the best of my abilities. However, I hope you understand that answers and fixes might take time, as a consequence of InPUT being a hobby project. If you are interested in contributing to the development of InPUT, I would welcome that. In that case, please let me know.
* inspite of some excellent frameworks, see here.
