shot

A solver for mixed-integer nonlinear optimization problems

https://github.com/coin-or/shot

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (11.4%) to scientific vocabulary

Keywords

global-optimization minlp optimization optimization-library optimization-methods solver
Last synced: 4 months ago · JSON representation ·

Repository

A solver for mixed-integer nonlinear optimization problems

Basic Info
  • Host: GitHub
  • Owner: coin-or
  • License: epl-2.0
  • Language: C++
  • Default Branch: master
  • Homepage: https://shotsolver.dev
  • Size: 27.6 MB
Statistics
  • Stars: 121
  • Watchers: 10
  • Forks: 27
  • Open Issues: 11
  • Releases: 6
Topics
global-optimization minlp optimization optimization-library optimization-methods solver
Created over 7 years ago · Last pushed 5 months ago
Metadata Files
Readme License Code of conduct Citation Authors

README

The Supporting Hyperplane Optimization Toolkit

SHOT is a software for solving mathematical optimization problems of the mixed-integer nonlinear programming (MINLP) class. In addition to MINLP problems, SHOT can also be used for subclasses such as NLP and MI(QC)QP.

Originally SHOT was intended for convex MINLP problems only, but as of version 1.0 it also has functionality to solve nonconvex MINLP problems as a heuristic method without providing any guarantees of global optimality. SHOT can solve certain nonconvex problem types to global optimality as well, and the bounds for the objective function value are guaranteed for nonconvex problems as well.

SHOT can be used
- as a console application,
- from GAMS (https://www.gams.com),
- from any modeling system that can use ASL, such as
  - Pyomo/Python (https://www.pyomo.org), 
  - JuMP/Julia (https://github.com/JuliaOpt/AmplNLWriter.jl), and 
  -  AMPL (https://www.ampl.com),
- using its API implemented in C++.

SHOT requires a MILP solver: Cplex (https://www.ibm.com/analytics/cplex-optimizer), Gurobi(https://www.gurobi.com) or Cbc (https://www.github.com/coin-or/Cbc). In addition an NLP solver is required; currently only Ipopt (https://www.github.com/coin-or/Ipopt) is supported. If SHOT is interfaced with GAMS, any licensed NLP solver can be used.

The documentation is provided at the project website at https://www.shotsolver.dev.

SHOT is a COIN-OR project.Project manager is Andreas Lundell. A full list of contributors is available on the  project website (https://shotsolver.dev/shot/about-shot/contributors).

Dual bound through polyhedral (outer) approximation

SHOT is based on iteratively creating a tighter polyhedral approximation of the nonlinear feasible set by generating supporting hyperplanes or cutting planes. These linearized problems are then solved with an mixed-integer linear programming (MILP) solver such as CPLEX, Gurobi or Cbc. If CPLEX or Gurobi is used, the subproblems can also include quadratic and bilinear nonlinearities directly; then MIQP or MIQCQP subproblems are solved. 

Primal bound using heuristics

The solution to the outer approximation problem provides a lower (dual) bound (when solving a minimization problem) to the original problem if the problem is convex. If the problem is nonconvex, convergence to the global optimal solution cannot be guaranteed (but might be achieved for certain classes of problems, cf. http://www.optimization-online.org/DB_HTML/2020/03/7691.html. 

To get an upper (primal) bound (when solving a minimization problem) on the optimal solution SHOT utilizes the following heuristics:
- Solving nonlinear programming (NLP) problems where the integer variables have been fixed to valid values. This is done by calling an external NLP solver (e.g. Ipopt).
- By checking solutions from the MIP solver's solution pool for points that fulfill also the nonlinearities in the original MINLP problem.
- By performing root searches. 

Termination

When the relative or absolute difference (objective gap) between the primal and dual bounds is less than a user-specified value, SHOT terminates with the current primal solution. If the original problem is convex, this is a global solution to the problem. If it is nonconvex, there is normally no guarantee that such a solution can be found, however SHOT will always in addition to the primal solution give a valid lower bound on the solution. 

Compilation instructions

Instructions for compiling SHOT is available at the project website (https://shotsolver.dev/shot/about-shot/compiling).

Solver manual

Instructions for how to use SHOT, e.g. call it from different environments, are provided on the project website (https://shotsolver.dev/shot/using-shot/getting-started).

Publications

SHOT is best described in the paper:

Lundell, A. Kronqvist, J. and Westerlund, T. *The Supporting Hyperplane Optimization Toolkit: A Polyhedral Outer Approximation Based 
Convex MINLP Solver Utilizing a Single Branching Tree Approach* (2018). http://www.optimization-online.org/DB_FILE/2018/06/6680.pdf

The features for solving nonconvex MINLP problems are described in the papers:

Lundell, A. and Kronqvist, J., Polyhedral Approximation Strategies in Nonconvex Mixed-Integer Nonlinear Programming. Optimization Online (2020). http://www.optimization-online.org/DB_HTML/2020/03/7691.html

Lundell, A. and Kronqvist, J. On Solving Nonconvex MINLP Problems with SHOT (2019). In: Le Thi H., Le H., Pham Dinh T. (editors) Optimization of Complex Systems: Theory, Models, Algorithms and Applications. WCGO 2019. Advances in Intelligent Systems and Computing, vol 991. Springer, Cham.

Owner

  • Name: COIN-OR Foundation
  • Login: coin-or
  • Kind: organization
  • Email: info@coin-or.org
  • Location: United States of America

Computational Infrastructure for Operations Research.

Citation (CITATION.cff)

cff-version: 1.2.0
message: 'If you use this software, please cite it as below'
authors:
- given-names: Andreas
  family-names: Lundell
  email: andreas.lundell@abo.fi
- given-names: Jan
  family-names: Kronqvist
- given-names: Tapio
  family-names: Westerlund
title: "SHOT"
version: 1.1
date-released: 2021-10-20
url: "https://github.com/coin-or/SHOT/releases/tag/releases%2F1.1.0"
preferred-citation:
  type: article
  authors:
    - given-names: A.
      family-names: Lundell
      email: andreas.lundell@abo.fi
    - given-names: J.
      family-names: Kronqvist
    - given-names: T.
      family-names: Westerlund
  doi: 10.1007/s10898-022-01128-0
  journal: "Journal of Global Optimization"
  start: 1 # First page number
  end: 41 # Last page number
  title: "The supporting hyperplane optimization toolkit for convex MINLP"
  issue: 1
  volume: 84
  year: 2022

GitHub Events

Total
  • Watch event: 2
  • Delete event: 1
  • Issue comment event: 1
  • Push event: 23
  • Pull request event: 5
  • Fork event: 4
  • Create event: 4
Last Year
  • Watch event: 2
  • Delete event: 1
  • Issue comment event: 1
  • Push event: 23
  • Pull request event: 5
  • Fork event: 4
  • Create event: 4

Issues and Pull Requests

Last synced: 4 months ago

All Time
  • Total issues: 34
  • Total pull requests: 67
  • Average time to close issues: about 1 month
  • Average time to close pull requests: 7 days
  • Total issue authors: 16
  • Total pull request authors: 7
  • Average comments per issue: 2.41
  • Average comments per pull request: 0.7
  • Merged pull requests: 59
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 5
  • Average time to close issues: N/A
  • Average time to close pull requests: 4 minutes
  • Issue authors: 0
  • Pull request authors: 3
  • Average comments per issue: 0
  • Average comments per pull request: 0.2
  • Merged pull requests: 2
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • svigerske (8)
  • andreaslundell (7)
  • chemrgineer (3)
  • damdaepark (2)
  • jbensabat (2)
  • odow (2)
  • RuifMaxx (1)
  • Plug11 (1)
  • devillove084 (1)
  • amir-hoseyn77 (1)
  • modiyamrugank (1)
  • lingjiajie (1)
  • arnabadas (1)
  • defencedog (1)
  • skortmann (1)
Pull Request Authors
  • andreaslundell (43)
  • svigerske (16)
  • maxemiliang (2)
  • odow (2)
  • johanekman12 (2)
  • tayutaedomo (2)
  • giordano (1)
Top Labels
Issue Labels
GAMS (1) CMake (1)
Pull Request Labels
enhancement (2)

Dependencies

.github/workflows/cmake.yml actions
  • actions/cache v2 composite
  • actions/checkout v2 composite