Альтернативный Нэш

This commit is contained in:
2024-11-14 15:29:14 +03:00
parent 8b2a897614
commit 4ff6c6d204

View File

@@ -21,13 +21,12 @@ nashEquilibriumStrategy opponentMoves generatedMoves n =
nashEquilibriumStrategy (tail opponentMoves) (generatedMoves ++ [nextStep]) (n + 1) nashEquilibriumStrategy (tail opponentMoves) (generatedMoves ++ [nextStep]) (n + 1)
else generatedMoves else generatedMoves
where where
cases = [['П', 'С'], ['П', 'П']] cases = [['С', 'С'], ['С', 'П'], ['П', 'С'], ['П', 'П']]
results = [[0, 10], [5, 5]] results = [[1, 1], [10, 0], [0, 10], [5, 5]]
result = p_years = min (results !! 1 !! 1) (results !! 3 !! 1)
[ min (results !! 0 !! 1) (results !! 1 !! 1), s_years = min (results !! 0 !! 1) (results !! 2 !! 1)
max (results !! 0 !! 0) (results !! 1 !! 0) nextStep | p_years <= s_years = 'П'
] | otherwise = 'С'
nextStep = cases !! indexOf results result !! 1
getScore :: [Char] -> [Char] -> Int -> Int -> (Int, Int) getScore :: [Char] -> [Char] -> Int -> Int -> (Int, Int)
getScore moves1 moves2 score1 score2 = getScore moves1 moves2 score1 score2 =
@@ -47,7 +46,8 @@ game playerMoves gameStrategy
playerMoves = ['С', 'П', 'С', 'С', 'П', 'П', 'С', 'С', 'П', 'П'] playerMoves = ['С', 'П', 'С', 'С', 'П', 'П', 'С', 'С', 'П', 'П']
gameStrategy = forgivingStrategy -- forgivingStrategy, nashEquilibriumStrategy -- gameStrategy = forgivingStrategy
gameStrategy = nashEquilibriumStrategy
computerMoves = game playerMoves gameStrategy computerMoves = game playerMoves gameStrategy
(score1, score2) = getScore playerMoves computerMoves 0 0 (score1, score2) = getScore playerMoves computerMoves 0 0