You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
255 lines
12 KiB
255 lines
12 KiB
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
"http://www.w3.org/TR/html4/loose.dtd">
|
|
|
|
<html>
|
|
<head>
|
|
|
|
<title>
|
|
PRISM Manual | ThePRISMLanguage / CostsAndRewards
|
|
</title>
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<meta name="keywords" content="prism, probabilistic, symbolic, model, checker, verification, birmingham, oxford, parker, norman, kwiatkowska">
|
|
|
|
<link rel="icon" href="../pub/skins/offline/images/p16.ico" type="image/x-icon">
|
|
<link rel="shortcut icon" href="../pub/skins/offline/images/p16.ico" type="image/x-icon">
|
|
|
|
<!--HTMLHeader--><style type='text/css'><!--
|
|
ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }
|
|
code.escaped { white-space: nowrap; }
|
|
.vspace { margin-top:1.33em; }
|
|
.indent { margin-left:40px; }
|
|
.outdent { margin-left:40px; text-indent:-40px; }
|
|
a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }
|
|
a.createlink { text-decoration:none; position:relative; top:-0.5em;
|
|
font-weight:bold; font-size:smaller; border-bottom:none; }
|
|
img { border:0px; }
|
|
.editconflict { color:green;
|
|
font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }
|
|
|
|
table.markup { border:2px dotted #ccf; width:90%; }
|
|
td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }
|
|
table.vert td.markup1 { border-bottom:1px solid #ccf; }
|
|
table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }
|
|
table.markup caption { text-align:left; }
|
|
div.faq p, div.faq pre { margin-left:2em; }
|
|
div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }
|
|
div.faqtoc div.faq * { display:none; }
|
|
div.faqtoc div.faq p.question
|
|
{ display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }
|
|
div.faqtoc div.faq p.question * { display:inline; }
|
|
|
|
.frame
|
|
{ border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }
|
|
.lfloat { float:left; margin-right:0.5em; }
|
|
.rfloat { float:right; margin-left:0.5em; }
|
|
a.varlink { text-decoration:none; }
|
|
|
|
.sourceblocklink {
|
|
text-align: right;
|
|
font-size: smaller;
|
|
}
|
|
.sourceblocktext {
|
|
padding: 0.5em;
|
|
border: 1px solid #808080;
|
|
color: #000000;
|
|
background-color: #f1f0ed;
|
|
}
|
|
.sourceblocktext div {
|
|
font-family: monospace;
|
|
font-size: small;
|
|
line-height: 1;
|
|
height: 1%;
|
|
}
|
|
.sourceblocktext div.head,
|
|
.sourceblocktext div.foot {
|
|
font: italic medium serif;
|
|
padding: 0.5em;
|
|
}
|
|
|
|
--></style> <meta name='robots' content='index,follow' />
|
|
|
|
|
|
<link type="text/css" rel="stylesheet" href="../pub/skins/offline/css/base.css">
|
|
<link type="text/css" rel="stylesheet" href="../pub/skins/offline/css/prism.css">
|
|
<link type="text/css" rel="stylesheet" href="../pub/skins/offline/css/prismmanual.css">
|
|
|
|
</head>
|
|
|
|
<body text="#000000" bgcolor="#ffffff">
|
|
|
|
<div id="layout-maincontainer">
|
|
<div id="layout-main">
|
|
|
|
<div id="prism-mainbox">
|
|
|
|
<!-- ============================================================================= -->
|
|
|
|
<!--PageHeaderFmt-->
|
|
<!--/PageHeaderFmt-->
|
|
|
|
<!--PageTitleFmt-->
|
|
<div id="prism-man-title">
|
|
<p><a class='wikilink' href='Main.html'>The PRISM Language</a> /
|
|
</p><h1>Costs And Rewards</h1>
|
|
|
|
</div>
|
|
<!--PageText-->
|
|
<div id='wikitext'>
|
|
<p>PRISM supports the specification and analysis of
|
|
properties based on <em>costs</em> and <em>rewards</em>.
|
|
This means that it can be used to reason,
|
|
not just about the probability that a model behaves in a certain fashion,
|
|
but about a wider range of quantitative measures relating to model behaviour.
|
|
For example, PRISM can be used to compute properties such as
|
|
"expected time", "expected number of lost messages" or "expected power consumption".
|
|
The implementation of cost- and reward-based techniques in the tool is only partially completed and is still ongoing.
|
|
If you have questions, comments or feature-requests relating to this functionality,
|
|
please feel free to contact the PRISM team about this.
|
|
</p>
|
|
<p class='vspace'>The basic idea is that probabilistic models (of all three types) developed in PRISM
|
|
can be augmented with costs or rewards: real values associated with certain states or transitions of the model.
|
|
In fact, since there is no practical distinction between costs and rewards
|
|
(except that costs are generally perceived to be "bad" and rewards to be "good"),
|
|
PRISM only supports rewards.
|
|
The user is, however, free to interpret the values however they choose.
|
|
</p>
|
|
<p class='vspace'>In this section, we describe how models described in the PRISM language
|
|
can be augmented with rewards.
|
|
Later, we will discuss how to express properties that relate to these rewards.
|
|
Rewards are associated with models using <code><strong>rewards</strong> ... <strong>endrewards</strong></code> constructs,
|
|
which can appear anywhere in a model file except within a module definition.
|
|
These constructs contains one or more <em>reward items</em>.
|
|
Consider the following simple example:
|
|
</p>
|
|
<div class='vspace'></div>
|
|
<div class='sourceblock ' id='sourceblock1'>
|
|
<div class='sourceblocktext'><div class="prism"><span class="prismkeyword">rewards</span><br/>
|
|
<span class="prismkeyword">true</span> : <span class="prismnum">1</span>;<br/>
|
|
<span class="prismkeyword">endrewards</span><br/>
|
|
</div></div>
|
|
<div class='sourceblocklink'><a href='http://www.prismmodelchecker.org/manual/ThePRISMLanguage/CostsAndRewards?action=sourceblock&num=1' type='text/plain'>[$[Get Code]]</a></div>
|
|
</div>
|
|
|
|
<p class='vspace'>This assigns a reward of 1 to every state of the model.
|
|
It comprises a single reward item, the left part of which (<code><strong>true</strong></code>) is a guard
|
|
and the right part of which (<code>1</code>) is a reward.
|
|
States of the model which satisfy the predicate in the guard are assigned the corresponding reward.
|
|
More generally, state rewards can be specified using multiple reward items,
|
|
each of the form <code>guard : reward;</code>,
|
|
where <code>guard</code>is a predicate (over all the variables of the model)
|
|
and <code>reward</code> is an expression (containing any variables, constants, etc. from the model).
|
|
For example:
|
|
</p>
|
|
<div class='vspace'></div>
|
|
<div class='sourceblock ' id='sourceblock2'>
|
|
<div class='sourceblocktext'><div class="prism"><span class="prismkeyword">rewards</span><br/>
|
|
<span class="prismident">x</span>=<span class="prismnum">0</span> : <span class="prismnum">100</span>;<br/>
|
|
<span class="prismident">x</span>><span class="prismnum">0</span> & <span class="prismident">x</span><<span class="prismnum">10</span> : <span class="prismnum">2</span>*<span class="prismident">x</span>;<br/>
|
|
<span class="prismident">x</span>=<span class="prismnum">10</span> : <span class="prismnum">100</span>;<br/>
|
|
<span class="prismkeyword">endrewards</span><br/>
|
|
</div></div>
|
|
<div class='sourceblocklink'><a href='http://www.prismmodelchecker.org/manual/ThePRISMLanguage/CostsAndRewards?action=sourceblock&num=2' type='text/plain'>[$[Get Code]]</a></div>
|
|
</div>
|
|
|
|
<p class='vspace'>assigns a reward of 100 to states satisfying <code>x=0</code> or <code>x=10</code>
|
|
and a reward of <code>2*x</code> to states satisfying <code>x>0 & x<10</code>.
|
|
Note that a single reward item can assign different rewards to different states,
|
|
depending on the values of model variables in each one.
|
|
Any states which do not satisfy the guard of any reward item will have no reward assigned to them.
|
|
For states which satisfy multiple guards, the reward assigned to the state
|
|
is the sum of the rewards for all the corresponding reward items.
|
|
</p>
|
|
<p class='vspace'>Rewards can also be assigned to transitions of a model.
|
|
These are specified in a similar fashion to state rewards,
|
|
within the <code><strong>rewards</strong> ... <strong>endrewards</strong></code> construct.
|
|
Reward items describing transition rewards are of the form <code>[action] guard : reward;</code>,
|
|
the interpretation being that transitions from states which satisfy the guard <code>guard</code>
|
|
and are labelled with the action <code>action</code> acquire the reward <code>reward</code>.
|
|
For example:
|
|
</p>
|
|
<div class='vspace'></div>
|
|
<div class='sourceblock ' id='sourceblock3'>
|
|
<div class='sourceblocktext'><div class="prism"><span class="prismkeyword">rewards</span><br/>
|
|
[] <span class="prismkeyword">true</span> : <span class="prismnum">1</span>;<br/>
|
|
[<span class="prismident">a</span>] <span class="prismkeyword">true</span> : <span class="prismident">x</span>;<br/>
|
|
[<span class="prismident">b</span>] <span class="prismkeyword">true</span> : <span class="prismnum">2</span>*<span class="prismident">x</span>;<br/>
|
|
<span class="prismkeyword">endrewards</span><br/>
|
|
</div></div>
|
|
<div class='sourceblocklink'><a href='http://www.prismmodelchecker.org/manual/ThePRISMLanguage/CostsAndRewards?action=sourceblock&num=3' type='text/plain'>[$[Get Code]]</a></div>
|
|
</div>
|
|
|
|
<p class='vspace'>assigns a reward of 1 to all transitions in the model with no action label,
|
|
and rewards of <code>x</code> and <code>2*x</code> to all transitions labelled with actions <code>a</code> and <code>b</code>, respectively.
|
|
</p>
|
|
<p class='vspace'>As is the case for states, multiple reward items can specify rewards for a single transition,
|
|
in which case the resulting reward is the sum of all the individual rewards.
|
|
A model description can specify rewards for both states and transitions.
|
|
These are all placed together in a single <code><strong>rewards</strong>...<strong>endrewards</strong></code> construct.
|
|
</p>
|
|
<p class='vspace'>A PRISM model can have multiple reward structures. Optionally, these can be given labels such as in the following example:
|
|
</p>
|
|
<div class='vspace'></div>
|
|
<div class='sourceblock ' id='sourceblock4'>
|
|
<div class='sourceblocktext'><div class="prism"><span class="prismkeyword">rewards</span> "<span class="prismident">total_time</span>"<br/>
|
|
<span class="prismkeyword">true</span> : <span class="prismnum">1</span>;<br/>
|
|
<span class="prismkeyword">endrewards</span><br/>
|
|
<br/>
|
|
<span class="prismkeyword">rewards</span> "<span class="prismident">num_failures</span>"<br/>
|
|
[<span class="prismident">fail</span>] <span class="prismkeyword">true</span> : <span class="prismnum">1</span>;<br/>
|
|
<span class="prismkeyword">endrewards</span><br/>
|
|
</div></div>
|
|
<div class='sourceblocklink'><a href='http://www.prismmodelchecker.org/manual/ThePRISMLanguage/CostsAndRewards?action=sourceblock&num=4' type='text/plain'>[$[Get Code]]</a></div>
|
|
</div>
|
|
|
|
<div class='vspace'></div>
|
|
</div>
|
|
|
|
|
|
<!--PageFooterFmt-->
|
|
<div id='prism-man-footer'>
|
|
</div>
|
|
<!--/PageFooterFmt-->
|
|
|
|
|
|
<!-- ============================================================================= -->
|
|
|
|
</div> <!-- id="prism-mainbox" -->
|
|
|
|
</div> <!-- id="layout-main" -->
|
|
</div> <!-- id="layout-maincontainer" -->
|
|
|
|
<div id="layout-leftcol">
|
|
<div id="prism-navbar2">
|
|
|
|
<h3><a class='wikilink' href='../Main/Main.html'>PRISM Manual</a></h3>
|
|
<p><strong><a class='wikilink' href='Main.html'>The PRISM Language</a></strong>
|
|
</p><ul><li><a class='wikilink' href='Main.html'>Introduction</a>
|
|
</li><li><a class='wikilink' href='Example1.html'>Example 1</a>
|
|
</li><li><a class='wikilink' href='ModelType.html'>Model Type</a>
|
|
</li><li><a class='wikilink' href='ModulesAndVariables.html'>Modules And Variables</a>
|
|
</li><li><a class='wikilink' href='Commands.html'>Commands</a>
|
|
</li><li><a class='wikilink' href='ParallelComposition.html'>Parallel Composition</a>
|
|
</li><li><a class='wikilink' href='LocalNondeterminism.html'>Local Nondeterminism</a>
|
|
</li><li><a class='wikilink' href='CTMCs.html'>CTMCs</a>
|
|
</li><li><a class='wikilink' href='Example2.html'>Example 2</a>
|
|
</li><li><a class='wikilink' href='Constants.html'>Constants</a>
|
|
</li><li><a class='wikilink' href='Expressions.html'>Expressions</a>
|
|
</li><li><a class='wikilink' href='Synchronisation.html'>Synchronisation</a>
|
|
</li><li><a class='wikilink' href='ModuleRenaming.html'>Module Renaming</a>
|
|
</li><li><a class='wikilink' href='MultipleInitialStates.html'>Multiple Initial States</a>
|
|
</li><li><a class='wikilink' href='GlobalVariables.html'>Global Variables</a>
|
|
</li><li><a class='wikilink' href='FormulasAndLabels.html'>Formulas And Labels</a>
|
|
</li><li><a class='wikilink' href='PTAs.html'>PTAs</a>
|
|
</li><li><a class='selflink' href='CostsAndRewards.html'>Costs And Rewards</a>
|
|
</li><li><a class='wikilink' href='ProcessAlgebraOperators.html'>Process Algebra Operators</a>
|
|
</li><li><a class='wikilink' href='PRISMModelFiles.html'>PRISM Model Files</a>
|
|
</li></ul><p>[ <a class='wikilink' href='AllOnOnePage.html'>View all</a> ]
|
|
</p>
|
|
|
|
|
|
</div> <!-- id="prism-navbar2" -->
|
|
</div> <!-- id="layout-leftcol" -->
|
|
|
|
</body>
|
|
</html>
|