function Get-ExpectedValue { param( [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [array]$values=@(), [Parameter(Mandatory=$false)] [ValidateNotNullOrEmpty()] [array]$probability=$( @(1/$values.Length) * $values.Length) ) [int]$min =[math]::Min($values.Length, $probability.Length) $sum=0 $probabilitySum=0 for($i=0; $i -lt $min; $i++) { $product = [double]$values[$i] * $probability[$i] $sum+= $product $probabilitySum+=$probability[$i] } return ($sum / $probabilitySum) }Wprowadźmy wartość oczekiwaną w praktykę. Wartość oczekiwana sprawdza się w grach.
Kostka sześcienna ma wartość oczekiwaną 3.5
Get-ExpectedValue -values 1,2,3,4,5,6 #3,5
Gdyby prawdopodobieństwo wystąpienia ilości oczek nie było takie same to wartość oczekiwana była by inna:
Get-ExpectedValue -values 1,2,3,4,5,6 -probability ((1/6), (1/5),(1/3),(1/3)) #2,80645161290323
Dajmy na to, że gramy w kości. Jeżeli uzyskasz liczbę oczek mniejszą lub równą 2 to dasz mi kwadrat różnicy 6 i ilości oczek. Natomiast jak uzyskasz liczbę oczek 3,4,5,6 to ja tobie daję dwu-krotność liczby oczek.
Get-ExpectedValue -values ( (-1* (6-1) *(6-1) ), (-1*(6-2)*(6-2)), 6,8,10,12 ) #-0,833333333333333
Bardzo lubię grać w Osadników z catanu i w grze występują dwie kostki. Wiesz może dlaczego złodziejem ruszasz się, gdy masz sumę równa 7?? Rozwiązanie jest przedstawione poniżej:
$dice = 1,2,3,4,5,6 $dice2= $arr | %{ $outter = $_ $arr | %{ $inner = $_ return $outter + $inner } } | sort Get-ExpectedValue $dice2 #7
$dice2 | group Count Name Group ----- ---- ----- 1 2 {2} 2 3 {3, 3} 3 4 {4, 4, 4} 4 5 {5, 5, 5, 5} 5 6 {6, 6, 6, 6...} 6 7 {7, 7, 7, 7...} 5 8 {8, 8, 8, 8...} 4 9 {9, 9, 9, 9} 3 10 {10, 10, 10} 2 11 {11, 11} 1 12 {12}
Jest to wartość oczekiwana, a jednocześnie najczęściej spotykana suma.
Brak komentarzy:
Prześlij komentarz