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