summaryrefslogtreecommitdiff
path: root/Assignment2
diff options
context:
space:
mode:
authorCamil Staps2018-07-06 11:32:35 +0200
committerCamil Staps2018-07-06 11:32:35 +0200
commit33fa083d6aae58370d377aa60d1c99223d303f5e (patch)
tree1268f42a4b2b9a681e0ee81e4c7733561492d9b8 /Assignment2
parentThis is so ugly (diff)
Collect parameters
Diffstat (limited to 'Assignment2')
-rw-r--r--Assignment2/src/DTMC.dcl7
-rw-r--r--Assignment2/src/DTMC.icl54
2 files changed, 34 insertions, 27 deletions
diff --git a/Assignment2/src/DTMC.dcl b/Assignment2/src/DTMC.dcl
index 26cbe19..c087860 100644
--- a/Assignment2/src/DTMC.dcl
+++ b/Assignment2/src/DTMC.dcl
@@ -5,8 +5,9 @@ from Data.Maybe import :: Maybe
from System.FilePath import :: FilePath
:: *DTMC =
- { nr_states :: !Int
- , states :: !*{Maybe State}
+ { nr_states :: !Int
+ , parameters :: ![String]
+ , states :: !*{Maybe State}
}
:: State =
@@ -18,4 +19,4 @@ from System.FilePath import :: FilePath
stateElimination :: !*DTMC -> *DTMC
parseDTMC :: !FilePath !*World -> *(!*DTMC, !*World)
printDTMC :: !*DTMC -> *(!String, !*DTMC)
-addVars :: *DTMC -> *DTMC
+addVars :: !*DTMC -> *DTMC
diff --git a/Assignment2/src/DTMC.icl b/Assignment2/src/DTMC.icl
index 1d9bafd..d555782 100644
--- a/Assignment2/src/DTMC.icl
+++ b/Assignment2/src/DTMC.icl
@@ -137,8 +137,9 @@ parseDTMCFromLines lines
# [nr_states:_:lines] = tl $ dropWhile ((<>) "@nr_states") lines
# states = map parseState $ groupLines "\t" [] lines
=
- { nr_states = toInt nr_states
- , states = {Just s \\ s <- states}
+ { nr_states = toInt nr_states
+ , parameters = []
+ , states = {Just s \\ s <- states}
}
where
parseState :: ![String] -> State
@@ -166,12 +167,13 @@ where
| otherwise = [reverse current:groupLines head [line] lines]
printDTMC :: !*DTMC -> *(!String, !*DTMC)
-printDTMC dtmc=:{nr_states,states}
+printDTMC dtmc=:{nr_states,parameters,states}
# (state_strings,states) = printStates 0 states
-# s = join "\n"
+# s = join "\n" $
[ "@type: DTMC"
- , "@parameters\n"
- , "@reward_models\n"
+ , "@parameters"
+ ] ++ if (isEmpty parameters) [""] parameters ++
+ [ "@reward_models\n"
, "@nr_states"
, toString nr_states
, "@model"
@@ -193,25 +195,29 @@ where
# (reprs,ss) = printStates (i+1) ss
= (repr ++ reprs,ss)
-addVars :: *DTMC -> *DTMC
-addVars dtmc = {DTMC | nr_states = dtmc.nr_states, states = addVarsS 0 dtmc.nr_states dtmc.states}
+addVars :: !*DTMC -> *DTMC
+addVars dtmc=:{nr_states} = addVarsS (nr_states-1) dtmc
where
- addVarsS :: !Int !Int !*{Maybe State} -> *{Maybe State}
- addVarsS fi m ss
- | fi >= m = ss
- | otherwise = addVarsS (fi + 1) m (addVarsT fi 0 m ss)
-
- addVarsT :: !Int !Int !Int !*{Maybe State} -> *{Maybe State}
- addVarsT fi ti m ss
- | ti >= m = ss
- # (s, ss) = ss![fi]
- = case s of
- Nothing -> ss
- (Just s) -> addVarsT fi (ti + 1) m {ss & [fi] = Just {s & transitions = alter (addVar fi ti) ti s.transitions}}
-
- addVar :: Int Int (Maybe String) -> Maybe String
- addVar _ _ Nothing = Nothing
- addVar f t (Just fn) = Just ("((" <+ fn <+ ") + v" <+ f <+ "_" <+ t <+ ")")
+ addVarsS :: !Int !*DTMC -> *DTMC
+ addVarsS i dtmc=:{states}
+ | i < 0 = dtmc
+ # (s,states) = states![i]
+ # dtmc & states = states
+ | isNothing s = dtmc
+ # s = fromJust s
+ # dtmc = seqSt (uncurry $ addVar i) ('M'.toList s.transitions) dtmc
+ = addVarsS (i-1) dtmc
+
+ addVar :: !Int !Int !String !*DTMC -> *DTMC
+ addVar f t prob dtmc=:{parameters}
+ # (s,dtmc) = dtmc!states.[f]
+ # s = fromJust s
+ # s & transitions = 'M'.put t ("((" <+ prob <+ ") + " <+ var <+ ")") s.transitions
+ # dtmc & states.[f] = Just s
+ # dtmc & parameters = [var:parameters]
+ = dtmc
+ where
+ var = "v" <+ f <+ "_" <+ t
Start w
# ([prog:args],w) = getCommandLine w