|
Post by krusader74 on Jul 1, 2014 21:35:36 GMT -6
PalamedesThe poet Homer credits Palamedes (Greek: Παλαμήδης, pronounced: /pal-uh-meed'-eez/) with the discovery of dice during the siege of Troy. Specifically, he invented the dice gambling game called Astragaloi (or Astragals) by the Greeks. He dedicated the dice he invented to Tyche (Greek: Τύχη), the Goddess of Fortune, but the goddess did not protect him when he fell a victim of slander. Palamedes was a prince sent by his father to force Odysseus to make good on his vow of fealty and bring him to help lay siege to Troy. Odysseus was warned by an Oracle that if he went to Troy, he would not return for 20 years, so he feigned madness. But Palamedes was wise and he saw through this ruse. Odysseus grudgingly went to Troy, but he never forgave Palamedes. Palamdes was wise and intelligent. Palamedes was one of the few able to write; in fact, he added 11 letters to the Greek alphabet (others say: 16 letters). He is credited with discoveries in the field of wine making. He was also one of the few Greeks who was able to count. While laying siege to Troy, he counted the Greek forces and the Trojan forces, and then recommended the Greeks go home. Odysseus used Palamedes smarts against him---after Palamedes recommended going home, Odysseus claimed Palamedes was a traitor. Odysseus planted fake evidence against him: - He forged a letter from King Priam to Palamedes
- He planted a phony letter from Palamedes to King Priam on a dead Trojan
- He planted Trojan-minted gold in Palamedes's tent
As a result, Palamedes was tried and condemned to death by the Greeks. Some say he was stoned to death by the whole Greek army. Others say: Odysseus drowned him in a fishing net. The moral of this story is: No one forges his own fortune. No matter how wise you are or how much of a contribution you make, nothing can save you from misfortune. Tyche feels no compassion for her victims, and it is pointless to try and supplicate her. There are some memorials to Palamedes. The high peak Palamidi was named after the unlucky hero Palamedes. Polygnotos (5th century BC) made a vase painting, which depicts Palamedes and Thersites playing dice. There are also a few other vases decorated with the figure of Palamedes. In these paintings, Palamedes is beardless and wears a Phrygian cap and himation embroidered with stars over the lower limbs. I couldn't find that painting, but here is another famous vase painting from the Vatican museum; it depicts Achilles and Ajax playing at dice:
|
|
|
Post by krusader74 on Jul 1, 2014 21:36:08 GMT -6
KnucklebonesAstragaloi remained popular through Roman times. The Romains called it Tali, which is the Latin name for Knucklebones. And the game remained popular through Medieval times too. If you play in a somewhat historically based ancient Greek, Roman or Medieval campaign setting, Tali is ubiquitous. You'll find people playing it on every street corner, alley, temple, and pub. In a Medieval setting, you'll find dicing guilds, forerunners of present day casinos. You'll find a treatment of Knucklebones in the booklet Medieval Games and Recreation. A knucklebone is somewhat 4-sided. Each of the 4 sides has a distinctive shape. Long before most people could read, write and do arithmetic, they could recognize these distinct shapes. When labelled with numbers, the sides of a knucklebone will be marked 1, 3, 4, and 6. The innumerate and illiterate masses will simply recognize which sides are which, and they will play games based on pattern matching, e.g., four of a kind, three of a kind, two pair, or all sides different. More educated folks will use the patterns too, but they will also supplement them with scores, i.e., the tally of the numbers on the 4 tali. In this way, the game somewhat resembles poker. Each knucklebone is unique. Look at this picture of a set of knucklebones: Therefore each one will have its own unique probability distribution. Do not assume a knucklebone works like a d4! This is likely the main reason nobody attempted to formulate a theory of probability until Gerolamo Cardano wrote Liber De Ludo Aleae (or How to Shoot Craps) in the mid 1500s. The work remained unpublished until 1663. It's important to note that this and all the other early work on probability theory was inspired by dice games; for a review of this literature, see the this paper. The earliest knucklebones (and the most commonplace) were literally made out of animal knucklebones. (Maybe Trolls and Ogres use human knuckles?) However, they can be made out of anything: wood, glass, metal or even expensive gems. As a result, it was common to see knucklebones used as money. Besides gaming, knucklebones were used for divination. This would likely involve tossing a handful of knucklebones into a Situla---a vase filled with water---and divining the pattern in the dice after they came to rest at the bottom. Greeks would attempt to divine the will of lady Fortune, Tyche. Besides the Greeks, there are many examples of this kind of divination in the Bible, for example to determine guilt or innocence; see the Wikipedia article on Cleromancy for a list of specific examples. It's worth pointing out that the Situla continued to be used by Medieval Christianity as a vessel to hold Holy Water; see the odd74 thread on Holy water creation. I've been calling knucklebones a game when in reality it is a loose family of games. Players will agree to a specific set of rules before they begin. Emperor Augustus used a very simple set of rules for Tali. Each player rolls four knucklebones each round: - For each 1 you rolled, you added 1 sp to the pot. Four 1s are called Cani or Dogs and that's the worst thing you can roll.
- If someone rolls 4 distinct sides that's called a Venus and that player wins the pot.
- Before the game and each time somebody wins, everybody puts 1 sp in the pot.
In more complicated games, we may get hands besides Cani and Venus. Here is a more complete listing: - Four distinct tali are called a Venus and that's always the best you can roll.
- Anything else with at least one 6 (except four 6s!) is called Senio.
- Four tali with no 6s (except four-of-a-kind) may be broken down further:
- Two pair beats three of a kind
- Three-of-a-kind beats a pair
- Four-of-a-kind of anything except 1s but including 6s are called Vultures and that's the next-to-worst thing you can roll.
- Four 1s are called Cani or Dogs and that's the worst thing you can roll.
If the dice are numbered, then scores may be computed by totalling the numbers. In general, if players get the same hand (say a pair), then the one with the higher score wins. Bear in mind there will be exceptions to these rules. Every locale and every group of players has its own customary house rules.
|
|
|
Post by krusader74 on Jul 1, 2014 21:59:18 GMT -6
Virtual dice rollersI'm a purist---I would never use a virtual dice roller at the game table. However, I think they're fine for online use. And even better for experimentation with new dice methods. For the past few weeks, I've been developing a virtual dice roller. I eventually plan to call it Palamedes in honor of the mythological inventor of dice. There are already plenty of dice rollers out there. But this one is written in pure JavaScript. That way I can run it in a web browser or run it in a console using node.js. Here are some screenshots of it running in firefox and in a console: It is also 100% free with a GPL license. It's feature list goes beyond a lot of virtual dice rollers---it may be used as a calculator or probability calculator. Currently, the code is still in the early alpha stage. There are plenty of bugs and idiosyncrasies. If you are interested, you can try it online at: palamedes.altervista.org/index.htmlOr you can download a zip with the complete source code from dropbox. To get an idea of what it can do, I'll quote the beginning of the README file. The remainder of the README contains info on how to build it and run it in node.js. And it has a manifest of all the files and documentation... READMEdice.js is a javscript dice roller and probability calculator. UsageHere is a small sample of supported dice roll expressions: d% /* roll a percentile die */ 6#3d6 /* roll 3d6 six times (D&D abilities scores) */ d20>=11 /* roll a d20 and check if greater or equal to target number (D&D to-hit roll) */ 4#d6>=5 /* roll four d6s and check each if 5 or 6 (Chainmail to-hit rolls) */ max(2#d6) /* take the maximum of two d6s */ d6 - d6 /* the difference of two d6s */ In addition to being a dice roller, dice.js also allows you to compute exact probabilities (up to JavaScript rounding errors). Quickly find the probabilities for these simple expressions: prob (3d6); prob(3d6>=10); stats(3d6); cdf(3d6); ~cdf(3d6); sum(prob(3d6)) Or arbitrarily complex ones, such as this expression to create a function to generate gems in accordance with the rules on page 40 of OD&D Vol. 2. Here is an implementation of Aher's theoretical method of computing exact gem probabilities from the thread Analysis of OD&D treasure types: gemvalue ← {"10":1,"50":2,"100":3,"500":4,"1000":5,"5000":6,"10000":7,"25000":8,"50000":9,"100000":10,"500000":11} gemprob ← censor (prob (geom (5/6) + select [1, 0.1, 2, 0.15, 3, 0.5, 4, 0.15, 5, 0.1])), 1, 11 Then you may enter gemprob ∘ gemvalue /* Generate the gem probability mass function */ stats(gemprob ∘ gemvalue) /* See descriptive statistics for gems */ 10 # select (gemprob ∘ gemvalue) /* Randomly generate 10 gems from the distribution */ TMTOWTDI. See the EXAMPLES file for a straightforward procedural method to compute gems. Roll four d6, keep the highest 3 and sum. Here are two alternative ways to do it: 4d6k3 sum(high 3, (4#d)) Roll two dice, find the pmf of the minimum. Two ways to do it: prob(min(2#d6)) orderstat d6, 2, 1 Roll three d6, reroll 1s and sum. Again, two different ways to do it: choose[2..6]+choose[2..6]+choose[2..6] sum(3#choose[2..6]) Roll one die randomly chosen from the set of platonic dice. Two ways: d(choose [4,6,8,12,20]) [d4, d6, d8, d12, d20] ∘ (z5) More ExamplesSee the EXAMPLES file for lots more sample usage along with more detailed accompanying explanations. Included there you'll find: - Reaction rolls (page 11 OD&D Vol. 1)
- Men Attacking (page 19 OD&D Vol. 2)
- Ability scores and starting gold with labels
- Alternate methods of character generation
|
|
|
Post by krusader74 on Jul 1, 2014 22:16:41 GMT -6
ExampleI wanted to tie everything in this thread together by showing an example of how to use dice.js to compute probabilities for a particular instance of Knucklebones/Tali, the dice game invented by Palamedes. Remember every knucklebone is different with a different set of probabilities. Sides are not equi-probable. And dice aren't iid. But for simplicity we'll assume this game is played with four identical bones each with the following probability mass function (pmf): {"1": 0.1, "3": 0.4, "4": 0.4, "6": 0.1} We'll play with these rules: - Everybody puts 1 sp in the pot before each round. You also put 1 sp in the pot for each 1 you roll.
- Each player rolls once each round. Players decide what order they roll in.
- Hands are ordered as follows: Venus > Senio > two pair > three-of-a-kind > pair > Vultures > Dogs
- Within a hand, high score wins.
- For tied scores, nobody wins the pot this round. Everybody puts 1 more sp in the pot, and starts the next round.
This code will compute hands and scores given for this spec: hand ← lookup[max(range(tally tali))=1, "venus", max tali=1,"dogs", max(range(tally tali))=4, "vultures", max tali=6,"senio", max(range(tally tali))=3, "three of a kind", min(range(tally tali))=2, "two pair", max(range(tally tali))=2, "pair", true, "cheater!"] score ← sum tali pmf ← {"1": 0.1, "3": 0.4, "4": 0.4, "6": 0.1} roll ← 4 # select pmf To generate one random roll and compute it's hand and score, do this: tali ↤ roll; hand; score To see the probabilities and sample statistics for various scores, do this: prob(sum(roll)); stats(sum(roll)) Computing the exact probabilities of each hand is more complicated. Here's a quick-and-dirty calculation: probvenus ↤ 4! * 0.1 ^ 2 * 0.4 ^ 2 probdogs ↤ 0.1 ^ 4 probvultures ↤ 2 * 0.4 ^ 4 + 0.1^4 probsenio ↤ comb(4, 3) * 0.1 ^ 3 * 0.9 + comb(4, 2) * 0.1 ^ 2 * 0.9 ^ 2 + comb(4, 1) * 0.1 * 0.9 ^ 3 - probvenus probtwopair ↤ comb(4, 2) * 0.4 ^ 4 + 2 * comb(4, 2) * 0.4 ^ 2 * 0.1 ^ 2 probtriple ↤ 2 * comb(4, 1) * 0.4 ^ 3 * 0.5 + comb(4, 1) * 0.1 ^ 3 * 0.8 probpair ↤ 2 * comb(4, 2) * 2 * 0.4 ^ 3 * 0.1 + comb(4, 2) * 2 * 0.4 ^ 2 * 0.1 ^ 2 Confirm that these probabilities sum to 1.0 (up to JavaScript rounding errors): sum [probvenus, probdogs, probvultures, probsenio, probtwopair, probtriple, probpair] Now let's confirm these theoretical calculations by running a simulation. This code block will yield a random hand only: {tali ↤ roll; hand} This will generate a sample of 10 random hands: 10 # {tali ↤ roll; hand} Finally, this will compute a frequency table for 100,000 random hands: freq (100000 # {tali ↤ roll; hand}) These empirical results compare favourably to our theoretical results. Here are the results generated by pasting all this stuff into the browser interface: hand ← lookup [max (range (tally tali)) = 1, "venus", max tali = 1, "dogs", max (range (tally tali)) = 4, "vultures", max tali = 6, "senio", max (range (tally tali)) = 3, "three of a kind", min (range (tally tali)) = 2, "two pair", max (range (tally tali)) = 2, "pair", true, "cheater!"]
score ← sum tali
pmf ← {"1":0.1,"3":0.4,"4":0.4,"6":0.1}
roll ← 4 # select [1, 0.1, 3, 0.4, 4, 0.4, 6, 0.1]
tali ↤ roll → [4, 4, 3, 3] hand → "two pair" score → 14
prob (sum (roll)) → {"4":0.00010000000000000003,"6":0.0016000000000000007,"7":0.0016000000000000007,"8":0.009600000000000004,"9":0.01960000000000001,"10":0.03520000000000001,"11":0.08160000000000003,"12":0.10720000000000005,"13":0.14720000000000003,"14":0.19260000000000008,"15":0.14720000000000005,"16":0.10720000000000005,"17":0.08160000000000003,"18":0.035200000000000016,"19":0.019600000000000006,"20":0.009600000000000004,"21":0.0016000000000000007,"22":0.0016000000000000007,"24":0.00010000000000000003} stats (sum (roll)) → {"min":4,"max":24,"mean":14.000000000000004,"median":14,"sd":2.4083189157584557,"count":19}
probvenus ↤ 4! * 0.1 ^ 2 * 0.4 ^ 2 → 0.03840000000000002
probdogs ↤ 0.1 ^ 4 → 0.00010000000000000005
probvultures ↤ 2 * 0.4 ^ 4 + 0.1 ^ 4 → 0.051300000000000026
probsenio ↤ comb(4,3) * 0.1 ^ 3 * 0.9 + comb(4,2) * 0.1 ^ 2 * 0.9 ^ 2 + comb(4,1) * 0.1 * 0.9 ^ 3 - probvenus → 0.3054
probtwopair ↤ comb(4,2) * 0.4 ^ 4 + 2 * comb(4,2) * 0.4 ^ 2 * 0.1 ^ 2 → 0.17280000000000006
probtriple ↤ 2 * comb(4,1) * 0.4 ^ 3 * 0.5 + comb(4,1) * 0.1 ^ 3 * 0.8 → 0.25920000000000004
probpair ↤ 2 * comb(4,2) * 2 * 0.4 ^ 3 * 0.1 + comb(4,2) * 2 * 0.4 ^ 2 * 0.1 ^ 2 → 0.17280000000000006
sum [probvenus, probdogs, probvultures, probsenio, probtwopair, probtriple, probpair] → 1.0000000000000002
{tali ↤ roll; hand} → "pair"
10 # {tali ↤ roll; hand} → ["senio", "three of a kind", "three of a kind", "three of a kind", "senio", "two pair", "senio", "three of a kind", "senio", "senio"]
freq (100000 # {tali ↤ roll; hand}) → {"three of a kind":0.25925,"two pair":0.17235,"pair":0.17307,"senio":0.30498,"venus":0.03891,"vultures":0.05134,"dogs":0.0001}
|
|
|
Post by waysoftheearth on Jul 2, 2014 1:09:08 GMT -6
For the past few weeks, I've been developing a virtual dice roller. ... It is also 100% free with a GPL license. This is awesome work. I'd like to have more time to mess about with it; I checked out the extended examples and I suspect it has WAY more utility that most dice rollers ever dreamed of. One question: d6 - d6 : the difference of two d6s Can I do the signed and the absolute difference? I.e., 2 - 5 = -3 (signed) or 3 (absolute)? Another one: Can I set the random number seed explicitly, so that I can reproduce the same results between sessions?
|
|
|
Post by krusader74 on Jul 2, 2014 1:55:39 GMT -6
Thank you very much for your encouragement! One question: d6 - d6 : the difference of two d6s Can I do the signed and the absolute difference? I.e., 2 - 5 = -3 (signed) or 3 (absolute)? By default, d6 - d6 produces the signed difference. Writing an absolute value function is one of my todos; when its done, you'll be able to write this: abs(d6 - d6). In the meantime, you could always do this: √((d6 - d6)^2) ... or this ... {roll <| d6 - d6; lookup [roll<0, -1 * roll, true, roll]} Another one: Can I set the random number seed explicitly, so that I can reproduce the same results between sessions? This is something I wanted to do. According to this Q&A on stackexchange, Javascript Random Seeds, JavaScript doesn't expose an interface for seeding. So the solution is to write my own PRNG or use somebody else's. This is a feature I want too, so I will eventually do this. Thanks again for your support and questions!
|
|
|
Post by kesher on Jul 2, 2014 7:03:22 GMT -6
Um, awesome! You've now determined how I'm going to avoid working today...
|
|
|
Post by Finarvyn on Jul 2, 2014 8:24:54 GMT -6
This is really impressive. I have a hard time thinking of getting rid of those little plastic shapes that I can throw onto a table to generate a random number. Dice are just so integrated into my psyche along with gaming...
|
|
|
Post by krusader74 on Jul 3, 2014 17:45:54 GMT -6
Three images of Palamedes, the mythological inventor of dice. All three are licensed for re-use: (1) Painting of Palamedes before Agamemnon (1626) by Rembrandt. Look closely to see a self-portrait of Rembrandt behind Agamemnon's scepter. Source. (2) Portrait of Palamedes designed as a medal from the book Promptuarii Iconum Insigniorum (1553) by Guillaume Rouille. Source. (3) Statue of Palamedes by Venetian sculptor Antonio Canova (1757 - 1822). Source.
|
|
|
Post by krusader74 on Jul 3, 2014 18:11:07 GMT -6
I found this set of plastic knucklebones for sale at eBay for $3.99. The seller notes they may be used to play dice games (as I described above), to play jacks, or for divination. I have a strong dice fetish, and I don't have a set of knucklebones in my collection yet, so I might give these a try.
|
|
|
Post by krusader74 on Jul 3, 2014 19:08:24 GMT -6
Additional notes on knucklebones. Terminology. The dice themselves were called "astragali" (αστράγαλοι) meaning "knucklebones." Today the dice are called κότσια, originally a Byzantine term. The dice are carried in a pouch made of leather or cloth called formiskos (φορμίσκος). The game itself is called "astragalismos" (αστραγαλισμός). The dice have 4 sides. Two are broad, and two are narrow. Refer to this image: - The curved, small side is called "kyon" (κυών) meaning "dog"; it is sometimes called "hios" (χίος). It counts for one point.
- The wide, convex side is called the "belly" or "pranes" (πρανές). It counts for four points.
- The wide concave, side is called the "back" or "yptios" (ύπτιον). It counts for three points.
- The flat small S-shaped side "koos" (κώον) or "exites" (εξίτης) counts for six points.
The two pairs of opposite sides have the same sum in points: 6 (κώον) + 1 (κυών) = 7 = 3 (ύπτιον) + 4 (πρανές). The worst single roll is a 1 or dog (κυών), and the worst hand is four-of-a-kind called "gypas" (γύπας) or "vulture." Sources. 1. Here is a helpful PDF booklet on how to do divination with knucklebones. That's where I got the above image. Astragaloi: Greco-Roman Dice Oracles by Jenna Mortensen2. I also referenced this web page on ancient Greek toys to get the proper terminology: Asragalomantia - Knucklebones
|
|
|
Post by kent on Jul 3, 2014 19:11:24 GMT -6
Is the point of knucklebones, now, that they do not each have the regularity which ensures precisely the same probabilities, whether known or unknown, from one to another? That is organic knucklebones are interesting, mass produced knucklebones are not.
|
|
|
Post by krusader74 on Jul 3, 2014 21:12:43 GMT -6
Is the point of knucklebones, now, that they do not each have the regularity which ensures precisely the same probabilities, whether known or unknown, from one to another? That is organic knucklebones are interesting, mass produced knucklebones are not. For me, the appeal of knucklebones is that they symbolize the mythological origins of dice, jacks, dominoes, poker, gambling, and probability theory---all of which I find fascinating. So I wouldn't mind adding a set of plastic knucklebones to my existing collection of plastic dice. It's true that the asymmetry of actual knucklebones makes it difficult to find regular patterns of probability. That said, in general, the empirical probabilities for an astragalus is roughly Face Probability ---- ----------- 1 1/10 3 4/10 4 4/10 6 1/10 And so I would hope that a set of mass produced, plastic alstragali would conform to these probabilities. But I understand how some might find the non-regular probabilities of actual bones appealing: The ancient Greeks and Romans (at least some of them) had the skills to compute tables of probabilities for their dice, but they made no attempt to do so. They didn't believe their dice were governed by probabilities. Instead they believed their dice were governed by the goddess Tyche. And that the outcome of a die roll in some way reveals her will. It's interesting to me that in modern day games, we often assign the smallest probability to best outcome. For example, in poker the Royal Flush has the worst odds (649,739 : 1). Alternatively, in AD&D we go for balance between best and worst outcomes: a natural 20 always hits, and a natural 1 always misses. But in astragali, the best outcome "Venus" is 384 times more likely than the worst outcome "Dogs". So beyond the fact that real tali lack regular patterns of probability, the game of knucklebones itself lacks game balance. And that may also be appealing to some.
"I was seeking the Venus with favorable tali, but the dam-ed dog always leapt out." -- Propertius (50BC-15AD)
|
|
|
Post by krusader74 on Jul 4, 2014 7:58:43 GMT -6
One question: d6 - d6 : the difference of two d6s Can I do the signed and the absolute difference? I.e., 2 - 5 = -3 (signed) or 3 (absolute)? I just uploaded a new version of the software to palamedes.altervista.org/It contains an abs function. It also contains several other new functions (drop, inv, shuffle, sort, table, take). I also overloaded the '*' operator to do convolutions and string repetition. And there are a couple small fixes. See the NEWS file for details. In brief, you can now enter the following expression: table(prob(abs(d6-d6))) And get back these results: table (prob (abs (d6 - d6))) → key value 0 0.16666666666666669 1 0.2777777777777778 2 0.2222222222222222 3 0.16666666666666666 4 0.1111111111111111 5 0.05555555555555555 And here is the output of the shuffle example in the NEWS file that shows how to create a deck of 52 cards, shuffle them, and deal out 5: ranks ← [2..10] ∪ ["J", "Q", "K", "A"]
suits ← ["♠", "♡", "♢", "♣"]
concat ← ranks + s
cards ← flatten (map concat, s, suits)
take (shuffle cards), 5 → ["Q♠", "4♠", "10♡", "10♠", "6♠"] I still have a lot more work to do, but I wanted to announce this update, since it contains the abs function you asked about. A ZIP file with the source code is still at the dropbox address.
|
|
|
Post by kent on Jul 4, 2014 9:15:58 GMT -6
I never liked the plastic tetrahedral d4 because they are too light, they plop don't roll and the true face is unseen. You can make however a nice d4 with 4 marbles and glue. 1.bp.blogspot.com/-hBVssv8CZFE/UBASAYUy5JI/AAAAAAAABMk/n8omtvbJ1AY/s1600/DSCF1374.JPGBy the same principle I imagine one could make some nice knucklebones with probability ratio 1:4:4:1 by gluing together two pairs of marbles, one pair slightly larger, say 1.3 to 1.5 times the diameter of the smaller. Or a pair of glass marbles and a pair of 'steelies' of the same size.
|
|
|
Post by krusader74 on Jul 5, 2014 1:33:13 GMT -6
There used to be a blog over on freewebs dot com called "The Devil's Picturebook" that had a statistical analysis of tali. The site has been frozen, but fortunately it has been archived by the wayback machine. The author used "four modern-day authentic imported Mongolian knucklebones." He rolled them 100 times in each of two ways: - One-handed roll onto a Persian rug
- Two-handed drop from a height of 12 inches
Additionally, he tested four hand-carved ivory tali 100 times and one lead talus 100 times. Here is a summary of his results: Face Mongolian bones: Rolled Mongolian bones: Dropped Ivory Tali Lead Talus ---- ----------------------- ------------------------ ---------- ---------- 1 0.145 0.0975 0.0975 0.04 3 0.3425 0.375 0.39 0.44 4 0.38 0.44 0.38 0.49 6 0.1325 0.0875 0.1325 0.03
The author speculates that the lead talus was used for religious purposes rather than gambling, given the infrequency of a "6" compared with the other tali. It is unfortunate the author didn't test each bone individually (he cast all 4 at once), and that the sample sizes are so small. Nevertheless, this experiment still interests me in that it shows the irregular probability patterns of knucklebones.
|
|
|
Post by krusader74 on Jul 5, 2014 9:12:32 GMT -6
I just uploaded a new build of the Palamedes software to palamedes.altervista.org that includes the following changes: - Added "mode" function
- Included "mode" function in "stats" function
- Fixed bug in "stats" that made expressions like "stats(abs(d6-d6))" fail. See NEWS for details
- Fixed "table" function to work with objects whose domain include non-numbers, e.g., table {"a":0.25,"b":0.5,"c":0.25}
- Changed "table" function to make decimal points line up when printing pmfs, e.g., table(prob(3d6))
- Fixed "domain" function to work with objects whose domain include non-numbers
- Fixed link to "...more..." in "Palamedes" frameset on index.html
The source code is on dropbox.
|
|
|
Post by krusader74 on Jul 9, 2014 6:39:08 GMT -6
Uploaded a new build to palamedes.altervista.org that includes the following changes: - Added cross (×) function. Note that × is not the letter "eks" x. Overloaded cross to handle:
- Vector cross product exactly when both arguments are 3-element arrays of numbers
- Matrix multiplication when both arguments are arrays of arrays and have compatible dimensions
- Cartesian products otherwise
- Implemented C-style comments: /* comment */
- Added trans function to transpose an array or matrix
- Added det function to calculate determinant of matrix
- Augmented existing inv function to do matrix inverse
- Redefined arithmetic operations for
- matrix op matrix
- matrix op array
- matrix op scalar
- Matrix^Power does repeated matrix multiplication, Matrix^-1 does inverse
- With these new matrix functions, you can
- Solve a system of linear equations
- Perform a linear regression
See the NEWS file for details. Or download the SOURCE.
|
|
|
Post by ritt on Jul 10, 2014 10:27:52 GMT -6
This is absolutely fascinating. Thanks very much for sharing this.
|
|
|
Post by tetramorph on Jul 10, 2014 12:55:45 GMT -6
This is rad. I love the stuff about Palamedes. I had never even heard of him! So cool. I am not a programmer, so some of that escapes me. I use the "any dice" online dice calculator when I am interested in this kind of stuff: anydice.comI never take my questions in this vein much further than what it can answer for me. krusader, are you familiar with it? What do you think?
|
|
|
Post by krusader74 on Jul 11, 2014 0:32:21 GMT -6
This is rad. I love the stuff about Palamedes. I had never even heard of him! So cool. I am not a programmer, so some of that escapes me. I use the "any dice" online dice calculator when I am interested in this kind of stuff: anydice.comI never take my questions in this vein much further than what it can answer for me. krusader, are you familiar with it? What do you think? I agree, Anydice is excellent! I also like the Troll dice roller and probability calculator written by Torben Ægidius Mogensen. Check out the PDF user manual to see what Troll is capable of. Additionally, Professor Mogensen wrote an interesting paper About dice-mechanisms in role-playing games that's well worth reading. Another tool that I've used is Dicelab. It runs on the Windows or Linux command-line. And it has a well written PDF user manual with sample usage on pages 17-18.
|
|
|
Post by krusader74 on Jul 11, 2014 7:28:09 GMT -6
Just uploaded build 27 to palamedes.altervista.org that includes the following changes: - Fixed a regression in the domain function that caused it to fail on singleton objects, which in turn made the knucklebones example fail.
- Changed the behavior of union/∪ in a way that breaks backward compatibility. See NEWS for details.
- Added concat/⊎, powerset and permute array operators.
- Added set operators: intersect, diff (difference) and sdiff (symmetric difference), respectively, ∩, \, and Δ.
- Infix set and array operators now have precedence between relational expressions and additive expressions.
- No longer need parentheses to string together multiple infix operators: of/after/∘, union/∪, cross/×, dot/., etc.
- Added set comparisons: subset/⊂ and subseteq/⊆.
- Added all/∀ and some/∃ quantifiers that apply to arrays or matrices of boolean values.
- Added approx/≈ equality comparison and the tol variable which stores the tolerance to use to check approximations.
- Added prod/Π operator to take the cartesian product of an array of arrays. Note that Π is uppercase pi, not to be confused with lowercase pi/π which is the constant 3.141592653589793
- Added lcm and gcd functions. These each operate on an array of integers.
See the NEWS file for details. Or download the SOURCE.
|
|
|
Post by tetramorph on Jul 11, 2014 9:27:57 GMT -6
Thanks for the links! Duly bookmarked. And thanks for the article. That will giving me a lot of distraction for all my free time (ha!)! Have you seen this HTML article? It is one I am familiar with. It footnotes the one you linked to: rpg-design.wikidot.com/evaluationIt is not clear who the author is. What do you think of it?
|
|
|
Post by krusader74 on Jul 14, 2014 0:45:11 GMT -6
Thanks for the links! Duly bookmarked. And thanks for the article. That will giving me a lot of distraction for all my free time (ha!)! Have you seen this HTML article? It is one I am familiar with. It footnotes the one you linked to: rpg-design.wikidot.com/evaluationIt is not clear who the author is. What do you think of it? Thanks for the link! It was an interesting read. A couple years ago, I did a similar analysis and came to similar conclusions. Here's a table summarizing my own thoughts on what the ideal DoS distribution would look like: Moment | Low skill | Med skill | High skill | 1 Mean | low | med | high | 2 Variance | high | med | low | 3 Skewness | Right (postive)* | Symmetric (zero) | Left (negative)* | 4 Kurtosis | Platy-kurtic** | Meso-kurtic | Lepto-kurtic** | Ideal continuous distrib | Log-normal | Normal | Skew-normal with negative alpha (α<0) | Discrete approximation | Negative binomial | Convolution of discrete uniform | Not sure of the name; see techmologist's post here | Best approx dice throw | How many successes x rolled before r failures? | Sum of n dice | Roll n, keep the k highest, and sum |
Notes:* The low skill PC gets a positively skewed distribution, because although most of his output is poor, once in a while he'll get really lucky and score high. Similarly, a high skill PC gets a negatively skewed distribution, because though he usually scores high, once in a while he effs-up and does quite bad. ** You can see this on the graph of the ideal DoS in the link you sent---the low skill distribution is wide and flat, whereas the high skill distribution is narrow and acute.
|
|
|
Post by krusader74 on Aug 12, 2014 3:51:12 GMT -6
Just uploaded build 28 to palamedes.altervista.org that includes the following changes: - Negative numbers are now handled at the lexer level, so -2 is parsed as -2 rather than -1 * 2. The trade-off is that you must write Level - 1 with whitespace around the minus symbol, rather than Level-1 or you get a syntax error. 2 - -2 (=4) and 2 + -2 (=0) are syntactically OK. This change affects the D&D Men Attacking example, where the minus had been written without whitespace. In the future, I may change this so that 2-2 is again valid subtraction and ¯2 becomes the unary minus symbol as in 2-¯2.
- Fixed a problem with numeric functions like abs, ln and floor threading over arrays. So the expression abs [-0.1,.5,-.5,1,-2,3,-4] yields [0.1, 0.5, 0.5, 1, 2, 3, 4] instead of []
- Some functions now require parens around their args, e.g., abs(-0.1) is OK, but abs -0.1 is a syntax error. No parens necessary if threading over an array, so abs [-0.1,.5,-.5,1,-2,3,-4] is OK. The functions that require parens are: U, N, Φ, Phi, probit, abs, acos, acosh, asin, asinh, atan, atanh, atan2, ceil, comb, cos, cosh, exp, floor, ln, log, perm, round, sin, sinh, tan, tanh. This change affects the tali example, which used the comb function without parens.
- Some functions are now case sensitive, namely, U, N, Φ, Phi, probit, abs, acos, acosh, asin, asinh, atan, atanh, atan2, ceil, comb, cos, cosh, exp, floor, ln, log, perm, round, sin, sinh, tan, tanh
- Added U function to generate random variates from a continuous uniform distribution over given range. U() defaults to U(0,1)
- Added Phi (or Φ) function: Cumulative distribution function for standard normal distribution.
- Added probit function: quantile function (or inverse cumulative distribution function) for standard normal distribution.
- Added N function to generate random variates from a normal distribution. N() defaults to the standard normal distribution N(0,1). Otherwise N(mu,sigma) defaults to a normal distribution with mean mu and standard deviation sigma.
- Note that the functions U, N, Φ, etc. are distinct from the variables U, N, Φ, etc.
- Added log function: base 10 logarithm. ln is still base e logarithm
- Added exp(x) function as alternative to e^x
- Added trig functions: cos, sin, tan. Added their inverses: acos, asin, atan
- Added hyperbolic trig functions: cosh, sinh, tanh. Added their inverses: acosh, asinh, atanh
- Added ceil and round functions. These are JavaScript implementations. May add alternative rounding functions in the future.
- Added inf (or Inf or INF or ∞) special variable used as upper limit for operations that compute a sequence, series or limit.
- Variable names may now contain dollar signs $. Question marks ? may be used except in the initial position.
See the NEWS file for more details. Or download the SOURCE code.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Aug 12, 2014 5:21:26 GMT -6
Sweet! As soon as my homepage return to running, expect a link on a prominent spot.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Aug 12, 2014 9:01:56 GMT -6
|
|
|
Post by krusader74 on Aug 12, 2014 23:24:14 GMT -6
Thanks! These reproductions look much more authentic than the ones I found on eBay, and they're a good value. This link has a whole bunch of historical dice reproductions for sale: historicgames.com/RPdice.htmlScroll down for a video on how to score with knucklebones. Great video! He explains how to remember the numerical values for each side of a knucklebone. Very useful. Their $20 bag of knucklebones is by far the best I've seen so far. Plus it comes with 6 wooden dice and a book of Early Dice Games (circa 1280-1700). And their NSFW dice are a real blast! Thanks for the links!
|
|
|
Post by krusader74 on Aug 12, 2014 23:26:26 GMT -6
Sweet! As soon as my homepage return to running, expect a link on a prominent spot. Thanks very much, I appreciate it!
|
|
|
Post by krusader74 on Aug 13, 2014 6:27:47 GMT -6
Can I set the random number seed explicitly, so that I can reproduce the same results between sessions? Yes, it is now possible to set the random number seed explicitly, so that you can reproduce the same results between sessions! I just uploaded build 29, which incorporates this functionality. Quoting from the NEWS file: Try it online at palamedes.altervista.org or download the SOURCE.
|
|