en résumé - En supposant qu'aucun rouleau n'est sûr, alors l'avantage a de meilleures chances si $$ \frac { \left ( \text {DC} - \text {bonus d'avantage} - 1 \right )^2}{ \text {DC} - \text {prime normale} - 1 { \phantom {{}^{2}}}} < 20 \tag {1} \,.$$ Voici un script C# en ligne pour jouer avec cela. Détails au bas de cette réponse.
Exemple
-
Vous devez battre un \$ \text {DC} = 10 .\$
-
Vous avez deux options :
-
Branchez ceci sur \$ \operatorname {Eq.}{ \left (1 \right )}\$ à trouver : $$ \frac { \left ( \text {DC} - \text {bénéfice de l'avantage} - 1 \right )^2}{ \text {DC} - \text {prime normale} - 1 { \phantom {{}^{2}}}} ~=~ \frac { \left (10 - 1 - 1 \right )^2}{10 - 5 - 1} ~=~ \frac {8^2}{4} ~=~16 ~<~ 20 \,.$$
-
Depuis \$16 < 20 ,\$ cette inégalité est \$ \texttt {TRUE} ,\$ et donc rouler avec avantage est mieux.
-
En revanche, si le \$ \text {DC}\$ étaient \$17\$ au lieu de \$10 ,\$ alors l'inégalité se serait réduite à $$ \frac { \left ( \text {DC} - \text {bonus d'avantage} - 1 \right )^2}{ \text {DC} - \text {prime normale} - 1 { \phantom {{}^{2}}}} ~=~ \frac { \left (17 - 1 - 1 \right )^2}{17 - 5 - 1} ~=~ \frac {{15}^2}{11} ~=~ \sim 20.45 ~<~ 20 \,,$$
et puisque \$ \sim 20.45 < 20\$ es \$ \texttt {FALSE} ,\$ cela signifie que les chances ne sont pas meilleures lorsque l'on roule avec un avantage. Donc, dans ce cas, il semble préférable de lancer le dé normalement avec \$+5\$ plutôt qu'avec \$+1\$ et avantage.
Explication
D'abord :
-
Si l'une ou l'autre option est sûre, faites-le.
-
Si aucune des deux options n'a de chance, vous ne pouvez rien faire de toute façon.
Il ne reste donc que le cas où les deux options ont une possibilité non certaine.
Ensuite, les chances d'échouer à battre un DC sur un seul jet sont de $$ P_{ \text {roulement}} ~=~ 5 \, \left ( \left [ \text {DC} \right ] - \left [ \text {bonus} \right ] - 1 \right ) \, \% \,, $$ et les chances de ne pas battre un DC avec un avantage sont de $$ P_{ \begin {array}{c} \text {roulez avec} \\ [-10px] \text {avantage} \end {array}} ~=~ P_{ \text {roll}}^2 ~=~ \left (5 \, \left ( \left [ \text {DC} \right ] - \left [ \text {bonus} \right ] - 1 \right ) \, \% \right )^2 ~=~ 0.25 \, \left ( \left [ \text {DC} \right ] - \left [ \text {bonus} \right ] - 1 \right )^2 \, \% \,.$$
Ainsi, vos chances d'échec avec avantage sont plus faibles lorsque $$ 0.25 \, \left ( \left [ \text {DC} \right ] - \left [ \text {bonus} \right ]_{ \text {avantage}} - 1 \right )^2 \, \% ~<~ 5 \, \left ( \left [ \text {DC} \right ] - \left [ \text {bonus} \right ]_{ \text {normal}} - 1 \right ) \, \% \,,$$ ou $$ \frac { \left ( \left [ \text {DC} \right ] - \left [ \text {bonus} \right ]_{ \text {avantage}} - 1 \right )^2 }{ \left [ \text {DC} \right ] - \left [ \text {bonus} \right ]_{ \text {normal}} - 1 } ~<~ 20 \,. $$
Pour rendre cela un peu plus intuitif, écrivons-le sous la forme suivante $$ \frac { \left ( \text {DC} - \text {bonus d'avantage} - 1 \right )^2 }{ \text {DC} - \text {prime normale} - 1 } ~<~ 20 \,. $$
Notes
-
Le site en résumé Le conseil recommande de ne pas rouler avec l'avantage lorsque les chances sont les mêmes dans les deux sens. J'ai choisi cette convention car c'est moins de travail. Mais, si quelqu'un aime rouler, il pourrait rouler avec avantage si $$ \frac { \left ( \text {DC} - \text {bonus d'avantage} - 1 \right )^2}{ \text {DC} - \text {prime normale} - 1 { \phantom {{}^{2}}}} \le 20 \,.$$
-
La logique ci-dessus suppose que le dé du d20 est juste. S'il ne l'est pas, alors je suppose que le fait de lancer un dé sans avantage est un peu mieux qu'il ne le serait normalement, car un dé injuste semblerait avoir moins de variabilité entre les jets. Puisque la plupart des dés ne sont probablement pas parfaitement équitables, un optimiseur acharné pourrait préférer lancer le dé sans avantage dans les cas suivants $$ \frac { \left ( \text {DC} - \text {bénéfice de l'avantage} - 1 \right )^2}{ \text {DC} - \text {prime normale} - 1 { \phantom {{}^{2}}}} \approx 20 \,.$$
-
Le site \$`` 20 "\$ dans l'inégalité n'est pas une coïncidence ; elle correspond à la " 20 " dans " d20 ". De même, le \$`` 1 "\$ correspond à la valeur minimale de la filière. Ainsi, si l'on utilise un autre type de dé, cette inégalité peut être généralisée à $$ \frac { \left ( \text {DC} - \text {bande d'avantages} - \text {valeur minimale du dé} \right )^2}{ \text {DC} - \text { bonus normal} - \text {min die value} { \phantom {{}^{2}}}} ~<~ \text {valeur maximale du dé} - \text {valeur minimale du dé} + 1 \,.$$
-
La dérivation ci-dessus s'est concentrée sur la probabilité d'échec, plutôt que sur la probabilité de succès, parce que le calcul aurait été un peu plus laid pour un jet avec avantage si nous nous étions concentrés sur la maximisation du succès (plutôt que sur la minimisation de l'erreur). Cependant, si quelqu'un fait le même calcul pour un jet avec un désavantage, le calcul devrait être plus propre si vous le faites en vous concentrant sur la maximisation du succès. La raison en est que l'avantage/désavantage nécessite un second jet de dé uniquement en cas d'échec/succès du premier jet.
Script C# pour jouer avec ceci
J'allais joindre un extrait de JavaScript ici, mais je suppose que cette fonction n'est pas disponible sur ce StackExchange. Donc, Voici un script C# qui peut être exécuté en ligne.
Notes :
-
Pour l'utiliser, appelez Report(dc, bonus_normal, bonus_advantage);
et il vous dira lequel est le meilleur.
-
Actuellement, il est préchargé pour appeler Report(10, 5, 1);
y Report(17, 5, 1);
pour démontrer l'exemple donné en haut de cette réponse. Cela devrait donner :
For DC = 10 Bonus (normal) = 5 Bonus (advantage) = 1:
Your odds are better with the power of ADVANTAGE!
For DC = 17 Bonus (normal) = 5 Bonus (advantage) = 1:
Advantage is for losers; roll normally!
-
Par défaut, elle utilise un d20, avec une valeur minimale de 1
et une valeur maximale de 20
. Ces deux valeurs peuvent être modifiées dans le code.
-
\$ \operatorname {Eq.}{ \left (1 \right )}\$ (et sa généralisation, telle qu'utilisée dans ce script) suppose que, si les chances ne peuvent pas être améliorées par un avantage, vous préférez lancer le dé normalement (puisque c'est moins de lancer).
-
\$ \operatorname {Eq.}{ \left (1 \right )}\$ suppose que le succès et l'échec sont tous deux possibles avec un jet d'avantage et un jet normal. Ce script vérifie que c'est le cas avant d'utiliser la fonction \$ \operatorname {Eq.}{ \left (1 \right )} .\$
Code source (C#) :
using System;
public class Program
{
// A typical d20 has a minimum value of 1 and a maximum of 20:
public const long MINIMUM_DIE_VALUE = 1;
public const long MAXIMUM_DIE_VALUE = 20;
public static void RunExample()
{
Report(
10
, 5
, 1
);
Report(
17
, 5
, 1
);
}
public static void Report(
long dc
, long bonus_normal
, long bonus_advantage
)
{
var stringMessage =
"For\tDC = "
+ dc.ToString()
+ "\tBonus (normal) = "
+ bonus_normal.ToString()
+ "\tBonus (advantage) = "
+ bonus_advantage.ToString()
+ ":"
+ System.Environment.NewLine
;
if (ShouldRollWithAdvantage(
dc
, bonus_normal
, bonus_advantage
))
{
stringMessage += "Your odds are better with the power of ADVANTAGE!";
//Console.WriteLine("Your odds are better with the power of ADVANTAGE!");
}
else
{
stringMessage += "Advantage is for losers; roll normally!";
//Console.WriteLine("Advantage is for losers; roll normally!");
}
Console.WriteLine(stringMessage);
Console.WriteLine();
}
public static bool ShouldRollWithAdvantage(
long dc
, long bonus_normal
, long bonus_advantage
)
{
// Case 1:
// If rolling with advantage can't succeed, then just roll normally.
// Doesn't matter if rolling normally can't succeed, either, because if
// you're going to fail either way, may as well only roll once.
if (dc - bonus_advantage > MAXIMUM_DIE_VALUE)
{
return false;
}
// Case 2:
// If rolling without advantage can't succeed, then roll with advantage.
if (dc - bonus_normal > MAXIMUM_DIE_VALUE)
{
return true;
}
// Case 3:
// If rolling without advantage always succeeds, then roll without advantage.
if (dc - bonus_normal <= MINIMUM_DIE_VALUE)
{
return false;
}
// Case 4:
// If rolling with advntage always succeeds, then roll with advantage.
if (dc - bonus_advantage <= MINIMUM_DIE_VALUE)
{
return true;
}
// Case 5:
// Since rolling with advantage and rolling without advantage are both
// possible-but-not-guaranteed, we compare their odds of success.
//
// This method checks if
// (DC - bonus_advantage - 1)^2
// is less than
// 20 * (DC - bonus_normal - 1)
// instead of the fraction to avoid floating-point values.
{
var leftHandSide = (dc - bonus_advantage - MINIMUM_DIE_VALUE);
leftHandSide *= leftHandSide;
var rightHandSide = (MAXIMUM_DIE_VALUE - MINIMUM_DIE_VALUE + 1) * (dc - bonus_normal - MINIMUM_DIE_VALUE);
var shouldRollWithAdvantage = leftHandSide < rightHandSide;
return shouldRollWithAdvantage;
}
}
private static bool TryValidateProgramConstants(
out string errorMessage
)
{
if (!(MINIMUM_DIE_VALUE < MAXIMUM_DIE_VALUE))
{
errorMessage = "Maximum die value must be greater than minimum die value.";
return false;
}
if (MINIMUM_DIE_VALUE < -1000)
{
errorMessage = "Unreasonably low minimum die value.";
return false;
}
if (MAXIMUM_DIE_VALUE > 1000)
{
errorMessage = "Unreasonably high maximum die value.";
return false;
}
errorMessage = default(string);
return true;
}
public static void Main()
{
string errorMessage;
if (TryValidateProgramConstants(out errorMessage))
{
RunExample();
}
else
{
Console.WriteLine("Error in program validation; aborting run.");
if (!string.IsNullOrWhiteSpace(errorMessage))
{
Console.WriteLine(errorMessage);
}
}
}
}