• 2
  • 3
2024-01-20, 21:57
  #25
Medlem
nerdnerds avatar
Citat:
Ursprungligen postat av casefold
Körde en miljard simuleringar och fick ca 18,92 %.
Fuck! Ja, då har jag räknat fel någonstans, trots allt.
Citera
2024-01-20, 22:04
  #26
Medlem
nerdnerds avatar
Citat:
Ursprungligen postat av Himmalajja
För att kunna svara på frågan måste man veta vilken strategi man använder, annars blir variationsmöjligheterna i princip oändliga. Är det tillåtet att byta strategi under tiden o.s.v.
Bästa strategin (iaf enl mina räkningar) verkar vara att
1. Alltid spara det prickantal man har mest av och kasta om resten, dvs man får byta om man t ex först sparade 2 treor, men i nästa kast får 4 femmor och inga fler tvåor.
2. Stanna på 9 (dvs spara alla tärningar).
3. Vid 10 kastar man om EN tärning.
Citera
2024-01-20, 22:07
  #27
Medlem
nerdnerds avatar
En lite intressant grej är att Markovprocesser, som t ex denna, är ideala problem för kvantdatorer. Iaf enligt en föreläsning om dylikt som jag var på i förra veckan.

Vilket ju iaf inte gör t ex detta problem mindre intressant.
Citera
2024-01-21, 21:55
  #28
Medlem
Provade en Markovkedja. I de här uträkningarna görs det skillnad mellan exempelvis tio ettor och tio tvåor. Det blir sammanlagt C(10+6-1, 6-1) = 3003 tillstånd (exklusive starttillståndet). Tar en halvtimme att fylla i övergångsmatrisen men det var i alla fall hyfsat smärtfri programmering.

Får svaret 18,924 %.

Matlab-skript:
Kod:
n = 10; % Antal tärningar.
m = 6; % Antal sidor.
r = 6; % Antal kast.
N = nchoosek(n+m-1, m-1); % Antal tillstånd (exklusive starttillståndet).

% Generera matris där varje rad är ett tillstånd.
states = nan(N+1, m);
states(1, :) = 0;
states(2, :) = [n, zeros(1, m-1)];
for i = 3:N+1
  states(i, :) = states(i-1, :);
  k = find(states(i, :) != 0, 1);
  x = states(i, k);
  states(i, k) = 0;
  states(i, k+1) += 1;
  states(i, 1) = x-1;
endfor

% Generera övergångsmatris där p_ij är sannolikheten att gå från i till j.
P = nan(N+1, N+1);
P(:, 1) = 0;
% Första raden.
for j = 2:N+1
  p = factorial(n);
  for k = 1:m
    p /= factorial(states(j, k));
  endfor
  p /= m^n;
  P(1, j) = p;
endfor
% Resterande rader.
for i = 2:N+1
  [count, mode] = max(states(i, :));
  for j = 2:N+1
    if count == n
      % Kasta en tärning om alla är lika.
      if states(j, mode) >= n-1
        P(i, j) = 1/m;
      else
        P(i, j) = 0;
      endif
    elseif count == n-1
      % Kasta ingen tärning om alla utom en är lika.
      if j == i
        P(i, j) = 1;
      else
        P(i, j) = 0;
      endif
    else
      % Kasta de n-count tärningar som inte visar det mest förekommande
      % antalet prickar.
      if states(j, mode) < count
        P(i, j) = 0;
      else
        % Vektorn roll är tillståndet hos de kastade tärningarna.
        roll = states(j, :);
        roll(mode) -= count;
        p = factorial(n-count);
        for k = 1:m
          p /= factorial(roll(k));
        endfor
        p /= m^(n-count);
        P(i, j) = p;
      endif
    endif
  endfor
endfor

% Startfördelning.
w = [1, zeros(1, N)];

% Beräkna fördelning efter r kast.
for i = 1:r
  w = w*P;
endfor

% Summera sannolikheterna att få n-1 lika.
p = sum(w(any(states == n-1, 2)));
disp(p);
Citera
  • 2
  • 3

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in