module BishBosh.Input.CriteriaWeights(
CriteriaWeights(
getWeightOfMaterial,
getWeightOfMobility,
getWeightOfPieceSquareValue,
getWeightOfCastlingPotential,
getWeightOfDefence,
getWeightOfDoubledPawns,
getWeightOfIsolatedPawns,
getWeightOfPassedPawns
),
tag,
weightOfMaterialTag,
weightOfPieceSquareValueTag,
onymousOperators,
calculateWeightedMean,
normalise,
perturbWeights,
mkCriteriaWeights
) where
import qualified BishBosh.Attribute.CriterionValue as Attribute.CriterionValue
import qualified BishBosh.Attribute.CriterionWeight as Attribute.CriterionWeight
import qualified BishBosh.Attribute.WeightedMeanAndCriterionValues as Attribute.WeightedMeanAndCriterionValues
import qualified BishBosh.Data.Exception as Data.Exception
import qualified BishBosh.Property.ShowFloat as Property.ShowFloat
import qualified BishBosh.Text.ShowList as Text.ShowList
import qualified BishBosh.Types as T
import qualified Control.Arrow
import qualified Control.DeepSeq
import qualified Control.Exception
import qualified Data.Default
import qualified System.Random
import qualified Text.XML.HXT.Arrow.Pickle as HXT
tag :: String
tag :: String
tag = String
"criteriaWeights"
weightOfMaterialTag :: String
weightOfMaterialTag :: String
weightOfMaterialTag = String
"material"
weightOfMobilityTag :: String
weightOfMobilityTag :: String
weightOfMobilityTag = String
"mobility"
weightOfPieceSquareValueTag :: String
weightOfPieceSquareValueTag :: String
weightOfPieceSquareValueTag = String
"pieceSquareValue"
weightOfCastlingPotentialTag :: String
weightOfCastlingPotentialTag :: String
weightOfCastlingPotentialTag = String
"castlingPotential"
weightOfDefenceTag :: String
weightOfDefenceTag :: String
weightOfDefenceTag = String
"defence"
weightOfDoubledPawnsTag :: String
weightOfDoubledPawnsTag :: String
weightOfDoubledPawnsTag = String
"doubledPawns"
weightOfIsolatedPawnsTag :: String
weightOfIsolatedPawnsTag :: String
weightOfIsolatedPawnsTag = String
"isolatedPawns"
weightOfPassedPawnsTag :: String
weightOfPassedPawnsTag :: String
weightOfPassedPawnsTag = String
"passedPawns"
data CriteriaWeights criterionWeight = MkCriteriaWeights {
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMaterial :: Attribute.CriterionWeight.CriterionWeight criterionWeight,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMobility :: Attribute.CriterionWeight.CriterionWeight criterionWeight,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPieceSquareValue :: Attribute.CriterionWeight.CriterionWeight criterionWeight,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfCastlingPotential :: Attribute.CriterionWeight.CriterionWeight criterionWeight,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDefence :: Attribute.CriterionWeight.CriterionWeight criterionWeight,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDoubledPawns :: Attribute.CriterionWeight.CriterionWeight criterionWeight,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfIsolatedPawns :: Attribute.CriterionWeight.CriterionWeight criterionWeight,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPassedPawns :: Attribute.CriterionWeight.CriterionWeight criterionWeight
} deriving (CriteriaWeights criterionWeight
-> CriteriaWeights criterionWeight -> Bool
(CriteriaWeights criterionWeight
-> CriteriaWeights criterionWeight -> Bool)
-> (CriteriaWeights criterionWeight
-> CriteriaWeights criterionWeight -> Bool)
-> Eq (CriteriaWeights criterionWeight)
forall criterionWeight.
Eq criterionWeight =>
CriteriaWeights criterionWeight
-> CriteriaWeights criterionWeight -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CriteriaWeights criterionWeight
-> CriteriaWeights criterionWeight -> Bool
$c/= :: forall criterionWeight.
Eq criterionWeight =>
CriteriaWeights criterionWeight
-> CriteriaWeights criterionWeight -> Bool
== :: CriteriaWeights criterionWeight
-> CriteriaWeights criterionWeight -> Bool
$c== :: forall criterionWeight.
Eq criterionWeight =>
CriteriaWeights criterionWeight
-> CriteriaWeights criterionWeight -> Bool
Eq, Int -> CriteriaWeights criterionWeight -> ShowS
[CriteriaWeights criterionWeight] -> ShowS
CriteriaWeights criterionWeight -> String
(Int -> CriteriaWeights criterionWeight -> ShowS)
-> (CriteriaWeights criterionWeight -> String)
-> ([CriteriaWeights criterionWeight] -> ShowS)
-> Show (CriteriaWeights criterionWeight)
forall criterionWeight.
Show criterionWeight =>
Int -> CriteriaWeights criterionWeight -> ShowS
forall criterionWeight.
Show criterionWeight =>
[CriteriaWeights criterionWeight] -> ShowS
forall criterionWeight.
Show criterionWeight =>
CriteriaWeights criterionWeight -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CriteriaWeights criterionWeight] -> ShowS
$cshowList :: forall criterionWeight.
Show criterionWeight =>
[CriteriaWeights criterionWeight] -> ShowS
show :: CriteriaWeights criterionWeight -> String
$cshow :: forall criterionWeight.
Show criterionWeight =>
CriteriaWeights criterionWeight -> String
showsPrec :: Int -> CriteriaWeights criterionWeight -> ShowS
$cshowsPrec :: forall criterionWeight.
Show criterionWeight =>
Int -> CriteriaWeights criterionWeight -> ShowS
Show)
mkCriteriaWeights
:: (Eq criterionWeight, Num criterionWeight)
=> Attribute.CriterionWeight.CriterionWeight criterionWeight
-> Attribute.CriterionWeight.CriterionWeight criterionWeight
-> Attribute.CriterionWeight.CriterionWeight criterionWeight
-> Attribute.CriterionWeight.CriterionWeight criterionWeight
-> Attribute.CriterionWeight.CriterionWeight criterionWeight
-> Attribute.CriterionWeight.CriterionWeight criterionWeight
-> Attribute.CriterionWeight.CriterionWeight criterionWeight
-> Attribute.CriterionWeight.CriterionWeight criterionWeight
-> CriteriaWeights criterionWeight
mkCriteriaWeights :: CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriteriaWeights criterionWeight
mkCriteriaWeights CriterionWeight criterionWeight
a CriterionWeight criterionWeight
b CriterionWeight criterionWeight
c CriterionWeight criterionWeight
d CriterionWeight criterionWeight
e CriterionWeight criterionWeight
f CriterionWeight criterionWeight
g CriterionWeight criterionWeight
h
| CriteriaWeights criterionWeight
criteriaWeights CriteriaWeights criterionWeight
-> CriteriaWeights criterionWeight -> Bool
forall a. Eq a => a -> a -> Bool
== CriteriaWeights criterionWeight
forall a. Bounded a => a
minBound = Exception -> CriteriaWeights criterionWeight
forall a e. Exception e => e -> a
Control.Exception.throw (Exception -> CriteriaWeights criterionWeight)
-> Exception -> CriteriaWeights criterionWeight
forall a b. (a -> b) -> a -> b
$ String -> Exception
Data.Exception.mkInvalidDatum String
"BishBosh.Input.CriteriaWeights.mkCriteriaWeights:\tall weights are zero."
| Bool
otherwise = CriteriaWeights criterionWeight
criteriaWeights
where
criteriaWeights :: CriteriaWeights criterionWeight
criteriaWeights = CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriteriaWeights criterionWeight
forall criterionWeight.
CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriteriaWeights criterionWeight
MkCriteriaWeights CriterionWeight criterionWeight
a CriterionWeight criterionWeight
b CriterionWeight criterionWeight
c CriterionWeight criterionWeight
d CriterionWeight criterionWeight
e CriterionWeight criterionWeight
f CriterionWeight criterionWeight
g CriterionWeight criterionWeight
h
instance Real criterionWeight => Property.ShowFloat.ShowFloat (CriteriaWeights criterionWeight) where
showsFloat :: (Double -> ShowS) -> CriteriaWeights criterionWeight -> ShowS
showsFloat Double -> ShowS
fromDouble MkCriteriaWeights {
getWeightOfMaterial :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMaterial = CriterionWeight criterionWeight
weightOfMaterial,
getWeightOfMobility :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMobility = CriterionWeight criterionWeight
weightOfMobility,
getWeightOfPieceSquareValue :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPieceSquareValue = CriterionWeight criterionWeight
weightOfPieceSquareValue,
getWeightOfCastlingPotential :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfCastlingPotential = CriterionWeight criterionWeight
weightOfCastlingPotential,
getWeightOfDefence :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDefence = CriterionWeight criterionWeight
weightOfDefence,
getWeightOfDoubledPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDoubledPawns = CriterionWeight criterionWeight
weightOfDoubledPawns,
getWeightOfIsolatedPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfIsolatedPawns = CriterionWeight criterionWeight
weightOfIsolatedPawns,
getWeightOfPassedPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPassedPawns = CriterionWeight criterionWeight
weightOfPassedPawns
} = [(String, ShowS)] -> ShowS
Text.ShowList.showsAssociationList' ([(String, ShowS)] -> ShowS) -> [(String, ShowS)] -> ShowS
forall a b. (a -> b) -> a -> b
$ ((String, CriterionWeight criterionWeight) -> (String, ShowS))
-> [(String, CriterionWeight criterionWeight)] -> [(String, ShowS)]
forall a b. (a -> b) -> [a] -> [b]
map (
(CriterionWeight criterionWeight -> ShowS)
-> (String, CriterionWeight criterionWeight) -> (String, ShowS)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (d, b) (d, c)
Control.Arrow.second ((CriterionWeight criterionWeight -> ShowS)
-> (String, CriterionWeight criterionWeight) -> (String, ShowS))
-> (CriterionWeight criterionWeight -> ShowS)
-> (String, CriterionWeight criterionWeight)
-> (String, ShowS)
forall a b. (a -> b) -> a -> b
$ Double -> ShowS
fromDouble (Double -> ShowS)
-> (CriterionWeight criterionWeight -> Double)
-> CriterionWeight criterionWeight
-> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. criterionWeight -> Double
forall a b. (Real a, Fractional b) => a -> b
realToFrac (criterionWeight -> Double)
-> (CriterionWeight criterionWeight -> criterionWeight)
-> CriterionWeight criterionWeight
-> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CriterionWeight criterionWeight -> criterionWeight
forall criterionWeight.
CriterionWeight criterionWeight -> criterionWeight
Attribute.CriterionWeight.deconstruct
) [
(
String
weightOfMaterialTag, CriterionWeight criterionWeight
weightOfMaterial
), (
String
weightOfMobilityTag, CriterionWeight criterionWeight
weightOfMobility
), (
String
weightOfPieceSquareValueTag, CriterionWeight criterionWeight
weightOfPieceSquareValue
), (
String
weightOfCastlingPotentialTag, CriterionWeight criterionWeight
weightOfCastlingPotential
), (
String
weightOfDefenceTag, CriterionWeight criterionWeight
weightOfDefence
), (
String
weightOfDoubledPawnsTag, CriterionWeight criterionWeight
weightOfDoubledPawns
), (
String
weightOfIsolatedPawnsTag, CriterionWeight criterionWeight
weightOfIsolatedPawns
), (
String
weightOfPassedPawnsTag, CriterionWeight criterionWeight
weightOfPassedPawns
)
]
instance Num criterionWeight => Data.Default.Default (CriteriaWeights criterionWeight) where
def :: CriteriaWeights criterionWeight
def = MkCriteriaWeights :: forall criterionWeight.
CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriteriaWeights criterionWeight
MkCriteriaWeights {
getWeightOfMaterial :: CriterionWeight criterionWeight
getWeightOfMaterial = CriterionWeight criterionWeight
forall a. Bounded a => a
maxBound,
getWeightOfMobility :: CriterionWeight criterionWeight
getWeightOfMobility = CriterionWeight criterionWeight
forall a. Default a => a
Data.Default.def,
getWeightOfPieceSquareValue :: CriterionWeight criterionWeight
getWeightOfPieceSquareValue = CriterionWeight criterionWeight
forall a. Default a => a
Data.Default.def,
getWeightOfCastlingPotential :: CriterionWeight criterionWeight
getWeightOfCastlingPotential = CriterionWeight criterionWeight
forall a. Default a => a
Data.Default.def,
getWeightOfDefence :: CriterionWeight criterionWeight
getWeightOfDefence = CriterionWeight criterionWeight
forall a. Default a => a
Data.Default.def,
getWeightOfDoubledPawns :: CriterionWeight criterionWeight
getWeightOfDoubledPawns = CriterionWeight criterionWeight
forall a. Default a => a
Data.Default.def,
getWeightOfIsolatedPawns :: CriterionWeight criterionWeight
getWeightOfIsolatedPawns = CriterionWeight criterionWeight
forall a. Default a => a
Data.Default.def,
getWeightOfPassedPawns :: CriterionWeight criterionWeight
getWeightOfPassedPawns = CriterionWeight criterionWeight
forall a. Default a => a
Data.Default.def
}
instance Control.DeepSeq.NFData criterionWeight => Control.DeepSeq.NFData (CriteriaWeights criterionWeight) where
rnf :: CriteriaWeights criterionWeight -> ()
rnf (MkCriteriaWeights CriterionWeight criterionWeight
a CriterionWeight criterionWeight
b CriterionWeight criterionWeight
c CriterionWeight criterionWeight
d CriterionWeight criterionWeight
e CriterionWeight criterionWeight
f CriterionWeight criterionWeight
g CriterionWeight criterionWeight
h) = [CriterionWeight criterionWeight] -> ()
forall a. NFData a => a -> ()
Control.DeepSeq.rnf [CriterionWeight criterionWeight
a, CriterionWeight criterionWeight
b, CriterionWeight criterionWeight
c, CriterionWeight criterionWeight
d, CriterionWeight criterionWeight
e, CriterionWeight criterionWeight
f, CriterionWeight criterionWeight
g, CriterionWeight criterionWeight
h]
instance Num criterionWeight => Bounded (CriteriaWeights criterionWeight) where
maxBound :: CriteriaWeights criterionWeight
maxBound = CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriteriaWeights criterionWeight
forall criterionWeight.
CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriteriaWeights criterionWeight
MkCriteriaWeights CriterionWeight criterionWeight
forall a. Bounded a => a
maxBound CriterionWeight criterionWeight
forall a. Bounded a => a
maxBound CriterionWeight criterionWeight
forall a. Bounded a => a
maxBound CriterionWeight criterionWeight
forall a. Bounded a => a
maxBound CriterionWeight criterionWeight
forall a. Bounded a => a
maxBound CriterionWeight criterionWeight
forall a. Bounded a => a
maxBound CriterionWeight criterionWeight
forall a. Bounded a => a
maxBound CriterionWeight criterionWeight
forall a. Bounded a => a
maxBound
minBound :: CriteriaWeights criterionWeight
minBound = CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriteriaWeights criterionWeight
forall criterionWeight.
CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriteriaWeights criterionWeight
MkCriteriaWeights CriterionWeight criterionWeight
forall a. Bounded a => a
minBound CriterionWeight criterionWeight
forall a. Bounded a => a
minBound CriterionWeight criterionWeight
forall a. Bounded a => a
minBound CriterionWeight criterionWeight
forall a. Bounded a => a
minBound CriterionWeight criterionWeight
forall a. Bounded a => a
minBound CriterionWeight criterionWeight
forall a. Bounded a => a
minBound CriterionWeight criterionWeight
forall a. Bounded a => a
minBound CriterionWeight criterionWeight
forall a. Bounded a => a
minBound
instance (
HXT.XmlPickler criterionWeight,
Num criterionWeight,
Ord criterionWeight,
Show criterionWeight
) => HXT.XmlPickler (CriteriaWeights criterionWeight) where
xpickle :: PU (CriteriaWeights criterionWeight)
xpickle = CriteriaWeights criterionWeight
-> PU (CriteriaWeights criterionWeight)
-> PU (CriteriaWeights criterionWeight)
forall a. Eq a => a -> PU a -> PU a
HXT.xpDefault CriteriaWeights criterionWeight
forall a. Default a => a
Data.Default.def (PU (CriteriaWeights criterionWeight)
-> PU (CriteriaWeights criterionWeight))
-> (PU (CriteriaWeights criterionWeight)
-> PU (CriteriaWeights criterionWeight))
-> PU (CriteriaWeights criterionWeight)
-> PU (CriteriaWeights criterionWeight)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String
-> PU (CriteriaWeights criterionWeight)
-> PU (CriteriaWeights criterionWeight)
forall a. String -> PU a -> PU a
HXT.xpElem String
tag (PU (CriteriaWeights criterionWeight)
-> PU (CriteriaWeights criterionWeight))
-> PU (CriteriaWeights criterionWeight)
-> PU (CriteriaWeights criterionWeight)
forall a b. (a -> b) -> a -> b
$ ((CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight)
-> CriteriaWeights criterionWeight,
CriteriaWeights criterionWeight
-> (CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight))
-> PU
(CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight)
-> PU (CriteriaWeights criterionWeight)
forall a b. (a -> b, b -> a) -> PU a -> PU b
HXT.xpWrap (
\(CriterionWeight criterionWeight
a, CriterionWeight criterionWeight
b, CriterionWeight criterionWeight
c, CriterionWeight criterionWeight
d, CriterionWeight criterionWeight
e, CriterionWeight criterionWeight
f, CriterionWeight criterionWeight
g, CriterionWeight criterionWeight
h) -> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriteriaWeights criterionWeight
forall criterionWeight.
(Eq criterionWeight, Num criterionWeight) =>
CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriteriaWeights criterionWeight
mkCriteriaWeights CriterionWeight criterionWeight
a CriterionWeight criterionWeight
b CriterionWeight criterionWeight
c CriterionWeight criterionWeight
d CriterionWeight criterionWeight
e CriterionWeight criterionWeight
f CriterionWeight criterionWeight
g CriterionWeight criterionWeight
h,
\MkCriteriaWeights {
getWeightOfMaterial :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMaterial = CriterionWeight criterionWeight
weightOfMaterial,
getWeightOfMobility :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMobility = CriterionWeight criterionWeight
weightOfMobility,
getWeightOfPieceSquareValue :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPieceSquareValue = CriterionWeight criterionWeight
weightOfPieceSquareValue,
getWeightOfCastlingPotential :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfCastlingPotential = CriterionWeight criterionWeight
weightOfCastlingPotential,
getWeightOfDefence :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDefence = CriterionWeight criterionWeight
weightOfDefence,
getWeightOfDoubledPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDoubledPawns = CriterionWeight criterionWeight
weightOfDoubledPawns,
getWeightOfIsolatedPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfIsolatedPawns = CriterionWeight criterionWeight
weightOfIsolatedPawns,
getWeightOfPassedPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPassedPawns = CriterionWeight criterionWeight
weightOfPassedPawns
} -> (
CriterionWeight criterionWeight
weightOfMaterial,
CriterionWeight criterionWeight
weightOfMobility,
CriterionWeight criterionWeight
weightOfPieceSquareValue,
CriterionWeight criterionWeight
weightOfCastlingPotential,
CriterionWeight criterionWeight
weightOfDefence,
CriterionWeight criterionWeight
weightOfDoubledPawns,
CriterionWeight criterionWeight
weightOfIsolatedPawns,
CriterionWeight criterionWeight
weightOfPassedPawns
)
) (PU
(CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight)
-> PU (CriteriaWeights criterionWeight))
-> PU
(CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight)
-> PU (CriteriaWeights criterionWeight)
forall a b. (a -> b) -> a -> b
$ PU (CriterionWeight criterionWeight)
-> PU (CriterionWeight criterionWeight)
-> PU (CriterionWeight criterionWeight)
-> PU (CriterionWeight criterionWeight)
-> PU (CriterionWeight criterionWeight)
-> PU (CriterionWeight criterionWeight)
-> PU (CriterionWeight criterionWeight)
-> PU (CriterionWeight criterionWeight)
-> PU
(CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight,
CriterionWeight criterionWeight, CriterionWeight criterionWeight)
forall a b c d e f g h.
PU a
-> PU b
-> PU c
-> PU d
-> PU e
-> PU f
-> PU g
-> PU h
-> PU (a, b, c, d, e, f, g, h)
HXT.xp8Tuple (
String -> PU (CriterionWeight criterionWeight)
xpickle' String
weightOfMaterialTag
) (
String -> PU (CriterionWeight criterionWeight)
xpickle' String
weightOfMobilityTag
) (
String -> PU (CriterionWeight criterionWeight)
xpickle' String
weightOfPieceSquareValueTag
) (
String -> PU (CriterionWeight criterionWeight)
xpickle' String
weightOfCastlingPotentialTag
) (
String -> PU (CriterionWeight criterionWeight)
xpickle' String
weightOfDefenceTag
) (
String -> PU (CriterionWeight criterionWeight)
xpickle' String
weightOfDoubledPawnsTag
) (
String -> PU (CriterionWeight criterionWeight)
xpickle' String
weightOfIsolatedPawnsTag
) (
String -> PU (CriterionWeight criterionWeight)
xpickle' String
weightOfPassedPawnsTag
) where
xpickle' :: String -> PU (CriterionWeight criterionWeight)
xpickle' = CriterionWeight criterionWeight
-> PU (CriterionWeight criterionWeight)
-> PU (CriterionWeight criterionWeight)
forall a. Eq a => a -> PU a -> PU a
HXT.xpDefault CriterionWeight criterionWeight
forall a. Default a => a
Data.Default.def (PU (CriterionWeight criterionWeight)
-> PU (CriterionWeight criterionWeight))
-> (String -> PU (CriterionWeight criterionWeight))
-> String
-> PU (CriterionWeight criterionWeight)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
-> PU (CriterionWeight criterionWeight)
-> PU (CriterionWeight criterionWeight)
forall a. String -> PU a -> PU a
`HXT.xpAttr` PU (CriterionWeight criterionWeight)
forall a. XmlPickler a => PU a
HXT.xpickle)
calculateWeightedMean :: (
Fractional weightedMean,
Real criterionValue,
Real criterionWeight
)
=> CriteriaWeights criterionWeight
-> Attribute.CriterionValue.CriterionValue criterionValue
-> Attribute.CriterionValue.CriterionValue criterionValue
-> Attribute.CriterionValue.CriterionValue criterionValue
-> Attribute.CriterionValue.CriterionValue criterionValue
-> Attribute.CriterionValue.CriterionValue criterionValue
-> Attribute.CriterionValue.CriterionValue criterionValue
-> Attribute.CriterionValue.CriterionValue criterionValue
-> Attribute.CriterionValue.CriterionValue criterionValue
-> Attribute.WeightedMeanAndCriterionValues.WeightedMeanAndCriterionValues weightedMean criterionValue
{-# SPECIALISE calculateWeightedMean
:: CriteriaWeights T.CriterionWeight
-> Attribute.CriterionValue.CriterionValue T.CriterionValue
-> Attribute.CriterionValue.CriterionValue T.CriterionValue
-> Attribute.CriterionValue.CriterionValue T.CriterionValue
-> Attribute.CriterionValue.CriterionValue T.CriterionValue
-> Attribute.CriterionValue.CriterionValue T.CriterionValue
-> Attribute.CriterionValue.CriterionValue T.CriterionValue
-> Attribute.CriterionValue.CriterionValue T.CriterionValue
-> Attribute.CriterionValue.CriterionValue T.CriterionValue
-> Attribute.WeightedMeanAndCriterionValues.WeightedMeanAndCriterionValues T.WeightedMean T.CriterionValue
#-}
calculateWeightedMean :: CriteriaWeights criterionWeight
-> CriterionValue criterionValue
-> CriterionValue criterionValue
-> CriterionValue criterionValue
-> CriterionValue criterionValue
-> CriterionValue criterionValue
-> CriterionValue criterionValue
-> CriterionValue criterionValue
-> CriterionValue criterionValue
-> WeightedMeanAndCriterionValues weightedMean criterionValue
calculateWeightedMean MkCriteriaWeights {
getWeightOfMaterial :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMaterial = CriterionWeight criterionWeight
weightOfMaterial,
getWeightOfMobility :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMobility = CriterionWeight criterionWeight
weightOfMobility,
getWeightOfPieceSquareValue :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPieceSquareValue = CriterionWeight criterionWeight
weightOfPieceSquareValue,
getWeightOfCastlingPotential :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfCastlingPotential = CriterionWeight criterionWeight
weightOfCastlingPotential,
getWeightOfDefence :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDefence = CriterionWeight criterionWeight
weightOfDefence,
getWeightOfDoubledPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDoubledPawns = CriterionWeight criterionWeight
weightOfDoubledPawns,
getWeightOfIsolatedPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfIsolatedPawns = CriterionWeight criterionWeight
weightOfIsolatedPawns,
getWeightOfPassedPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPassedPawns = CriterionWeight criterionWeight
weightOfPassedPawns
} CriterionValue criterionValue
material CriterionValue criterionValue
mobility CriterionValue criterionValue
pieceSquareValue CriterionValue criterionValue
castlingPotential CriterionValue criterionValue
defence CriterionValue criterionValue
doubledPawns CriterionValue criterionValue
isolatedPawns CriterionValue criterionValue
passedPawns = [(CriterionValue criterionValue, CriterionWeight criterionWeight)]
-> WeightedMeanAndCriterionValues weightedMean criterionValue
forall weightedMean criterionValue criterionWeight.
(Fractional weightedMean, Real criterionValue,
Real criterionWeight) =>
[(CriterionValue criterionValue, CriterionWeight criterionWeight)]
-> WeightedMeanAndCriterionValues weightedMean criterionValue
Attribute.CriterionValue.calculateWeightedMean [
(
CriterionValue criterionValue
material, CriterionWeight criterionWeight
weightOfMaterial
), (
CriterionValue criterionValue
mobility, CriterionWeight criterionWeight
weightOfMobility
), (
CriterionValue criterionValue
pieceSquareValue, CriterionWeight criterionWeight
weightOfPieceSquareValue
), (
CriterionValue criterionValue
castlingPotential, CriterionWeight criterionWeight
weightOfCastlingPotential
), (
CriterionValue criterionValue
defence, CriterionWeight criterionWeight
weightOfDefence
), (
CriterionValue criterionValue
doubledPawns, CriterionWeight criterionWeight
weightOfDoubledPawns
), (
CriterionValue criterionValue
isolatedPawns, CriterionWeight criterionWeight
weightOfIsolatedPawns
), (
CriterionValue criterionValue
passedPawns, CriterionWeight criterionWeight
weightOfPassedPawns
)
]
type Transformation criterionWeight = CriteriaWeights criterionWeight -> CriteriaWeights criterionWeight
normalise :: (
Fractional criterionWeight,
Ord criterionWeight,
Show criterionWeight
) => Transformation criterionWeight
normalise :: Transformation criterionWeight
normalise criteriaWeights :: CriteriaWeights criterionWeight
criteriaWeights@MkCriteriaWeights {
getWeightOfMaterial :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMaterial = CriterionWeight criterionWeight
weightOfMaterial,
getWeightOfMobility :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMobility = CriterionWeight criterionWeight
weightOfMobility,
getWeightOfPieceSquareValue :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPieceSquareValue = CriterionWeight criterionWeight
weightOfPieceSquareValue,
getWeightOfCastlingPotential :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfCastlingPotential = CriterionWeight criterionWeight
weightOfCastlingPotential,
getWeightOfDefence :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDefence = CriterionWeight criterionWeight
weightOfDefence,
getWeightOfDoubledPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDoubledPawns = CriterionWeight criterionWeight
weightOfDoubledPawns,
getWeightOfIsolatedPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfIsolatedPawns = CriterionWeight criterionWeight
weightOfIsolatedPawns,
getWeightOfPassedPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPassedPawns = CriterionWeight criterionWeight
weightOfPassedPawns
} = Bool -> Transformation criterionWeight
forall a. (?callStack::CallStack) => Bool -> a -> a
Control.Exception.assert (
CriteriaWeights criterionWeight
criteriaWeights CriteriaWeights criterionWeight
-> CriteriaWeights criterionWeight -> Bool
forall a. Eq a => a -> a -> Bool
/= CriteriaWeights criterionWeight
forall a. Bounded a => a
minBound
) MkCriteriaWeights :: forall criterionWeight.
CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriteriaWeights criterionWeight
MkCriteriaWeights {
getWeightOfMaterial :: CriterionWeight criterionWeight
getWeightOfMaterial = CriterionWeight criterionWeight -> CriterionWeight criterionWeight
normaliseCriterionWeight CriterionWeight criterionWeight
weightOfMaterial,
getWeightOfMobility :: CriterionWeight criterionWeight
getWeightOfMobility = CriterionWeight criterionWeight -> CriterionWeight criterionWeight
normaliseCriterionWeight CriterionWeight criterionWeight
weightOfMobility,
getWeightOfPieceSquareValue :: CriterionWeight criterionWeight
getWeightOfPieceSquareValue = CriterionWeight criterionWeight -> CriterionWeight criterionWeight
normaliseCriterionWeight CriterionWeight criterionWeight
weightOfPieceSquareValue,
getWeightOfCastlingPotential :: CriterionWeight criterionWeight
getWeightOfCastlingPotential = CriterionWeight criterionWeight -> CriterionWeight criterionWeight
normaliseCriterionWeight CriterionWeight criterionWeight
weightOfCastlingPotential,
getWeightOfDefence :: CriterionWeight criterionWeight
getWeightOfDefence = CriterionWeight criterionWeight -> CriterionWeight criterionWeight
normaliseCriterionWeight CriterionWeight criterionWeight
weightOfDefence,
getWeightOfDoubledPawns :: CriterionWeight criterionWeight
getWeightOfDoubledPawns = CriterionWeight criterionWeight -> CriterionWeight criterionWeight
normaliseCriterionWeight CriterionWeight criterionWeight
weightOfDoubledPawns,
getWeightOfIsolatedPawns :: CriterionWeight criterionWeight
getWeightOfIsolatedPawns = CriterionWeight criterionWeight -> CriterionWeight criterionWeight
normaliseCriterionWeight CriterionWeight criterionWeight
weightOfIsolatedPawns,
getWeightOfPassedPawns :: CriterionWeight criterionWeight
getWeightOfPassedPawns = CriterionWeight criterionWeight -> CriterionWeight criterionWeight
normaliseCriterionWeight CriterionWeight criterionWeight
weightOfPassedPawns
} where
normaliseCriterionWeight :: CriterionWeight criterionWeight -> CriterionWeight criterionWeight
normaliseCriterionWeight = criterionWeight -> CriterionWeight criterionWeight
forall criterionWeight.
(Num criterionWeight, Ord criterionWeight, Show criterionWeight) =>
criterionWeight -> CriterionWeight criterionWeight
Attribute.CriterionWeight.mkCriterionWeight (criterionWeight -> CriterionWeight criterionWeight)
-> (CriterionWeight criterionWeight -> criterionWeight)
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (
criterionWeight -> criterionWeight -> criterionWeight
forall a. Fractional a => a -> a -> a
/ CriterionWeight criterionWeight -> criterionWeight
forall criterionWeight.
CriterionWeight criterionWeight -> criterionWeight
Attribute.CriterionWeight.deconstruct (
[CriterionWeight criterionWeight]
-> CriterionWeight criterionWeight
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum [
CriterionWeight criterionWeight
weightOfMaterial,
CriterionWeight criterionWeight
weightOfMobility,
CriterionWeight criterionWeight
weightOfPieceSquareValue,
CriterionWeight criterionWeight
weightOfCastlingPotential,
CriterionWeight criterionWeight
weightOfDefence,
CriterionWeight criterionWeight
weightOfDoubledPawns,
CriterionWeight criterionWeight
weightOfIsolatedPawns,
CriterionWeight criterionWeight
weightOfPassedPawns
]
)
) (criterionWeight -> criterionWeight)
-> (CriterionWeight criterionWeight -> criterionWeight)
-> CriterionWeight criterionWeight
-> criterionWeight
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CriterionWeight criterionWeight -> criterionWeight
forall criterionWeight.
CriterionWeight criterionWeight -> criterionWeight
Attribute.CriterionWeight.deconstruct
perturbWeights :: (
Fractional criterionWeight,
Real criterionWeight,
Show criterionWeight,
System.Random.RandomGen randomGen
)
=> randomGen
-> criterionWeight
-> Transformation criterionWeight
perturbWeights :: randomGen -> criterionWeight -> Transformation criterionWeight
perturbWeights randomGen
_ criterionWeight
0 CriteriaWeights criterionWeight
criteriaWeights = CriteriaWeights criterionWeight
criteriaWeights
perturbWeights randomGen
randomGen criterionWeight
changeMagnitude MkCriteriaWeights {
getWeightOfMaterial :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMaterial = CriterionWeight criterionWeight
weightOfMaterial,
getWeightOfMobility :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMobility = CriterionWeight criterionWeight
weightOfMobility,
getWeightOfPieceSquareValue :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPieceSquareValue = CriterionWeight criterionWeight
weightOfPieceSquareValue,
getWeightOfCastlingPotential :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfCastlingPotential = CriterionWeight criterionWeight
weightOfCastlingPotential,
getWeightOfDefence :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDefence = CriterionWeight criterionWeight
weightOfDefence,
getWeightOfDoubledPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDoubledPawns = CriterionWeight criterionWeight
weightOfDoubledPawns,
getWeightOfIsolatedPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfIsolatedPawns = CriterionWeight criterionWeight
weightOfIsolatedPawns,
getWeightOfPassedPawns :: forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPassedPawns = CriterionWeight criterionWeight
weightOfPassedPawns
} = Bool -> Transformation criterionWeight
forall a. (?callStack::CallStack) => Bool -> a -> a
Control.Exception.assert (criterionWeight
changeMagnitude criterionWeight -> criterionWeight -> Bool
forall a. Ord a => a -> a -> Bool
> criterionWeight
0) Transformation criterionWeight -> Transformation criterionWeight
forall a b. (a -> b) -> a -> b
$ Transformation criterionWeight
forall criterionWeight.
(Fractional criterionWeight, Ord criterionWeight,
Show criterionWeight) =>
Transformation criterionWeight
normalise MkCriteriaWeights :: forall criterionWeight.
CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
-> CriteriaWeights criterionWeight
MkCriteriaWeights {
getWeightOfMaterial :: CriterionWeight criterionWeight
getWeightOfMaterial = Double
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
forall criterionWeight a.
(Show criterionWeight, Fractional criterionWeight, Real a,
Ord criterionWeight) =>
a
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
reduceBy Double
a CriterionWeight criterionWeight
weightOfMaterial,
getWeightOfMobility :: CriterionWeight criterionWeight
getWeightOfMobility = Double
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
forall criterionWeight a.
(Show criterionWeight, Fractional criterionWeight, Real a,
Ord criterionWeight) =>
a
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
reduceBy Double
b CriterionWeight criterionWeight
weightOfMobility,
getWeightOfPieceSquareValue :: CriterionWeight criterionWeight
getWeightOfPieceSquareValue = Double
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
forall criterionWeight a.
(Show criterionWeight, Fractional criterionWeight, Real a,
Ord criterionWeight) =>
a
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
reduceBy Double
c CriterionWeight criterionWeight
weightOfPieceSquareValue,
getWeightOfCastlingPotential :: CriterionWeight criterionWeight
getWeightOfCastlingPotential = Double
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
forall criterionWeight a.
(Show criterionWeight, Fractional criterionWeight, Real a,
Ord criterionWeight) =>
a
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
reduceBy Double
d CriterionWeight criterionWeight
weightOfCastlingPotential,
getWeightOfDefence :: CriterionWeight criterionWeight
getWeightOfDefence = Double
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
forall criterionWeight a.
(Show criterionWeight, Fractional criterionWeight, Real a,
Ord criterionWeight) =>
a
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
reduceBy Double
e CriterionWeight criterionWeight
weightOfDefence,
getWeightOfDoubledPawns :: CriterionWeight criterionWeight
getWeightOfDoubledPawns = Double
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
forall criterionWeight a.
(Show criterionWeight, Fractional criterionWeight, Real a,
Ord criterionWeight) =>
a
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
reduceBy Double
f CriterionWeight criterionWeight
weightOfDoubledPawns,
getWeightOfIsolatedPawns :: CriterionWeight criterionWeight
getWeightOfIsolatedPawns = Double
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
forall criterionWeight a.
(Show criterionWeight, Fractional criterionWeight, Real a,
Ord criterionWeight) =>
a
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
reduceBy Double
g CriterionWeight criterionWeight
weightOfIsolatedPawns,
getWeightOfPassedPawns :: CriterionWeight criterionWeight
getWeightOfPassedPawns = Double
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
forall criterionWeight a.
(Show criterionWeight, Fractional criterionWeight, Real a,
Ord criterionWeight) =>
a
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
reduceBy Double
h CriterionWeight criterionWeight
weightOfPassedPawns
} where
(Double
a : Double
b : Double
c : Double
d : Double
e : Double
f : Double
g : Double
h : [Double]
_) = (Double, Double) -> randomGen -> [Double]
forall a g. (Random a, RandomGen g) => (a, a) -> g -> [a]
System.Random.randomRs (Double
1 :: Double, Double -> Double
forall a. Enum a => a -> a
succ (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ criterionWeight -> Double
forall a b. (Real a, Fractional b) => a -> b
realToFrac criterionWeight
changeMagnitude) randomGen
randomGen
reduceBy :: a
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
reduceBy a
randomValue = criterionWeight -> CriterionWeight criterionWeight
forall criterionWeight.
(Num criterionWeight, Ord criterionWeight, Show criterionWeight) =>
criterionWeight -> CriterionWeight criterionWeight
Attribute.CriterionWeight.mkCriterionWeight (criterionWeight -> CriterionWeight criterionWeight)
-> (CriterionWeight criterionWeight -> criterionWeight)
-> CriterionWeight criterionWeight
-> CriterionWeight criterionWeight
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (criterionWeight -> criterionWeight -> criterionWeight
forall a. Fractional a => a -> a -> a
/ a -> criterionWeight
forall a b. (Real a, Fractional b) => a -> b
realToFrac a
randomValue) (criterionWeight -> criterionWeight)
-> (CriterionWeight criterionWeight -> criterionWeight)
-> CriterionWeight criterionWeight
-> criterionWeight
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CriterionWeight criterionWeight -> criterionWeight
forall criterionWeight.
CriterionWeight criterionWeight -> criterionWeight
Attribute.CriterionWeight.deconstruct
onymousOperators :: [
(
String,
CriteriaWeights criterionWeight -> Attribute.CriterionWeight.CriterionWeight criterionWeight,
Attribute.CriterionWeight.CriterionWeight criterionWeight -> Transformation criterionWeight
)
]
onymousOperators :: [(String,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight,
CriterionWeight criterionWeight -> Transformation criterionWeight)]
onymousOperators = [
(
String
weightOfMaterialTag,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMaterial,
\CriterionWeight criterionWeight
w CriteriaWeights criterionWeight
criteriaWeights -> CriteriaWeights criterionWeight
criteriaWeights { getWeightOfMaterial :: CriterionWeight criterionWeight
getWeightOfMaterial = CriterionWeight criterionWeight
w }
), (
String
weightOfMobilityTag,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfMobility,
\CriterionWeight criterionWeight
w CriteriaWeights criterionWeight
criteriaWeights -> CriteriaWeights criterionWeight
criteriaWeights { getWeightOfMobility :: CriterionWeight criterionWeight
getWeightOfMobility = CriterionWeight criterionWeight
w }
), (
String
weightOfPieceSquareValueTag,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPieceSquareValue,
\CriterionWeight criterionWeight
w CriteriaWeights criterionWeight
criteriaWeights -> CriteriaWeights criterionWeight
criteriaWeights { getWeightOfPieceSquareValue :: CriterionWeight criterionWeight
getWeightOfPieceSquareValue = CriterionWeight criterionWeight
w }
), (
String
weightOfCastlingPotentialTag,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfCastlingPotential,
\CriterionWeight criterionWeight
w CriteriaWeights criterionWeight
criteriaWeights -> CriteriaWeights criterionWeight
criteriaWeights { getWeightOfCastlingPotential :: CriterionWeight criterionWeight
getWeightOfCastlingPotential = CriterionWeight criterionWeight
w }
), (
String
weightOfDefenceTag,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDefence,
\CriterionWeight criterionWeight
w CriteriaWeights criterionWeight
criteriaWeights -> CriteriaWeights criterionWeight
criteriaWeights { getWeightOfDefence :: CriterionWeight criterionWeight
getWeightOfDefence = CriterionWeight criterionWeight
w }
), (
String
weightOfDoubledPawnsTag,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfDoubledPawns,
\CriterionWeight criterionWeight
w CriteriaWeights criterionWeight
criteriaWeights -> CriteriaWeights criterionWeight
criteriaWeights { getWeightOfDoubledPawns :: CriterionWeight criterionWeight
getWeightOfDoubledPawns = CriterionWeight criterionWeight
w }
), (
String
weightOfIsolatedPawnsTag,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfIsolatedPawns,
\CriterionWeight criterionWeight
w CriteriaWeights criterionWeight
criteriaWeights -> CriteriaWeights criterionWeight
criteriaWeights { getWeightOfIsolatedPawns :: CriterionWeight criterionWeight
getWeightOfIsolatedPawns = CriterionWeight criterionWeight
w }
), (
String
weightOfPassedPawnsTag,
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
forall criterionWeight.
CriteriaWeights criterionWeight -> CriterionWeight criterionWeight
getWeightOfPassedPawns,
\CriterionWeight criterionWeight
w CriteriaWeights criterionWeight
criteriaWeights -> CriteriaWeights criterionWeight
criteriaWeights { getWeightOfPassedPawns :: CriterionWeight criterionWeight
getWeightOfPassedPawns = CriterionWeight criterionWeight
w }
)
]