Update Parallel.hs

This commit is contained in:
BergesJ 2017-07-12 12:06:22 +02:00 committed by GitHub
parent dca18e4009
commit 60a2b7973f

View File

@ -7,31 +7,31 @@ import Control.Parallel.Strategies
import Control.DeepSeq import Control.DeepSeq
import KomplizierteFunktion import KomplizierteFunktion
-- Sie sollen Minima einer komplizierten Funktion finden. Die Funktion erlaubt keine analytische Berechnung
-- der Maxima. Daher sollen Sie im Intervall [-10,10] für alle Parameter x y z w approximativ Maxima suchen.
-- komplizierteFunktion :: Double -> Double -> Double -> Double -> Double
berechnungMitEingabe :: Double -> Double -> Double -> Double -> ((Double,Double,Double,Double),Double) berechnungMitEingabe :: Double -> Double -> Double -> Double -> ((Double,Double,Double,Double),Double)
berechnungMitEingabe x y z w = ((x,y,z,w),komplizierteFunktion x y z w) berechnungMitEingabe x y z w = ((x,y,z,w),komplizierteFunktion x y z w)
-- Parallelisieren Sie nBesteEingaben mit drei verschiedenen Strategien für Listen bzw. Lazy Listen
nBesteEingaben :: Int -> Double -> [((Double,Double,Double,Double),Double)] nBesteEingaben :: Int -> Double -> [((Double,Double,Double,Double),Double)]
nBesteEingaben n d = take n $ sortOn (negate.snd) $ berechnungMitEingabe <$> range <*> range <*> range <*> range nBesteEingaben n d = take n $ sortOn (negate.snd) berechnungen
where range = [(-10),(-(10-d))..10] where
berechnungen = berechnungMitEingabe <$> range <*> range <*> range <*> range
range = [(-10),(-(10-d))..10]
-- 3 x dieselbe implementation -> versuchen sie 3 verschiedene Strategien der Parallelisierung -- TODO: IMPLEMENTIEREN
nBesteEingabenPar1 :: Int -> Double -> [((Double,Double,Double,Double),Double)] nBesteEingabenPar1 :: Int -> Double -> [((Double,Double,Double,Double),Double)]
nBesteEingabenPar1 n d = take n $ sortOn (negate.snd) berechnungen nBesteEingabenPar1 n d = take n $ sortOn (negate.snd) berechnungen
where where
berechnungen = berechnungMitEingabe <$> range <*> range <*> range <*> range berechnungen = berechnungMitEingabe <$> range <*> range <*> range <*> range
range = [(-10),(-(10-d))..10] range = [(-10),(-(10-d))..10]
-- TODO: IMPLEMENTIEREN
nBesteEingabenPar2 :: Int -> Double -> [((Double,Double,Double,Double),Double)] nBesteEingabenPar2 :: Int -> Double -> [((Double,Double,Double,Double),Double)]
nBesteEingabenPar2 n d = take n $ sortOn (negate.snd) berechnungen nBesteEingabenPar2 n d = take n $ sortOn (negate.snd) berechnungen
where where
berechnungen = berechnungMitEingabe <$> range <*> range <*> range <*> range berechnungen = berechnungMitEingabe <$> range <*> range <*> range <*> range
range = [(-10),(-(10-d))..10] range = [(-10),(-(10-d))..10]
-- TODO: IMPLEMENTIEREN
nBesteEingabenPar3 :: Int -> Double -> [((Double,Double,Double,Double),Double)] nBesteEingabenPar3 :: Int -> Double -> [((Double,Double,Double,Double),Double)]
nBesteEingabenPar3 n d = take n $ sortOn (negate.snd) berechnungen nBesteEingabenPar3 n d = take n $ sortOn (negate.snd) berechnungen
where where