{-# LANGUAGE OverloadedStrings, RecordWildCards #-}
import System.Environment
import System.Directory
import Data.Graph.Generators(GraphInfo(..))
import Data.Graph.Generators.Random.ErdosRenyi(erdosRenyiGraph)
import Data.Graph.Generators.Random.WattsStrogatz(wattsStrogatzGraph)
import Data.Graph.Generators.Random.BarabasiAlbert(barabasiAlbertGraph)
import System.Random.MWC(createSystemRandom)
import System.IO
d = 20
n = 1000
p = toDbl d / toDbl n
b = 0.28
m0 = 10
toDbl = fromInteger.toInteger
sampleDir = "dist/build/samples"
writeGraph :: FilePath -> GraphInfo -> IO ()
writeGraph path (GraphInfo{..}) =
withFile path WriteMode
(\handle -> do
hPutStrLn handle "strict graph {"
mapM (hPutStrLn handle) [ (show x) ++ " -- " ++ (show y)
| (x, y) <- edges ]
hPutStrLn handle "}"
)
main :: IO ()
main = do
args <- getArgs
gen <- createSystemRandom
eG <- erdosRenyiGraph gen n p
wG <- wattsStrogatzGraph gen n d b
bG <- barabasiAlbertGraph gen n d
createDirectoryIfMissing True "dist/build/samples"
writeGraph (sampleDir ++ "/ErdosRenyiGraph.dot") eG
writeGraph (sampleDir ++ "/WattsStrogatz.dot") wG
writeGraph (sampleDir ++ "/BarabasiAlbertGraph.dot") bG
putStrLn "Sample DOT files have been generated in ./dist/build/samples"