## Optimus

Optimus is a library for Linear and Quadratic mathematical optimization written in Scala programming language.

## License

This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions; See the GNU Lesser General Public License v3 for more details.

## Features

- High level mathematical modeling in Scala using algebraic expressions

- Linear and quadratic objective and constraint expressions.
- Higher order expressions cannot be defined or handled by the solvers yet.
- Addition, subtraction and multiplication operations can be performed on expressions.
- Expression simplification produces the simpler form of the expression.

- Supports various optimization settings by using existing mathematical programming solvers

- Linear programming (LP)
- Quadratic programming (QP)
- Quadratic constraint quadratic programming (QCQP)
- Mixed integer programming (MIP)

- Available solvers:

- Open source LpSolve can be used for LP and MIP.
- Open source oJSolver can be used for LP, QP and MIP.
- Proprietary solver Gurobi 9 can be used for efficiently solving LP, QP, QCQP and MIP.
- Proprietary solver Mosek 9 can be used for efficiently solving LP, QP, QCQP and MIP.

## How to get Optimus

Optimus is published to Maven Central for Scala 2.12 and 2.13.

Add the following dependencies to your SBT build file in order to get started:

```
libraryDependencies ++= Seq(
"com.github.vagmcs" %% "optimus" % "3.4.0",
"com.github.vagmcs" %% "optimus-solver-oj" % "3.4.0",
"com.github.vagmcs" %% "optimus-solver-lp" % "3.4.0"
)
```

Optionally, you can also add the following extra dependencies for proprietary solvers:

```
"com.github.vagmcs" %% "optimus-solver-gurobi" % "3.4.0"
"com.github.vagmcs" %% "optimus-solver-mosek" % "3.4.0"
```

For more information see Building and Linking

## Documentation

## Contributions

Contributions are welcome, for details see CONTRIBUTING.md.

## Reference for Scientific Publications

Please use the following BibTeX entry to cite Optimus in your papers:

```
@misc{Optimus,
author = {Evangelos Michelioudakis and Anastasios Skarlatidis},
title = {Optimus: an open-source mathematical optimization library},
url = {https://github.com/vagmcs/Optimus}
}
```