Старый 02.10.2004, 23:41   #18 (permalink)
Mariner
Ветеран
 
Аватар для Mariner
 
Регистрация: 12.02.2004
Адрес: Россия, УРФО
Сообщений: 1,399
Приветствую!

Могу сообщить следующее. Попытка переписать программу для расчета игры 6 колодами оказалась безрезультатной. Уж больно много в коде заоптимизированных мест.

Пошел другим путем.
Korovin писАл следующее.
Цитата:
Сообщение от Цитата:
Причем вскрышки, пересечения, и прочая покерная атрибутика уходит на второй план.
Цитата:
Сообщение от Цитата:
2. Прикинуть МО без покупки шестой можно просто составив таблицу всех возможных рук и прогнав таблицу игрока против такойже таблицы дилера (выходом карт пренебрегаем).
Рассчитал функцию распределения. Провел статистическое моделирование.
Пустую комбинацию скидываем сразу. Все остальные комбинации закрываем. В случае одинаковых комбинаций у дилера и у игрока считаем, что вероятность проиграть или выиграть расклад постоянна и равна P=0.5.
При таких условиях МО на первом боксе при первой раздаче получается в районе -12%. (Сперва получалось +4.3%).
Код программы.
===>
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;
label
  l10;
var
  dlr,plr: real;
  Prob,SP: array[1..11] of double;
  Pay: array[0..11] of integer;
  id, ip: integer;
  MO, bank, sumbank, sum2bank, s2bank: real;
  i: integer;
begin
  { TODO -oUser -cConsole Main : Insert code here }
  Prob[1]:=10128551040/23856384552;
  Prob[2]:=21003598080/23856384552;
  Prob[3]:=22567581072/23856384552;
  Prob[4]:=23565387024/23856384552;
  Prob[5]:=23644702224/23856384552;
  Prob[6]:=23728591872/23856384552;
  Prob[7]:=23815737216/23856384552;
  Prob[8]:=23855520960/23856384552;
  Prob[9]:=23856073512/23856384552;
  Prob[10]:=23856353448/23856384552;
  Prob[11]:=1;

  SP[1]:=0;
  SP[2]:=0;
  SP[3]:=0;
  SP[4]:=0;
  SP[5]:=0;
  SP[6]:=0;
  SP[7]:=0;
  SP[8]:=0;
  SP[9]:=0;
  SP[10]:=0;
  SP[11]:=0;

  Pay[0]:=-3;
  Pay[1]:=1;
  Pay[2]:=2;
  Pay[3]:=4;
  Pay[4]:=6;
  Pay[5]:=10;
  Pay[6]:=10;
  Pay[7]:=10;
  Pay[8]:=20;
  Pay[9]:=100;
  Pay[10]:=200;
  Pay[11]:=200;

  sumbank:=0;
  sum2bank:=0;

  for i:=1 to 2147483647-1 {100000000} do
  begin
    //Randomize;

    bank:=0;

    dlr:=Random;
    for id:=1 to 11 do
    begin
      if dlr<Prob[id] then break;
    end;

    plr:=Random;
    for ip:=1 to 11 do
    begin
      if plr<Prob[ip] then break;
    end;

    sp[ip]:=sp[ip]+1;

    // сбрасываем граблю, если пустая
    if ip=1 then
    begin
     bank:=bank-1;
     goto l10;
    end;

    // нет игры у дилера
    if id=1 then
    begin
     bank:=bank+1;
     goto l10;
    end;

    // оплата комбинаций
    if ip>id then
    begin
      bank:=bank+Pay[ip];
      goto l10;
    end;

    if ip<id then
    begin
      bank:=bank-3;
      goto l10;
    end;

    // ничья
    if ip=id then
    begin
      if Random>0.5 then
      begin
        bank:=bank+Pay[ip];
        goto l10;
      end    else
      begin
        bank:=bank-3;
        goto l10;
      end;
    end;
l10:
    sumbank:=sumbank+bank;
    sum2bank:=sum2bank+bank*bank;
    if (i mod 1000000)=0 then
    begin
      MO:=sumbank/i;
      s2bank:=(i*sum2bank-sumbank*sumbank)/i/i;
      writeln(i,' ',MO,' ',s2bank);
    end;

  end;
  readln;
end.
<===

ЗЫ. Ввиду возможных человеческих и/или технических ошибок не могу гарантировать точность и полноту приведенных сведений и не несу ответственность за результат, связанный с использованием данной информации.
Вложения
Тип файла: xls Вероятности.xls (16.0 Кб, 272 просмотров)
__________________
Mariner

Западное полушарие Марса рассечено на протяжении 4 000 км вдоль экватора рифтовыми долинами Маринер - крупнейшим поясом разломов на планете.
Mariner вне форума