Skip to content

Gradient descent fails on bounded reachability properties #856

@jianlin-herman-li

Description

@jianlin-herman-li

Hi, Storm developers,

I am trying to apply gradient descent to the dice model from [1], following the instructions in [2].

storm-pars works for the unbounded reachability property P >= 3/20 [ F d = 2 ], but fails for the bounded variant P >= 3/20 [ F <= 10 d = 2 ].

I am wondering whether the storm-pars --mode feasibility --feasibility:method gd supports bounded reachability properties, or if I am using it incorrectly.

Thanks for helping.

[1] https://arxiv.org/abs/1903.07993

[2] https://www.stormchecker.org/documentation/usage/running-storm-on-parametric-models.html

kydice.prism:

dtmc

const double x;
const double y;

module die

    // local state
    s : [0..7] init 0;
    // value of the dice
    d : [0..6] init 0;
    
    [] s=0 -> x : (s'=1) + 1-x : (s'=2);

    [] s=1 -> y : (s'=3) + 1-y : (s'=4);
    [] s=2 -> y : (s'=5) + 1-y : (s'=6);
    
    [] s=3 -> x : (s'=1)          + 1-x : (s'=7) & (d'=1);
    [] s=4 -> x : (s'=7) & (d'=3) + 1-x : (s'=7) & (d'=2);
    [] s=5 -> x : (s'=2)          + 1-x : (s'=7) & (d'=4);
    [] s=6 -> x : (s'=7) & (d'=6) + 1-x : (s'=7) & (d'=5);
    [] s=7 -> (s'=7);
    
endmodule

label "done" = (s=7);

Output from storm-pars:

> storm-pars --mode feasibility --feasibility:method gd --prism kydice.prism --prop "P>=3/20 [F d = 2]"
Storm-pars 1.11.1

Date: Tue Jan 27 19:37:36 2026
Command line arguments: --mode feasibility '--feasibility:method' gd --prism kydice.prism --prop 'P>=3/20 [F d = 2]'
Current working directory: /home/j2655li/pal-dev/benchmarks/kydice

Time for model input parsing: 0.000s.

Time for model construction: 0.010s.

-------------------------------------------------------------- 
Model type:     DTMC (sparse)
States:         13
Transitions:    20
Reward Models:  none
State Labels:   3 labels
   * deadlock -> 0 item(s)
   * init -> 1 item(s)
   * (d = 2) -> 1 item(s)
Choice Labels:  none
-------------------------------------------------------------- 

Time for model simplification: 0.000s.

-------------------------------------------------------------- 
Model type:     DTMC (sparse)
States:         6
Transitions:    10
Reward Models:  none
State Labels:   4 labels
   * (d = 2) -> 1 item(s)
   * deadlock -> 0 item(s)
   * target -> 1 item(s)
   * init -> 1 item(s)
Choice Labels:  none
-------------------------------------------------------------- 

Time for model preprocessing: 0.000s.

-------------------------------------------------------------- 
Model type:     DTMC (sparse)
States:         6
Transitions:    10
Reward Models:  none
State Labels:   4 labels
   * (d = 2) -> 1 item(s)
   * deadlock -> 0 item(s)
   * target -> 1 item(s)
   * init -> 1 item(s)
Choice Labels:  none
-------------------------------------------------------------- 
Find feasible solution for  P=? [F (d = 2)]
Finding an extremum using Gradient Descent
Trying out a new starting point
Trying initial guess (p->0.5 for every parameter p or set start point)
Starting at {x : 4503608634569751/9007199254740992, y : 4503608634569751/9007199254740992}
Aborting because the bound is satisfied
Result at initial state: 0.1666665556 ( approx. 0.1666665556) at [x=4503608634569751/9007199254740992, y=4503608634569751/9007199254740992].
Time for model checking: 0.001s.
> storm-pars --mode feasibility --feasibility:method gd --prism kydice.prism --prop "P>=3/20 [F<=10 d = 2]"
Storm-pars 1.11.1

Date: Tue Jan 27 19:37:42 2026
Command line arguments: --mode feasibility '--feasibility:method' gd --prism kydice.prism --prop 'P>=3/20 [F<=10 d = 2]'
Current working directory: /home/j2655li/pal-dev/benchmarks/kydice

Time for model input parsing: 0.000s.

Time for model construction: 0.010s.

-------------------------------------------------------------- 
Model type:     DTMC (sparse)
States:         13
Transitions:    20
Reward Models:  none
State Labels:   3 labels
   * deadlock -> 0 item(s)
   * init -> 1 item(s)
   * (d = 2) -> 1 item(s)
Choice Labels:  none
-------------------------------------------------------------- 

Time for model simplification: 0.000s.

-------------------------------------------------------------- 
Model type:     DTMC (sparse)
States:         6
Transitions:    10
Reward Models:  none
State Labels:   4 labels
   * init -> 1 item(s)
   * target -> 1 item(s)
   * deadlock -> 0 item(s)
   * (d = 2) -> 1 item(s)
Choice Labels:  none
-------------------------------------------------------------- 

Time for model preprocessing: 0.000s.

-------------------------------------------------------------- 
Model type:     DTMC (sparse)
States:         6
Transitions:    10
Reward Models:  none
State Labels:   4 labels
   * init -> 1 item(s)
   * target -> 1 item(s)
   * deadlock -> 0 item(s)
   * (d = 2) -> 1 item(s)
Choice Labels:  none
-------------------------------------------------------------- 
Find feasible solution for  P=? [true U<=10 (d = 2)]
Finding an extremum using Gradient Descent
ERROR (storm-pars.cpp:559): An unexpected exception occurred and caused Storm-pars to terminate. The message of this exception is: std::bad_cast

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions