DecisionProgramming

DecisionProgramming.jl is a Julia package for solving multi-stage decision problems under uncertainty, modeled using influence diagrams. Internally, it relies on mathematical optimization. Decision models can be embedded within other optimization models.

https://github.com/gamma-opt/decisionprogramming.jl

Science Score: 67.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
    Found 5 DOI reference(s) in README
  • Academic publication links
    Links to: sciencedirect.com, zenodo.org
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (11.7%) to scientific vocabulary

Keywords

decision-making-under-uncertainty influence-diagrams julia jump stochastic-programming

Keywords from Contributors

interpretability pde flux meshing dynamical-systems julialang nonlinear graphics the-human-brain neural-operator
Last synced: 6 months ago · JSON representation ·

Repository

DecisionProgramming.jl is a Julia package for solving multi-stage decision problems under uncertainty, modeled using influence diagrams. Internally, it relies on mathematical optimization. Decision models can be embedded within other optimization models.

Basic Info
Statistics
  • Stars: 48
  • Watchers: 3
  • Forks: 7
  • Open Issues: 9
  • Releases: 6
Topics
decision-making-under-uncertainty influence-diagrams julia jump stochastic-programming
Created over 5 years ago · Last pushed 9 months ago
Metadata Files
Readme Contributing License Citation

README.md

DecisionProgramming.jl

Docs Image Runtests DOI

Description

DecisionProgramming.jl is a Julia package for solving multi-stage decision problems under uncertainty, modeled using influence diagrams. Internally, it relies on mathematical optimization. Decision models can be embedded within other optimization models. We designed the package as JuMP extension. We have also developed a Python interface, which is available here.

Citing

The Decision Programming framework is described in this publication. If you found the framework useful in your work, we kindly ask you to cite the following publication (pdf): @article{Salo_et_al-2022, title = {Decision programming for mixed-integer multi-stage optimization under uncertainty}, journal = {European Journal of Operational Research}, volume = {299}, number = {2}, pages = {550-565}, year = {2022}, issn = {0377-2217}, doi = {https://doi.org/10.1016/j.ejor.2021.12.013}, url = {https://www.sciencedirect.com/science/article/pii/S0377221721010201}, author = {Ahti Salo and Juho Andelmin and Fabricio Oliveira}, keywords = {Decision analysis, Influence diagrams, Decision trees, Contingent portfolio programming, Stochastic programming} }

If you use the rooted junction tree models, we kindly ask you to cite the following publication (pdf): @article{Parmentier_et_al-2020, title = {Integer programming on the junction tree polytope for influence diagrams}, journal = {INFORMS Journal on Optimization}, volume = {2}, number = {3}, pages = {209--228}, year = {2020}, issn = {0377-2217}, doi = {https://doi.org/10.1287/ijoo.2019.0036}, url = {https://pubsonline.informs.org/doi/epdf/10.1287/ijoo.2019.0036}, author = {Parmentier, Axel and Cohen, Victor and Lecl{\`e}re, Vincent and Obozinski, Guillaume and Salmon, Joseph}, keywords = {Influence diagrams, Partially observed Markov decision processes, probabilistic graphical models, Linear programming} }

Syntax

We can create an influence diagram as follows:

```julia using DecisionProgramming

diagram = InfluenceDiagram()

addnode!(diagram, DecisionNode("A", [], ["a", "b"])) addnode!(diagram, ChanceNode("B", ["A"], ["x", "y"])) addnode!(diagram, ChanceNode("C", ["A"], ["v", "w"])) addnode!(diagram, DecisionNode("D", ["B", "C"], ["k", "l"])) add_node!(diagram, ValueNode("V", ["D"]))

generate_arcs!(diagram)

addprobabilities!(diagram, "B", [0.4 0.6; 0.6 0.4]) addprobabilities!(diagram, "C", [0.7 0.3; 0.3 0.7]) add_utilities!(diagram, "V", [1.5, 1.7]) ```

Using the influence diagram, we generate the model as follows:

julia using JuMP model, z, variables = generate_model(diagram, model_type="RJT")

We can optimize the model using MILP solver.

julia using HiGHS optimizer = optimizer_with_attributes( () -> HiGHS.Optimizer() ) set_optimizer(model, optimizer) optimize!(model)

Finally, we extract the decision strategy from the decision variables.

julia Z = DecisionStrategy(z)

See the documentation for more detailed examples.

Installation

DecisionProgramming.jl is registered. You can add it using the command:

julia-repl pkg> add DecisionProgramming

To run examples and develop and solve decision models, you have to install JuMP and a solver capable of solving mixed-integer linear programs (MILP). JuMP documentation contains a list of available solvers.

julia-repl pkg> add JuMP

We recommend using the HiGHS solver, which is an efficient open-source solver.

julia-repl pkg> add HiGHS

Now you are ready to use decision programming.

Development

Using the package manager, add DecisionProgramming.jl package for development using the command:

julia-repl pkg> develop DecisionProgramming

If you have already cloned DecisionProgramming from GitHub, you can use the command:

julia-repl pkg> develop .

Inside DecisionProgramming directory, run tests using the commands:

julia-repl pkg> activate . (DecisionProgramming) pkg> test

You can find more instruction on how to install packages for development at Julia's Pkg documentation.

Owner

  • Name: Gamma-Opt
  • Login: gamma-opt
  • Kind: organization
  • Location: Finland

Group of Applied Mathematical Modeling and Optimisation

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: "Oliveira"
  given-names: "Fabricio"
  orcid: "https://orcid.org/0000-0003-0300-9337"
- family-names: "Herrala"
  given-names: "Olli"
  orcid: "https://orcid.org/0000-0003-4819-2534"
- family-names: "Tollander de Balsch"
  given-names: "Jaan"
  orcid: "https://orcid.org/0000-0002-4814-5554"
- family-names: "Hankimaa"
  given-names: "Helmi"
  orcid: "https://orcid.org/0000-0001-9531-6080"
- family-names: "Andelmin"
  given-names: "Juho"
  orcid: "https://orcid.org/0000-0003-3874-2029"
- family-names: "Terho"
  given-names: "Topias"
  orcid: "https://orcid.org/0009-0001-0256-143X"
- family-names: "Honkamaa"
  given-names: "Esa"
  orcid: "https://orcid.org/0009-0006-8115-677X"  
title: "DecisionProgramming.jl"
version: 2.0.0
doi: 10.5281/zenodo.13639605
date-released: 2024-09-03
url: "https://github.com/gamma-opt/DecisionProgramming.jl"

GitHub Events

Total
  • Create event: 1
  • Commit comment event: 2
  • Release event: 1
  • Issues event: 2
  • Watch event: 3
  • Issue comment event: 2
  • Push event: 4
  • Pull request event: 3
Last Year
  • Create event: 1
  • Commit comment event: 2
  • Release event: 1
  • Issues event: 2
  • Watch event: 3
  • Issue comment event: 2
  • Push event: 4
  • Pull request event: 3

Committers

Last synced: about 1 year ago

All Time
  • Total Commits: 684
  • Total Committers: 13
  • Avg Commits per committer: 52.615
  • Development Distribution Score (DDS): 0.646
Past Year
  • Commits: 164
  • Committers: 5
  • Avg Commits per committer: 32.8
  • Development Distribution Score (DDS): 0.213
Top Committers
Name Email Commits
Helmi Hankimaa h****a@g****m 242
Jaan Tollander de Balsch d****v@j****m 166
Esa Honkamaa e****a@s****i 129
solliolli o****a@a****i 106
Jaan Tollander de Balsch j****n@h****m 11
Fabricio Oliveira f****a@a****i 10
Juho Andelmin j****i@g****m 5
Topias Terho t****o@g****m 5
CompatHelper Julia c****y@j****g 3
github-actions[bot] 4****] 2
Benoît Legat b****t@g****m 2
Jaan Tollander de Balsch - 2
helmihankimaa 8****a 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 9 months ago

All Time
  • Total issues: 16
  • Total pull requests: 47
  • Average time to close issues: 4 months
  • Average time to close pull requests: about 1 month
  • Total issue authors: 7
  • Total pull request authors: 6
  • Average comments per issue: 1.31
  • Average comments per pull request: 0.04
  • Merged pull requests: 37
  • Bot issues: 0
  • Bot pull requests: 5
Past Year
  • Issues: 2
  • Pull requests: 14
  • Average time to close issues: about 2 hours
  • Average time to close pull requests: 10 days
  • Issue authors: 1
  • Pull request authors: 4
  • Average comments per issue: 0.5
  • Average comments per pull request: 0.07
  • Merged pull requests: 11
  • Bot issues: 0
  • Bot pull requests: 2
Top Authors
Issue Authors
  • jaantollander (7)
  • solliolli (3)
  • toubinaattori (2)
  • helmihankimaa (1)
  • jdelab1 (1)
  • FabsOliveira (1)
  • JuliaTagBot (1)
Pull Request Authors
  • solliolli (22)
  • toubinaattori (12)
  • esahon (9)
  • github-actions[bot] (8)
  • helmihankimaa (8)
  • blegat (4)
Top Labels
Issue Labels
enhancement (5) documentation (2) bug (1)
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • julia 1 total
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 5
juliahub.com: DecisionProgramming

DecisionProgramming.jl is a Julia package for solving multi-stage decision problems under uncertainty, modeled using influence diagrams. Internally, it relies on mathematical optimization. Decision models can be embedded within other optimization models.

  • Versions: 5
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 1 Total
Rankings
Dependent repos count: 9.9%
Stargazers count: 23.4%
Average: 24.2%
Forks count: 24.5%
Dependent packages count: 38.9%
Last synced: 7 months ago