Recolocando e substituindo o resultado mais baixo em Anydice

5

Como posso criar scripts no Anydice para rolar novamente o resultado mais baixo, mas manter o novo resultado mesmo que seja menor que o original? Até agora eu estava usando output [highest 2 of 3d12] , que é muito semelhante quando você pensa sobre isso, mas isso mantém o maior resultado entre os dados re-jogados.

Estou tentando modelar uma situação que geralmente acontece em nosso sistema caseiro que usa um mecanismo semelhante ao 2d12 da Rogue Games. Um personagem quer uma habilidade que lhe permita rolar novamente um dos d12, mas ele deve manter o novo resultado, mesmo que seja pior que o original. Espero que isso aumente a média, mas não tanto quanto uma vantagem D & D5 (a maior 1 de 2d20, a maior 2 de 3d12 para nós).

    
por llk 16.07.2018 / 20:03

2 respostas

A resposta da Doppelgreener é boa se o jogador deve sempre rolar novamente seu dado mais baixo, não importa o que eles originalmente rolaram. No entanto, se usar a habilidade for opcional, o jogador provavelmente escolherá não usá-la se rolar, digamos, duas duplas na primeira jogada de 2d12.

Em geral, é difícil modelar matematicamente esses processos opcionais de tomada de decisão, já que a decisão racionalmente ótima pode depender do objetivo específico do jogador (para não mencionar que os jogadores são humanos e, portanto, muitas vezes não agem racionalmente! ). No entanto, neste caso, uma classe razoavelmente razoável de regras de tomada de decisão a serem consideradas é aquela em que o jogador rola novamente o dado mais baixo somente quando é menor do que um determinado limite fixo. De fato, se o objetivo do jogador é simplesmente maximizar o resultado médio esperado de sua jogada, sua estratégia ideal é rolar novamente um dado somente quando o valor original desse dado for menor que a média esperada do reroll (que, para um d12 é (1 + 12) / 2 = 6,5).

Aqui está um script AnyDice básico para modelar essa estratégia de tomada de decisão:

function: reroll lowest of ROLL:s as REROLL:d if less than MIN:n {
  LOWEST: (#ROLL)@ROLL       \ the lowest die is sorted last \
  if LOWEST >= MIN {
    result: ROLL + 0
  } else {
    REST: {1..#ROLL-1}@ROLL  \ all but the lowest die \
    result: REST + REROLL
  }
}

output [reroll lowest of 2d12 as d12 if less than 7] named "2d12 replace lowest if < 7"

Observe que a função no código acima é genérica o suficiente para permitir tamanhos de conjuntos de dados iniciais arbitrários (embora somente o dado mais baixo seja novamente rerollado) e limites, e até fornece a opção de rolar novamente com um dado diferente do que o conjunto original , se isso for desejado.

Olhando para a saída do script, podemos ver que essa estratégia de "rolar mais baixo se menos de 7" supera significativamente tanto "sempre rolar novamente" quanto "nunca rolar novamente":

É claro que também podemos considerar limites diferentes de 7 (& 6,5) . No entanto, as estatísticas de resumo revelam que, pelo menos no que se refere ao resultado médio esperado, 7 é de fato o limite ideal para a nova rolagem de um d12.

Tudo o que foi dito, outras regras de tomada de decisão ainda podem melhorar ainda mais em circunstâncias específicas. Por exemplo, se o jogador estiver tentando rolar para atender ou exceder um determinado número de destino, a regra ótima natural e provável é simplesmente rolar novamente se a soma do rolar original for menor que o alvo e deixar o rolar original de outra forma.

É claro que podemos modelar o mesmo em AnyDice :

function: roll ROLL:s vs TARGET:n with optional REROLL:d reroll {
  SUM: ROLL + 0  \ force the sequence to be summed into a single number! \
  if SUM >= TARGET {
    \ no need to reroll, since we've already met the target \
    result: 1
  } else {
    \ discard and reroll the lowest die \
    REST: {1..#ROLL-1}@ROLL
    result: REST + REROLL >= TARGET
  }
}

loop TARGET over {2 .. 24} {
  output 2d12 >= TARGET named "2d12 vs [TARGET]"
  output [roll 2d12 vs TARGET with optional d12 reroll] named "2d12 vs [TARGET] with optional reroll"
}

Nesse caso, infelizmente não conseguimos obter gráficos tão bons, já que cada comparação com o número de destino apenas gera 0 se o teste falhar e 1 se for bem-sucedido. Ainda assim, olhando para a visão "transposta" (que eu tenho ligado diretamente acima), podemos ver que permitir a rolagem é um pouco melhor do que conceder ao jogador +3 para sua rolagem . Por exemplo, um teste 2d12 não modificado tem 61,81% de chance de atingir um alvo de 12, enquanto 2d12 com uma rolagem opcional tem 64,53% de chance de atingir 15 de chance, e 56,71% de chance de atingir uma meta de 16.

    
17.07.2018 / 09:28

Parece que você quer rolar 2d12 e substituir o menor com base no seu exemplo de Rogue Games. Você vai querer usar este programa para fazê-lo:

output [highest 1 of 2d12] + 1d12

Funcionalmente, o que você está fazendo é o seguinte:

  • Role 2d12.
  • Pegue o mais alto e mantenha-o.
  • Não importa qual seja o outro resultado, descartamos e ignoramos.
  • Insira um novo d12 para substituir o resultado mais baixo.

... então é isso que o programa acima faz.

Isso resulta em ainda obter 13 como o resultado mais comum, mas você tem uma chance maior de ficar acima da média do que menor. Você pode comparar e visualizar os dois métodos aqui: link

    
16.07.2018 / 20:14

Tags