From 9044d3dfce7de28de6a996f22ffbe8ff69e236b7 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Thu, 5 Jul 2018 14:55:01 +0200 Subject: New DTMC structure --- Assignment2/report/library.bib | 2 +- Assignment2/src/DTMC.dcl | 23 ++++++++--------------- Assignment2/src/DTMC.icl | 32 ++++++++++++++++++++++---------- 3 files changed, 31 insertions(+), 26 deletions(-) (limited to 'Assignment2') diff --git a/Assignment2/report/library.bib b/Assignment2/report/library.bib index 36ef4c2..dab46d6 100644 --- a/Assignment2/report/library.bib +++ b/Assignment2/report/library.bib @@ -19,7 +19,7 @@ pages={326--340} } -@inbook{KY76, +@inbook{KnuthYao1976, author={Knuth, Donald E. and Yao, Andrew C.}, title={Algorithms and Complexity: New Directions and Recent Results}, chapter={The complexity of nonuniform random number generation}, diff --git a/Assignment2/src/DTMC.dcl b/Assignment2/src/DTMC.dcl index 9d3e999..a4cf524 100644 --- a/Assignment2/src/DTMC.dcl +++ b/Assignment2/src/DTMC.dcl @@ -1,25 +1,18 @@ definition module DTMC +from Data.Map import :: Map +from Data.Maybe import :: Maybe from System.FilePath import :: FilePath -:: DTMC = +:: *DTMC = { nr_states :: !Int - , states :: !{State} + , states :: !*{Maybe State} } :: State = - { actions :: ![Action] - , init :: !Bool + { state_id :: !Int + , transitions :: !Map Int String + , init :: !Bool } -:: Action = - { action_id :: !Int - , transitions :: ![Transition] - } - -:: Transition = - { to_state :: !Int - , probability :: !String - } - -parseDTMC :: !FilePath !*World -> *(!DTMC, !*World) +parseDTMC :: !FilePath !*World -> *(!*DTMC, !*World) diff --git a/Assignment2/src/DTMC.icl b/Assignment2/src/DTMC.icl index 7c712e0..3b8b2a7 100644 --- a/Assignment2/src/DTMC.icl +++ b/Assignment2/src/DTMC.icl @@ -1,14 +1,21 @@ implementation module DTMC import StdArray +import StdBool import StdClass import StdFile +from StdFunc import o import StdInt import StdList import StdString +import StdTuple import Data.Error -from Data.Func import $ +from Data.Func import $, seqSt +import Data.List +import qualified Data.Map as M +from Data.Map import :: Map +import Data.Maybe import System.File import System.FilePath import Text @@ -24,24 +31,25 @@ parseDTMCFromLines lines # states = map parseState $ groupLines "\t" [] lines = { nr_states = toInt nr_states - , states = {s \\ s <- states} + , states = {Just s \\ s <- states} } where parseState :: ![String] -> State parseState [head:actions] = - { actions = map parseAction $ groupLines "\t\t" [] actions - , init = endsWith "init" head + { state_id = toInt $ trim $ head % (5,size head-1) + , transitions = 'M'.unions $ map (snd o parseAction) $ groupLines "\t\t" [] actions + , init = endsWith "init" head } where - parseAction :: ![String] -> Action + parseAction :: ![String] -> (!Int, !Map Int String) parseAction [head:transitions] = - { action_id = toInt (head % (8, size head-1)) - , transitions = map parseTransition transitions - } + ( toInt (head % (8, size head-1)) + , 'M'.fromList $ map parseTransition transitions + ) where - parseTransition :: !String -> Transition + parseTransition :: !String -> (!Int, !String) parseTransition s = case split " : " (trim s) of - [id:prob:_] -> {to_state=toInt id, probability=prob} + [id:prob:_] -> (toInt id, prob) groupLines :: !String ![String] ![String] -> [[String]] groupLines head current [] = [reverse current] @@ -49,3 +57,7 @@ where | startsWith head line = groupLines head [line:current] lines | isEmpty current = groupLines head [line] lines | otherwise = [reverse current:groupLines head [line] lines] + +Start w +# (dtmc,w) = parseDTMC "die.drn" w += stateElimination dtmc -- cgit v1.2.3