[MUD-Dev] Chances of success (Bobby's algorithm)

Bobby Martin bobbymartin at hotmail.com
Mon Aug 20 04:22:45 CEST 2001


This is a multi-part message in MIME format.

------=_NextPart_000_2015_25cb_4325
Content-Type: text/plain; format=flowed

I had said I was going to publish the algorithm we use in Cosm to
calculate skill successes, so here it is.  I've attached a
standalone java class that does some simple testing and reporting on
the behavior of the system.

First, you "roll" a random number in the interval [0,1].  This is
essentially a d1000/1000, if you prefer to think of it that way.
Call this number 'roll'.

Then, you calculate the chance of success.  The chance of success is
the ratio of your skill level to the sum of (your skill level + the
difficulty).

  Here is that calculation:

    chanceOfSuccess = skillLevel/(skillLevel + difficulty);

A simple comparison of the roll to the chance of success determines
whether the character succeeded at all in his endeavor (roll >
chance of success indicates failure).

If he succeeded, we now find out how well.  This is the hardish
part, you can just kind of take my word for it if you like, or you
can work it out for yourself.  My goal here was first to make it so
that 70% of successes were level 1, 70% of the remaining successes
were level 2, 70% of the remaining after that were level 3, etc.

So, if you compare the chanceOfSuccess to roll*(.7)^level like so:
chanceOfSuccess < roll*(.7)^level to achieve the above goal you need
to find the largest level for which the above equation is true.  I
use some logarithms and come up with:

    degreeOfSuccess = log(roll) - log(chanceOfSuccess)/
                   log(.7);

Unfortunately, once a character has achieved success, this will
distribute the success levels the same regardless of the comparison
of skillLevel to difficulty.  To remedy that, I scale by the
multiplicative inverse of (1 - chanceOfSuccess).  This means if you
have twice the likelihood of succeeding, you will also generally get
twice the degreeOfSuccess.

    degreeOfSuccess *= (1.0/(1.0-chanceOfSuccess));

I have tested this and am pretty pleased with the results.  Note
that difficulty is on the same scale as skillLevel, so skill
vs. skill tests happen the way you would want.  To assign a
difficulty to a task, just pick the skill level that you want to
have a 50% chance of success; that's your difficulty.  Characters
with low skills still have a small but significant chance of getting
a 30-40 degreeOfSuccess, but most of the time will fail.  Characters
with high skills will mostly get 70s & above on degreeOfSuccess, but
still have a small but significant chance of failure.

Anyway, javac the attached file and play with it if you like.

Regards,
Bobby Martin
Cosm Development Team

secure email: bobbymartin at hushmail.com

------=_NextPart_000_2015_25cb_4325
Content-Type: application/octet-stream; name="testsuccess.java"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="testsuccess.java"

aW1wb3J0IGphdmEudXRpbC4qOw0KDQovLyBUaGlzIGlzIHB1YmxpYyBkb21h
aW47IHVzZSBpdCBhcyB5b3UgbGlrZS4gIEkgdGFrZSBubyByZXNwb25zaWJp
bGl0eQ0KLy8gb2YgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UsIG9mIGNvdXJz
ZS4gIElmIHlvdSB1c2UgaXQsIEkgd291bGQNCi8vIGFwcHJlY2lhdGUgYW4g
YWNrbm93bGVkZ2VtZW50Lg0KLy8gQm9iYnkgTWFydGluDQoNCnB1YmxpYyBj
bGFzcyB0ZXN0c3VjY2Vzcw0Kew0KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg
UmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsNCiAgICBwcm90ZWN0ZWQg
c3RhdGljIGZpbmFsIGZsb2F0IFNVQ0NFU1NfSU5DUkVNRU5UID0gLjdmOw0K
DQogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykN
CiAgICB7DQogICAgICAgIGludCBza2lsbExldmVsID0gSW50ZWdlci5wYXJz
ZUludChhcmdzWzBdKTsNCiAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBh
cmdzLmxlbmd0aDsgKytpICkNCiAgICAgICAgew0KICAgICAgICAgICAgdGVz
dFN1Y2Nlc3NBbGdvKHNraWxsTGV2ZWwsIEludGVnZXIucGFyc2VJbnQoYXJn
c1tpXSkpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHVibGljIHN0YXRp
YyB2b2lkIHRlc3RTdWNjZXNzQWxnbyhpbnQgc2tpbGxMZXZlbCwgaW50IG9w
cG9zaW5nVmFsdWUpDQogICAgew0KCWNoZWNrU3VjY2Vzcyhza2lsbExldmVs
LCBvcHBvc2luZ1ZhbHVlLCB0cnVlKTsNCiAgICAgICAgYnl0ZVtdIGFyciA9
IG5ldyBieXRlWzEyOF07DQogICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwg
NTA7ICsraSApDQogICAgICAgIHsNCiAgICAgICAgICAgICArK2FycltjaGVj
a1N1Y2Nlc3Moc2tpbGxMZXZlbCwgb3Bwb3NpbmdWYWx1ZSwgZmFsc2UpXTsN
CiAgICAgICAgfQ0KDQogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiAr
IGFyclswXSArICIgZmFpbHVyZXMiKTsNCglmb3IoIGludCBpID0gMTsgaSA8
IGFyci5sZW5ndGg7ICsraSApDQoJew0KCQlpZiggYXJyW2ldICE9IDAgKQ0K
CQlTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyBhcnJbaV0gKyAiIGxldmVsICIg
KyBpICsgIiBzdWNjZXNzZXMiKTsNCgl9DQogICAgfQ0KICAgIHB1YmxpYyBz
dGF0aWMgYnl0ZSBjaGVja1N1Y2Nlc3MoaW50IHNraWxsTGV2ZWxfLCBpbnQg
b3Bwb3NpbmdWYWx1ZSwgYm9vbGVhbiBwcmludENoYW5jZSkNCiAgICB7DQoJ
Ynl0ZSByZXR2YWwgPSAwOw0KDQoJLy9za2lsbCBsZXZlbC8oc2tpbGwgbGV2
ZWwgKyBvcHBvc2luZ1ZhbHVlKSA9IGNoYW5jZSBvZiBzdWNjZXNzDQoJLy9Y
JSAoOTAlPykgY2hhbmNlIG9mIG1vdmluZyB1cCBieSAxIHN1Y2Nlc3M6DQoJ
Ly81MCUgY2hhbmNlIG9mIHN1Y2Nlc3MgLT4gOTAlKjUwJT00NSUgY2hhbmNl
IG9mIDINCgkvLzkwJSo0NSU9NDAuNSUgY2hhbmNlIG9mIDMNCgkvLzkwJSo0
MC41JT0zNi40NSUgY2hhbmNlIG9mIDQsIGV0Yy4NCglmbG9hdCBjaGFuY2VP
ZlN1Y2Nlc3MgPQ0KCSAgICAoKGZsb2F0KXNraWxsTGV2ZWxfKS8oc2tpbGxM
ZXZlbF8gKyBvcHBvc2luZ1ZhbHVlKTsNCg0KCWlmKCBwcmludENoYW5jZSAp
DQoJew0KCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNoYW5jZSBvZiBzdWNjZXNz
IGF0ICIgKyBza2lsbExldmVsXyArICIgdmVyc3VzICIgKyBvcHBvc2luZ1Zh
bHVlICsgIiBpcyAiICsgY2hhbmNlT2ZTdWNjZXNzKTsNCgl9DQoNCglpZigg
Y2hhbmNlT2ZTdWNjZXNzIDw9IDAuMCB8fCBjaGFuY2VPZlN1Y2Nlc3MgPj0g
MS4wICkNCgl7DQoJICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2hhbmNlIG9m
IHN1Y2Nlc3Mgb3V0c2lkZSAoMCwxKTogIiArIGNoYW5jZU9mU3VjY2Vzcyk7
DQoJfQ0KDQoJLy9zZXQgcm9sbCB0byByYW5kb20gZmxvYXQgYmV0d2VlbiAw
LjAgYW5kIDEuMA0KCWZsb2F0IHJvbGwgPSByYW5kb20ubmV4dEZsb2F0KCk7
DQoNCglpZiggcm9sbCA8IGNoYW5jZU9mU3VjY2VzcyApDQoJew0KCSAgICAv
L2ZpbmQgbGFyZ2VzdCBOIHdoZXJlIChyb2xsIDwgKC45Xk4pKmNoYW5jZU9m
U3VjY2VzcykNCgkgICAgLy9yb2xsL2NoYW5jZU9mU3VjY2VzcyA9IC45Xk4N
CgkgICAgLy9sb2cocm9sbCkgLSBsb2coY2hhbmNlT2ZTdWNjZXNzKSA9IE4q
bG9nKC45KQ0KCSAgICAvL04gPSBbbG9nKHJvbGwpIC0gbG9nKGNoYW5jZU9m
U3VjY2VzcyldL2xvZyguOSkNCgkgICAgZG91YmxlIGRlZ3JlZU9mU3VjY2Vz
cyA9DQoJCShNYXRoLmxvZyhyb2xsKSAtIE1hdGgubG9nKGNoYW5jZU9mU3Vj
Y2VzcykpIC8NCgkJTWF0aC5sb2coU1VDQ0VTU19JTkNSRU1FTlQpOw0KDQoJ
ICAgIC8vc2NhbGUgYnkgdGhlIGludmVyc2Ugb2YgdGhlIGNoYW5jZSBvZiBm
YWlsdXJlLi4uICBpZiB5b3VyDQoJICAgIC8vc2tpbGwgaXMgMTB4IHRoZWly
cywgeW91IGhhdmUgMTB4IHRoZSBkZWdyZWUgb2Ygc3VjY2Vzcy4NCgkgICAg
ZGVncmVlT2ZTdWNjZXNzID0gZGVncmVlT2ZTdWNjZXNzICogKDEuMC8oMS4w
LWNoYW5jZU9mU3VjY2VzcykpOw0KDQoJICAgIGlmKCBkZWdyZWVPZlN1Y2Nl
c3MgPD0gMC4wICkNCgkgICAgew0KCQlTeXN0ZW0uZXJyLnByaW50bG4oIkRl
Z3JlZSBvZiBzdWNjZXNzIDw9IDAgZm9yIHN1Y2Nlc3NmdWwgc2tpbGwgdXNl
Iik7DQoJICAgIH0NCgkgICAgZWxzZSBpZiggZGVncmVlT2ZTdWNjZXNzIDwg
MS4wICkNCgkgICAgew0KCQlyZXR2YWwgPSAxOw0KCSAgICB9DQoJICAgIGVs
c2UgaWYoIGRlZ3JlZU9mU3VjY2VzcyA+IDEyNy4wICkNCgkgICAgew0KCQly
ZXR2YWwgPSAxMjc7DQoJICAgIH0NCgkgICAgZWxzZQ0KCSAgICB7DQoJCXJl
dHZhbCA9IChieXRlKWRlZ3JlZU9mU3VjY2VzczsNCgkgICAgfQ0KCX0NCg0K
CXJldHVybiByZXR2YWw7DQogICAgfQ0KfQ0K


------=_NextPart_000_2015_25cb_4325--
_______________________________________________
MUD-Dev mailing list
MUD-Dev at kanga.nu
https://www.kanga.nu/lists/listinfo/mud-dev



More information about the mud-dev-archive mailing list