# HintCO

This framework is a automated co-simulation program which is based on hints.
The co-simulation user define some hints in the framework, then the framework automatically try to find best master algorithm in order to satisfy user hints.
It runs numerous simulations, using the past results to improve next simulation with new master algorithm.  

## Download

The latest precompiled binaries for windows are available for download in the releases.

For Linux and macOS platforms, see [Getting Started in Development](#Getting-Started-in-Development).

## Usage Instructions

There are two main tasks in running a co-simulation with HintCO:

1. Configure a co-simulation scenario file. This is an xml file that can be easily edited with Eclipse and the editor plugin shipped with HintCO.
1. Compute the co-simulation results.

#### Configuring Co-simulation Scenarios

Co-simulation scenario are just xml files. See  [watertanks.xmi](HintCO\examples\watertanks.xmi) for an example.

HintCO provides EMF Editor Plugins to edit such files. To use them, install the `HintCO.edit_*.jar` and `HintCO.editor_*.jar` files into your favorite eclipse distribution.

#### Running Co-simulations

HintCO provides some example co-simulations. The scenario files are available in the [examples](HintCO\examples\) directory and the FMUs are available in the [resources](HintCO\resources\) directory.

If `hintco` denotes the HintCO binary, then run

```
hintco -s .\examples\watertanks.xmi -o output -n 1
```

Where `.\examples\watertanks.xmi` can be found in  [examples](HintCO\examples\), and `output` is where the results will be generated.
The fmus are assumed to be in a `resources` folder, in the same directory as the binary `hintco`.
A helper script under [scripts](HintCO\scripts\) is provided, to create pdfs for the plots produced:

```
python plot_results.py ./output/0_1
```

To get help on the API:

```
hintco -h
```

## Getting Started in Development

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.

### Prerequisites

Windows/Linux platform.

### Installing

In order to setup the framework, you need follow these steps:

1. Install Eclipse IDE for RCP and RAP Developers.
	Version: Photon Release (4.8.0)
1. Install Xtend (Version 2.16 or 2.17).
	Using Install new software in Help tab of eclipse.
1. Install Xcore (Version 1.6).
	Using Install new software in Help tab of eclipse.
	Xcore will be part of the Xtend.
	The Xtend repository should be available in the "Work with" dropdown.
	Either enter "Xcore" in the filter field or locate "Modeling → EMF - Eclipse Modeling Framework Xcore SDK" in the content and check mark it.

### Building and Testing

Building and testing is done in eclipse.

### Exporting an Application

Ese eclipse to export the eclipse product with the [HintCO.product](HintCO\HintCO.product) file.

## Contributing

Please read [CONTRIBUTING.md](https://msdl.uantwerpen.be/git/claudio/HintCO/src/master/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us.

## Versioning

We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://msdl.uantwerpen.be/git/claudio/HintCO/tags).

## License

This project is licensed under the MIT License - see the [LICENSE.md](LICENSE) file for details

## Paper

If you use the HintCO, please cite our paper.

HintCO – Hint-Based Configuration of Co-Simulations.
Cláudio Gomes, Bentley James Oakes, Mehrdad Moradi, Alejandro Torres Gámiz, Juan Carlos Mendo, Stefan Dutré, Joachim Denil, Hans Vangheluwe. SIMULTECH 2019.
```
@inproceedings{Gomes2019,
  address = {{Prague, Czech Republic}},
  title = {{{HintCO}} - {{Hint}}-{{Based Configuration}} of {{Co}}-{{Simulations}}},
  booktitle = {International {{Conference}} on {{Simulation}} and {{Modeling Methodologies}}, {{Technologies}} and {{Applications}}},
  author = {Gomes, Cl{\'a}udio and Oakes, Bentley James and Moradi, Mehrdad and Gamiz, Alejandro Torres and Mendo, Juan Carlos and Dutre, Stefan and Denil, Joachim and Vangheluwe, Hans},
  year = {2019},
  pages = {accepted},
}
```