Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
06c8e94
Created Diagram stuct
Aug 10, 2021
dc7979f
Node adding functions.
Aug 10, 2021
9342c46
First draft of influence_diagram.jl
Aug 13, 2021
6d194c5
Used car buyer example with new interface.
Aug 13, 2021
6201db1
Added new functions and types to DecisionProgramming.jl
Aug 13, 2021
01ea402
Updated printing call.
Aug 13, 2021
598be0a
First round of edits on decision_model.jl
Aug 13, 2021
8484a9a
Edited the decision strategy printing function to use InfluenceDiagram
Aug 13, 2021
3e44b1a
Updated pig_breeding example.
Aug 13, 2021
199b0d8
Fixed hard coded N=4
Aug 13, 2021
8e8e2ab
Fixed hard coded N=4
Aug 13, 2021
30f9796
Improved influence diagram validation criteria.
Aug 17, 2021
0363b50
Fixed error messages that catch erroneous probability and consequence…
Aug 17, 2021
431d632
Deleted the old node validation from the Generate Diagram function.
Aug 17, 2021
cefc177
Implemented postive and negative utility translations in influence di…
Aug 17, 2021
8f3e299
Pig breeding example now using positive path utility.
Aug 17, 2021
b27b45d
some to-do comments.
Aug 18, 2021
4c62087
New implementation of deduce indices.
Aug 18, 2021
0eafb7b
Merge branch 'interface-influence-diagram' of github.com:helmihankima…
Aug 18, 2021
5fba91f
Moved primitive type Name definition to top, deleted type NodeData an…
Aug 19, 2021
1af4cb8
Redefined ValueNode, DecisionNode and ChanceNode structs. Added funct…
Aug 19, 2021
3edfa7e
Adjusted DefaultPathProbability to new definition of C in InfluenceDi…
Aug 19, 2021
8baf1b7
Updated the DefaultPathUtility.
Aug 19, 2021
dfce6e0
Fixed small typos and mistakes here and there.
Aug 19, 2021
4d45df1
Changed deduce_node_indices to GenerateArcs! and updated GenerateDiag…
Aug 20, 2021
3ced1d3
Added temporary AddProbabilities! and AddConsequences! functions unti…
Aug 20, 2021
ecf3ff1
Updated DecisionProgramming.jl to include new functions and reorganiz…
Aug 20, 2021
362852a
Updated DecisionVariables function to use new data types.
Aug 20, 2021
98b7c84
Updated PathCompatibilityVariables function to use new data types.
Aug 20, 2021
79abb6f
Deleted unnecessary variables from CVaR function
Aug 20, 2021
6d4741d
Updated the DecisionStrategy and LocalDecisionStrategy structs to usi…
Aug 20, 2021
3d614d0
Added I_d to DecisionStrategy and DecisionVariables structs because i…
Aug 20, 2021
d2df6a7
Updated CompatiblePaths to new data types
Aug 20, 2021
0564a16
Updated UtilityDistribution to new data types.
Aug 20, 2021
a25dc00
Fixed parameters in CompatiblePaths inner construction function to ne…
Aug 23, 2021
7da5222
Updated state probabilities functions to use new data types
Aug 23, 2021
53503c6
Redefined the parameters of value at risk and conditional value at ri…
Aug 23, 2021
3d74cb9
Rephrased comment.
Aug 23, 2021
a80fb34
Fixed mistake in parameters of CompatiblePaths.
Aug 24, 2021
646f05f
Added States to InfluenceDiagram for printing purposes.
Aug 24, 2021
6dbae19
Revamped printing decision strategy.
Aug 24, 2021
4459693
Updated n monitoring to new interface but this one is NOT working at …
Aug 24, 2021
de8ea83
Updated pig breeding.
Aug 24, 2021
aa415b9
Updated used car buyer.
Aug 24, 2021
e718511
Fixed N-monitoring example.
Aug 24, 2021
0423c3b
Deleted commented out code including old data types and node and infl…
Aug 25, 2021
1341082
Chanced all references to chance node use letter c instead of j.
Aug 25, 2021
bd0bb01
Chanced all references to value nodes use letter v instead of j.
Aug 25, 2021
3e66dd7
Removed duplicate code.
Aug 25, 2021
6fb622a
Renamed functions to abide Julia style guide.
Aug 26, 2021
b3f3a30
Added the ProbabilityMatrix struct and set_probability function. Edit…
Aug 26, 2021
736e5d7
Added UtilityMatrix, set_utilities and edited add_utilities. Also lau…
Aug 26, 2021
17712ca
Fixed data type in setindex. Data type in set_utility and add_utiliti…
Aug 26, 2021
d05b4df
Code oranising using section headings.
Aug 26, 2021
b5208bf
Added UtilityMatrix functionalities to DecisionProgramming.jl
Aug 26, 2021
2e63449
Implemented the check that all elements of a utility matrix have a va…
Aug 26, 2021
c757a8a
Fixed probability matrix to be declared as matrix of zeros.
Aug 27, 2021
c97348a
Moved validation that only one probability/utility matrix is added pe…
Aug 27, 2021
c239a44
Changed used car buyer to use new function names.
Aug 27, 2021
fc5c98c
Changed pig breeding to use new function names.
Aug 27, 2021
5fce654
Changed n_monitoring to use new function names.
Aug 27, 2021
bb8272e
Chaged utility matrix setindex! function to accetp y::T<:Real because…
Aug 27, 2021
7798bf4
Change StateProbabilities to allow fixed nodes and states to be given…
Aug 27, 2021
27185b7
Updated print_state_probabilities to use node names instead of indice…
Aug 27, 2021
e1ec518
Deleted unnecessary Utility() conversions.
Aug 27, 2021
89d2110
Specified ambigous Int types.
Aug 27, 2021
f96f30f
Improved readability in generate arcs function.
Aug 27, 2021
f1b0ef5
Deleted outer construction function State since it's not needed with …
Aug 27, 2021
b128fc3
Added some explicit conversions to allow for changing Node primitive …
Aug 27, 2021
ddfb836
Changed node primitive type to Int16.
Aug 27, 2021
28cb5c4
Created FixedPath struct and outer construction functions for FixedPa…
Aug 27, 2021
903da80
Fixed CompatiblePaths inner construction function.
Aug 27, 2021
510f1b6
Included new types and reorganised according to placement in code.
Aug 27, 2021
1271814
Fixed docstring in analysis.jl
Aug 27, 2021
9204c58
Fixed docstrings in decision_model.jl
Aug 30, 2021
bc14087
Fixed docstrings in printing.jl
Aug 30, 2021
6170857
Fixed docstrings in influence_diagram.jl
Aug 30, 2021
e151188
Updated API reference.
Aug 30, 2021
01afc38
Added some printing to pig breeding.
Aug 30, 2021
073c642
Updated used car buyer example and documentation.
Aug 30, 2021
9fc896d
Made set_probability! accept Real numbers, the conversion happens in …
Aug 30, 2021
91cc338
Updated example pig breeding documentation.
Aug 30, 2021
06faa15
Corrections to used car buyer example documentation.
Aug 30, 2021
a2b3cb4
Fixed two bugs in analysis.jl. One in compatible paths enumeration an…
Aug 30, 2021
52a7aa4
Fixed couple mistakes in docstrings.
Aug 31, 2021
7d694ff
Updated CHD example and its dokumentation to new interface.
Aug 31, 2021
f335160
State to Int16 and edits in docstrings.
Aug 31, 2021
77c7c9f
Fixed bug by specifying types of X and Y in setindex functions. The u…
Aug 31, 2021
485a064
Updated usage page of documentation.
Aug 31, 2021
8eec097
Updated code and documentation of n-monitoring example.
Aug 31, 2021
b5e0ee7
Deleted images used in the old usage page.
Aug 31, 2021
85ca4e3
Minor changes to examples' documentations.
Aug 31, 2021
5ebc9aa
Proof read fixes to Usage.md.
Sep 3, 2021
2c32487
Proof reading edits.
Sep 6, 2021
4398583
Edited docstring of printing function.
Sep 6, 2021
8ca9adb
Updated the read me file.
Sep 6, 2021
b2c27c0
Added check that all utility values are filled in utility matrix.
Sep 7, 2021
1b56008
Updated testing of influence diagram.
Sep 7, 2021
ad01e56
Added a few broken influence diagrams to generate_arcs! testing.
Sep 7, 2021
4a70153
Corrected from subsetneq to subseteq. Instances were this has effect …
Sep 7, 2021
7dd7141
Added length function
solliolli Sep 10, 2021
c01346c
Updated random.jl and added the necessary functions to DecisionProgra…
Sep 13, 2021
b8774b5
Updated cpp example.
Sep 16, 2021
d318cfb
Created wrapper function for StateProbabilities so that it can be als…
Sep 16, 2021
58d8d15
Added test for positive and negative path utility.
Sep 16, 2021
964c59f
Fixed parametrs VaR and CVaR function calls.
Sep 16, 2021
154d703
Fixed tests for decision model, analysis and printing.
Sep 16, 2021
0c7a702
Improved docstring and added checks for probabilities only being adde…
Sep 16, 2021
bcf487e
Fixed tests for random.jl.
Sep 16, 2021
c0d047e
Added logging info.
Sep 16, 2021
977bacf
Merge branch 'interface-influence-diagram' of github.com:helmihankima…
Sep 16, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 20 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,30 +14,36 @@ We can create an influence diagram as follows:

```julia
using DecisionProgramming
S = States([2, 2, 2, 2])
C = [ChanceNode(2, [1]), ChanceNode(3, [1])]
D = [DecisionNode(1, Node[]), DecisionNode(4, [2, 3])]
V = [ValueNode(5, [4])]
X = [Probabilities(2, [0.4 0.6; 0.6 0.4]), Probabilities(3, [0.7 0.3; 0.3 0.7])]
Y = [Consequences(5, [1.5, 1.7])]
validate_influence_diagram(S, C, D, V)
sort!.((C, D, V, X, Y), by = x -> x.j)
P = DefaultPathProbability(C, X)
U = DefaultPathUtility(V, Y)

diagram = InfluenceDiagram()

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

generate_arcs!(diagram)

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

generate_diagram!(diagram)
```

Using the influence diagram, we create the decision model as follow:

```julia
using JuMP
model = Model()
z = DecisionVariables(model, S, D)
x_s = PathCompatibilityVariables(model, z, S, P)
EV = expected_value(model, x_s, U, P)
z = DecisionVariables(model, diagram)
x_s = PathCompatibilityVariables(model, diagram, z)
EV = expected_value(model, diagram, x_s)
@objective(model, Max, EV)
```

Finally, we can optimize the model using MILP solver.
We can optimize the model using MILP solver.

```julia
using Gurobi
Expand Down
44 changes: 29 additions & 15 deletions docs/src/api.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
# API Reference
`DecisionProgramming.jl` API reference.


## `influence_diagram.jl`
### Nodes
```@docs
Node
Name
AbstractNode
ChanceNode
DecisionNode
ValueNode
State
States
States(::Vector{Tuple{State, Vector{Node}}})
validate_influence_diagram
```

### Paths
```@docs
Path
paths(::AbstractVector{State})
paths(::AbstractVector{State}, ::Dict{Node, State})
ForbiddenPath
FixedPath
paths(::AbstractVector{State})
paths(::AbstractVector{State}, FixedPath)
```

### Probabilities
Expand All @@ -33,9 +35,10 @@ AbstractPathProbability
DefaultPathProbability
```

### Consequences
### Utilities
```@docs
Consequences
Utility
Utilities
```

### Path Utility
Expand All @@ -44,6 +47,18 @@ AbstractPathUtility
DefaultPathUtility
```

### InfluenceDiagram
InfluenceDiagram
generate_arcs!
generate_diagram!
add_node!
ProbabilityMatrix
set_probability!
add_probabilities!
UtilityMatrix
set_utility!
add_utilities!

### Decision Strategy
```@docs
LocalDecisionStrategy
Expand All @@ -61,10 +76,8 @@ lazy_probability_cut(::Model, ::PathCompatibilityVariables, ::AbstractPathProbab

### Objective Functions
```@docs
PositivePathUtility
NegativePathUtility
expected_value(::Model, ::PathCompatibilityVariables, ::AbstractPathUtility, ::AbstractPathProbability; ::Float64)
conditional_value_at_risk(::Model, ::PathCompatibilityVariables{N}, ::AbstractPathUtility, ::AbstractPathProbability, ::Float64; ::Float64) where N
expected_value(::Model, ::InfluenceDiagram, ::PathCompatibilityVariables; ::Float64)
conditional_value_at_risk(::Model, ::InfluenceDiagram, ::PathCompatibilityVariables{N}, ::Float64; ::Float64) where N
```

### Decision Strategy from Variables
Expand All @@ -76,13 +89,14 @@ DecisionStrategy(::DecisionVariables)
## `analysis.jl`
```@docs
CompatiblePaths
CompatiblePaths(::InfluenceDiagram, ::DecisionStrategy, ::FixedPath)
UtilityDistribution
UtilityDistribution(::States, ::AbstractPathProbability, ::AbstractPathUtility, ::DecisionStrategy)
UtilityDistribution(::InfluenceDiagram, ::DecisionStrategy)
StateProbabilities
StateProbabilities(::States, ::AbstractPathProbability, ::DecisionStrategy)
StateProbabilities(::States, ::AbstractPathProbability, ::DecisionStrategy, ::Node, ::State, ::StateProbabilities)
value_at_risk(::Vector{Float64}, ::Vector{Float64}, ::Float64)
conditional_value_at_risk(::Vector{Float64}, ::Vector{Float64}, ::Float64)
StateProbabilities(::InfluenceDiagram, ::DecisionStrategy)
StateProbabilities(::InfluenceDiagram, ::DecisionStrategy, ::Name, ::Name, ::StateProbabilities)
value_at_risk(::UtilityDistribution, ::Float64)
conditional_value_at_risk(::UtilityDistribution, ::Float64)
```

## `printing.jl`
Expand Down
Loading