packages feed

NearContextAlgebra-0.1.0.1: src/NearConcept.hs

{-# LANGUAGE FlexibleContexts      #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeSynonymInstances  #-}
{-|
Module      : NearConcept
Description : declaring all functions
License     : GPL-3
Maintainer  : hahn@geoinfo.tuwien.ac.at
Stability   : Declares

define most functions and frequency values
-}
module NearConcept (near, ctxOne, ctxWalking, ctxDriving, ctxUphill
                 , ctxWalkingDriving, ctxWalkingUphill, ctxDrivingUphill
                 , ctxWalkingDrivingUphill, ctxZero) where

import           ConceptModel
import           ContextLattice
import           NearContext
import           NearExemplar

import           Algebra.Lattice
import qualified Data.MultiSet   as Mset
import           Test.QuickCheck

-- | instance declaration for the near context
instance ConceptContextModel NearContext NearExemplar

-- * frequencies for contexts and exemplars
-- | list of observation frequencies for a particular context, the order equals the order of the exemplars
--
-- >>> zipWith (\exe frq-> (exe,frq)) exemplars frqWalking
-- [(50 m,0),(100 m,2),(150 m,4),(300 m,6),(450 m,6),(1000 m,4),(5000 m,1),(10000 m,0)]
frqWalking= [0,2,4,6,6,4,1,0]
frqUphill= [0,2,3,0,0,1,1,0]
frqDriving= [0,1,3,1,1,2,2,2]
frqWalkingUphill= [4,3,2,1,0,0,0,0]
frqDrivingUphill= [0,2,1,5,6,7,8,5]
frqWalkingDriving= [0,0,0,0,0,0,0,0]
frqWalkingDrivingUphill= [0,0,0,0,0,0,0,0]

-- * wrap the basic types into the context type
-- | context type for walking
--
-- >>> ctxWalking
-- Ctx [Walking]
ctxWalking = Ctx [Walking]
ctxDriving = Ctx [Driving]
ctxUphill = Ctx [Uphill]

-- | example of an combined context of walking and uphill
--
-- >>> ctxWalkingUphill
-- Ctx [Walking, Uphill]
ctxWalkingUphill = Ctx [Walking, Uphill]
ctxDrivingUphill =   Ctx [Driving, Uphill]
ctxWalkingDriving =  Ctx [Walking, Driving]
ctxWalkingDrivingUphill =  Ctx [Walking,Driving,Uphill]

-- | top element of the lattice, equals the One context
--
-- >>> ctxOne
-- One [Ctx [Walking],Ctx [Driving],Ctx [Walking,Driving],Ctx [Uphill],Ctx [Walking,Uphill],Ctx [Driving,Uphill],Ctx [Walking,Driving,Uphill]]
ctxOne = top :: NearContextLattice

-- | bottom element of the lattice, equals the Zero context
--
-- >>> ctxZero
-- Zero
ctxZero = Zero :: NearContextLattice


-- | produce a generator for the input contexts, this values are used by quickCheck
instance Arbitrary (Context NearContext) where
  -- | represents a list of all possible contexts
  arbitrary = elements [ ctxOne, ctxWalking, ctxDriving, ctxUphill
                 , ctxWalkingDriving, ctxWalkingUphill, ctxDrivingUphill
                 , ctxWalkingDrivingUphill, ctxZero]


-- * initialization of experiences
-- | creates a multiset including all exemplars and frequency values for the context walking
--
-- >>>  printExperiences walkingExperiences
-- (6*)Exp (Ctx [Walking]) 450 m
-- |
-- +--(4*)Exp (Ctx [Walking]) 150 m
-- |  |
-- |  +--(2*)Exp (Ctx [Walking]) 100 m
-- |  |
-- |  +--(6*)Exp (Ctx [Walking]) 300 m
-- |
-- +--(1*)Exp (Ctx [Walking]) 5000 m
--    |
--    +--(4*)Exp (Ctx [Walking]) 1000 m
--    |
-- +--|
expWalking = createConceptForContext ctxWalking exemplars frqWalking

-- | creates the multiset for the context uphill
--
-- >>> printExperiences expUphill
-- (3*)Exp (Ctx [Uphill]) 150 m
-- |
-- +--(2*)Exp (Ctx [Uphill]) 100 m
-- |
-- +--(1*)Exp (Ctx [Uphill]) 5000 m
--    |
--    +--(1*)Exp (Ctx [Uphill]) 1000 m
--    |
--    +--|
expUphill = createConceptForContext ctxUphill exemplars frqUphill

-- | creates the multiset for the context driving
--
-- >>> printExperiences expDriving
-- (1*)Exp (Ctx [Driving]) 450 m
-- |
-- +--(3*)Exp (Ctx [Driving]) 150 m
-- |  |
-- |  +--(1*)Exp (Ctx [Driving]) 100 m
-- |  |
-- |  +--(1*)Exp (Ctx [Driving]) 300 m
-- |
-- +--(2*)Exp (Ctx [Driving]) 5000 m
--    |
--    +--(2*)Exp (Ctx [Driving]) 1000 m
--    |
--    +--(2*)Exp (Ctx [Driving]) 10000 m
expDriving = createConceptForContext ctxDriving exemplars frqDriving

expWalkingUphill = createConceptForContext ctxWalkingUphill exemplars frqWalkingUphill
expDrivingUphill = createConceptForContext ctxDrivingUphill exemplars frqDrivingUphill
expWalkingDriving = createConceptForContext ctxWalkingDriving exemplars frqWalkingDriving
expWalkingDrivingUphill= createConceptForContext ctxWalkingDrivingUphill exemplars frqWalkingDrivingUphill


-- | resulting multiset including all experiences for all contexts
--
-- >>> printExperiences allExperiences
-- (1*)Exp (Ctx [Driving]) 450 m
-- |
-- +--(6*)Exp (Ctx [Walking]) 450 m
-- |  |
-- |  +--(4*)Exp (Ctx [Walking]) 150 m
-- |  |  |
-- |  |  +--(2*)Exp (Ctx [Walking]) 100 m
-- |  |  |
-- |  |  +--(6*)Exp (Ctx [Walking]) 300 m
-- |  |
-- |  +--(1*)Exp (Ctx [Walking,Uphill]) 300 m
-- |     |
-- |     +--(1*)Exp (Ctx [Walking]) 5000 m
-- |     |  |
-- |     |  +--(4*)Exp (Ctx [Walking]) 1000 m
-- |     |  |
-- |     |  +--(3*)Exp (Ctx [Walking,Uphill]) 100 m
-- |     |     |
-- |     |     +--(4*)Exp (Ctx [Walking,Uphill]) 50 m
-- |     |     |
-- |     |     +--(2*)Exp (Ctx [Walking,Uphill]) 150 m
-- |     |
-- |     +--(3*)Exp (Ctx [Driving]) 150 m
-- |        |
-- |        +--(1*)Exp (Ctx [Driving]) 100 m
-- |        |
-- |        +--(1*)Exp (Ctx [Driving]) 300 m
-- |
-- +--(6*)Exp (Ctx [Driving,Uphill]) 450 m
--    |
--    +--(2*)Exp (Ctx [Driving,Uphill]) 100 m
--    |  |
--    |  +--(2*)Exp (Ctx [Driving]) 5000 m
--    |  |  |
--    |  |  +--(2*)Exp (Ctx [Driving]) 1000 m
--    |  |  |
--    |  |  +--(2*)Exp (Ctx [Driving]) 10000 m
--    |  |
--    |  +--(1*)Exp (Ctx [Driving,Uphill]) 150 m
--    |     |
--    |     +--|
--    |     |
--    |     +--(5*)Exp (Ctx [Driving,Uphill]) 300 m
--    |
--    +--(3*)Exp (Ctx [Uphill]) 150 m
--       |
--       +--(8*)Exp (Ctx [Driving,Uphill]) 5000 m
--       |  |
--       |  +--(7*)Exp (Ctx [Driving,Uphill]) 1000 m
--       |  |
--       |  +--(5*)Exp (Ctx [Driving,Uphill]) 10000 m
--       |     |
--       |     +--|
--       |     |
--       |     +--(2*)Exp (Ctx [Uphill]) 100 m
--       |
--    +--(1*)Exp (Ctx [Uphill]) 5000 m
--          |
--          +--(1*)Exp (Ctx [Uphill]) 1000 m
--          |
--          +--
near = unionsConceptsForDiffContexts [expWalking
                        ,expUphill
                        ,expDriving
                        ,expWalkingUphill
                        ,expDrivingUphill
                        ,expWalkingDriving
                        ,expWalkingDrivingUphill]