Vinnaren i pepparkakshustävlingen!
  • 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

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback