A Numeric Approach to Diversity Hills

Achille Astolfi

Abstract

I like a lot the idea of a Diversity Hill for Corewar Warriors (Note 1). There is a thread about Diversity Hills on `rec.games.corewar` and I already posted some of my ideas there. Anyway, I think that an example that uses real warriors and real numbers can lead to clearer ideas for anyone interested in the thread.

In order to start the game, I used the published warriors on John Metcalf's Infinite Tiny Hill. I defined two distances on the warriors' space and tried to define a numeric discriminant, in order to decide if a new challenger succeeds or not in entering the hill, and which warrior should be pushed off the hill after a new successful challenge.

I tried to compare other distances and discriminants; many questions arise, and I tried to answer to some of them. Most questions still miss a satisfying answer.

Definitions

In order to have a fast and simply result, I defined a Tiny Hill in the usual way (Note 2); I decided to make only 2 fights of 250 rounds each, including self-fights. The hill contains 20 slots.

Then I defined the distances between two warriors; I used the classic "euclidean distance" between the points identified by the wins/losses/ties scored against all the warriors on the hill, including the two, as the first distance; I considered only the wins/losses scores for the second distance (Note 3).

Initialization

I entered the least 20 warriors listed on John Metcalf's Pure Infinite Tiny Hill in reverse order (i.e. starting from the last) and this is what I got:

Diversity Tiny Hill after challenger #20 tinyak47.red

#WarriorWinsLossesTiesScoreNearest warrior 1Distance 1Nearest warrior 2Distance 2
1quickd.red 54273386118717468tinyak47.red 606.31tinyak47.red537.24
2tinyak47.red53923395121317389quickd.red 606.31quickd.red 537.24
3tinydawn.red41571610423316704tinybarb.red 613.54pergamen.red516.71
4tinybarb.red39241527454916321pergamen.red 560.57pergamen.red455.46
5szczur.red 46953476182915914ugly.red 739.15stunner.red 674.28
6ugly.red 44333179238815687euthin.red 641.25squirm.red 539.74
7sept.red 45693796163515342stunner.red 861.89stunner.red 675.99
8euthin.red 43623584205415140ugly.red 641.25ugly.red 551.93
9squirm.red 40733263266414883ugly.red 667.75ugly.red 539.74
10pergamen.red31741589523714759tinybarb.red 560.57tinybarb.red455.46
11ricket.red 40714063186614079tinytom.red 695.65tinytom.red 595.33
12tinytom.red 39324258181013606tinyever.red 539.72tinyever.red445.13
13snake.red 26802274504613086pergamen.red 708.80pergamen.red505.33
14tinyever.red33574460218312254tinytom.red 539.72tinytom.red 445.13
15stunner.red 29623787325112137snow.red 688.92snow.red 536.91
16snow.red 20223829414910215stunner.red 688.92stunner.red 536.91
17tinybrut.red229846323070 9964snow.red 718.48snow.red 612.58
18tinyspir.red138732015412 9573snake.red 1005.47snake.red 843.36
19tinyclp.red 27156472 813 8958tinybrut.red1015.44tinybrut.red823.50
20tiny-p.red 184556942461 7996tinybrut.red1059.45tinybrut.red868.69

According to both distances, the nearest warriors on the hill are `tinytom.red` and `tinyever.red`. The header lines in the warriors are:

```;name Tiny Tom
;author M Joonas Pihlaja
;strategy clear, clp```
```;name Tiny Everclear S
;author Franz
;strategy  jmz scan -> spl/spl/dat clear```

If you read the code, you indeed can guess that the claims are correct; anyway, they score "nearly the same" in this hill. The first question arise: why do a P-switcher and an oneshot score so similar?

Maybe the answer is that the claims in the `;strategy` lines and the further inspection of the warriors' code are not enough to classify the warriors, and we must inspect their behaviour, too: it seems like "clear, clp" was not a good choice for a P-switcher (Note 4).

The next challenge

This is what I got when I entered the 21st challenger:

Diversity Tiny Hill after challenger #21 silkligh.red

#WarriorWinsLossesTiesScoreNearest warrior 1Distance 1Nearest warrior 2Distance 2
1tinyak47.red55193621136017917quickd.red 618.49quickd.red 549.57
2quickd.red 54553672137317738tinyak47.red 618.49tinyak47.red549.57
3tinydawn.red41601616472417204tinybarb.red 617.19silkligh.red507.00
4tinybarb.red39461568498616824pergamen.red 562.68pergamen.red456.56
5szczur.red 47913774193516308ugly.red 790.38stunner.red 678.87
6ugly.red 45143287269916241euthin.red 641.79squirm.red 540.43
7sept.red 47343985178115983stunner.red 864.28stunner.red 678.74
8euthin.red 44223706237215638ugly.red 641.79ugly.red 552.51
9silkligh.red32331390587715576pergamen.red 572.98pergamen.red462.46
10squirm.red 41413395296415387ugly.red 668.39ugly.red 540.43
11pergamen.red31901599571115281tinybarb.red 562.68tinybarb.red456.56
12ricket.red 41554380196514430tinytom.red 749.34tinytom.red 643.25
13tinytom.red 41074349204414365tinyever.red 553.08tinyever.red455.43
14snake.red 27062320547413592silkligh.red 626.92silkligh.red484.57
15tinyever.red34384572249012804tinytom.red 553.08tinytom.red 455.43
16stunner.red 30754008341712642snow.red 698.05snow.red 541.48
17snow.red 21143983440310745stunner.red 698.05stunner.red 541.48
18tinybrut.red23594882325910336snow.red 728.43snow.red 620.83
19tinyspir.red14013244585510058snake.red 1005.66snake.red 843.45
20tinyclp.red 27256936 839 9014tinybrut.red1051.70tinybrut.red852.37
21tiny-p.red 189557932812 8497tinybrut.red1082.41tinybrut.red881.79

And now what happens? Should the `tiny-p.red` warrior get pushed off the Hill? "Of course not", because I am going to have this hill as a diversity hill. In fact, right now `tiny-p.red` is the most diverse of all warriors on the hill, in both distances, and must be rewarded for this. So, who will be pushed off the hill?

Discriminant #1

Let it be the less scoring between the new entry and the nearest warrior.

In this case, the nearest warrior is `pergamen.red` in both distances. If we read the headers:

```;name Silk Light
;author Christian Schmidt
;strategy Paper```
```;name Pergament
;author Christian Schmidt
;strategy silk/imps```

we understand that this is a fine choice; not that good, because `pergamen.red` is not a pure paper, but fine.

Anyway, we can notice that the nearest warrior to `pergamen.red`, according to both distances, is not the new challenger, but `tinybarb.red`, a stone/imp. And why are they so similar? Maybe because the imp part is predominant in both warriors. In my opinion, it seems like that comparing `silkligh.red` and `pergamen.red` is not a correct choice.

And more, what happened if the new challenger were `tiny-p.red` instead? It would not enter the hill! It is "randomly" compared to `tinybrut.red`, and loses (Note 5). This means that the order in which we submit the warriors to the hill is important in determining the hill itself. This is not correct in my opinion, and this is definitely the reason why I reject this rule (Note 6).

Discriminant #2

Let it be the less scoring of the two nearest warriors, regardless of if the new entry is one of the two or not.

According to both distances, this would be `tinyever.red` as compared to `tinytom.red`; the new challenger `silkligh.red` is distant enough from the other warriors, and gets its place on the hill.

But again let's think about what happened if the new challenger were `tiny-p.red` instead. It has a far distance from any of the warriors on the hill, but its score is the lowest one. Should it enter the hill, and incidentally push off `tinyever.red`? Its distance is a good hint that the new challenger should get its place on the hill, but its score is a good hint that it should not! (Note 7)

Another question arise: `silkligh.red` enters the hill at 9th, and pushes off `tinyever.red` at 15th; anyway, if by chance the nearest warriors were `tinybarb.red` and `pergamen.red` instead (compare the distances), then `pergamen.red` would be the loser, and it would be pushed off at 11th! Why?

This new rule seems good, but it does not answer these questions, yet. It seems like we need to define a numeric discriminant, in order to assert that we choose the correct warriors on a numeric base. (Note 8)

The Numeric Discriminant

I defined a numeric discriminant as the product of the score by the minimum distance (Note 9).

This is what I got when I ordered the warriors by the numeric discriminant defined by distance 1:

Numeric Discriminant 1 after challenger #21 silkligh.red

WarriorWinsLossesTiesScoreNearest warriorDistanceDiscriminant
/1000
sept.red 47343985178115983stunner.red 864.2813813.8
szczur.red 47913774193516308ugly.red 790.3812889.5
tinyak47.red55193621136017917quickd.red 618.4911081.6
quickd.red 54553672137317738tinyak47.red 618.4910970.9
ricket.red 41554380196514430tinytom.red 749.3410813.0
tinydawn.red41601616472417204tinybarb.red 617.1910618.2
ugly.red 45143287269916241euthin.red 641.7910423.3
squirm.red 41413395296415387ugly.red 668.3910284.6
tinyspir.red14013244585510058snake.red 1005.6610114.9
euthin.red 44223706237215638ugly.red 641.7910036.3
tinyclp.red 27256936 839 9014tinybrut.red1051.70 9480.0
tinybarb.red39461568498616824pergamen.red 562.68 9466.5
tiny-p.red 189557932812 8497tinybrut.red1082.41 9197.2
silkligh.red32331390587715576pergamen.red 572.98 8924.8
stunner.red 30754008341712642snow.red 698.05 8824.8
pergamen.red31901599571115281tinybarb.red 562.68 8598.3
snake.red 27062320547413592silkligh.red 626.92 8521.2
tinytom.red 41074349204414365tinyever.red 553.08 7945.1
tinybrut.red23594882325910336snow.red 728.43 7529.0
snow.red 21143983440310745stunner.red 698.05 7500.6
tinyever.red34384572249012804tinytom.red 553.08 7081.7

And this is what I got when I ordered the warriors by the numeric discriminant defined by distance 2:

Numeric Discriminant 2 after challenger #21 silkligh.red

WarriorWinsLossesTiesScoreNearest warriorDistanceDiscriminant
/1000
szczur.red 47913774193516308stunner.red 678.8711071.1
sept.red 47343985178115983stunner.red 678.7410848.4
tinyak47.red55193621136017917quickd.red 549.57 9846.7
quickd.red 54553672137317738tinyak47.red549.57 9748.3
ricket.red 41554380196514430tinytom.red 643.25 9282.1
ugly.red 45143287269916241squirm.red 540.43 8777.2
tinydawn.red41601616472417204silkligh.red507.00 8722.5
euthin.red 44223706237215638ugly.red 552.51 8640.2
tinyspir.red14013244585510058snake.red 843.45 8483.4
squirm.red 41413395296415387ugly.red 540.43 8315.7
tinyclp.red 27256936 839 9014tinybrut.red852.37 7683.3
tinybarb.red39461568498616824pergamen.red456.56 7681.2
tiny-p.red 189557932812 8497tinybrut.red881.79 7492.6
silkligh.red32331390587715576pergamen.red462.46 7203.3
pergamen.red31901599571115281tinybarb.red456.56 6976.7
stunner.red 30754008341712642snow.red 541.48 6845.4
snake.red 27062320547413592silkligh.red484.57 6586.2
tinytom.red 41074349204414365tinyever.red455.43 6542.2
tinybrut.red23594882325910336snow.red 620.83 6416.9
tinyever.red34384572249012804tinytom.red 455.43 5831.3
snow.red 21143983440310745stunner.red 541.48 5818.2

In either case, it is numerically clear that `silkligh.red` makes its way on the hill; anyway it pushes off `tinyever.red` in the first case, and `snow.red` in the second case. Incidentally, if the new challenger were `tiny-p.red` it would enter the hill in either case, too, and again it would push off the same warriors (Note 10).

Let's study the results of the challenge: we already noticed, in the first case, that `tinyever.red` is too similar to `tinytom.red`, and both are scoring low. The same holds in the second case: `snow.red` is the less scoring of a couple of similar warriors, and both are scoring low (the other one is `stunner.red`).

The result is that a paper enters the diversity hill and pushes off an undisclosed strategy warrior (maybe a scanner, if one inspects the code), because the latter is too similar to a bomber -> clear... This seems to make no sense! Maybe 20 slots are not enough to ensure a full diversity. Anyway, this makes me think (again) that the claims in the `;strategy` lines are not always correct (Note 11).

The behaviour of a warrior against other warriors is the only numeric classification I can think of so far. The claims in the `;strategy` lines of a warrior and the further investigations of its code are not enough to classify a warrior; this is even more true if the code of a warrior is undisclosed, as is the rule for the most popular hills.

Conclusions

The most positive aspect of the numeric discriminant is that if you submit a warrior that behaves almost identically to another one in the hill (possibly the same warrior), their distances will approach to 0, and so will do the discriminant; in this case, the less scoring of the two warriors will be pushed off the hill, leaving the hill as diverse as it was before the challenge. This answers one of the questions that arised in the thread on `rec.games.corewar` (Note 12).

We still have to answer a question: in fact, we should notice that a P-switcher behaves differently from the other warriors (not always better, but surely different). In this case, `tinytom.red` does not, in both distances. My first answer was that maybe the "clear, clp" strategy is not a good choice; but maybe the hill is not diverse enough, yet to allow a correct switch. This last consideration is not good, of course.

So again this is an open question: should we consider the distance comparing the results with a chosen benchmark, instead of comparing the results against the other warriors in the hill? I still do not think so, because other questions would arise: how to choose the warriors for the benchmark? And how to update the benchmark, in order to keep trace of the new strategies that possibly may arise?

The end of the game

I prefer the first distance, so I kept on inserting the warriors from John Metcalf's Infinite Tiny Hill in reverse order into the Diversity Hill defined by distance 1. Here are the summary of the results:

#ChallengerPushes off #ChallengerPushes off #ChallengerPushes off
22wasp.red tinybrut.red 23mighty.red snow.red 24phantom.red ugly.red*
25tinygold.redtinyclp.red 26litt_hot.redstunner.red 27littreve.redtinydawn.red*
28tinysolo.redpergamen.red 29tinydclr.redtinydclr.red* (quickd.red) 30venom.red litt_hot.red*
31stolen1.red stolen1.red* (littreve.red) 32titan.red tinyak47.red 33incisor.red szczur.red
34tinytibe.redvenom.red* 35dusting.red tiny-p.red 36musket.red silkligh.red
37tinywick.redtinytom.red 38tritiny.red titan.red 39tci.red tinyspir.red
40tinyuniv.redwasp.red* 41snowst.red tinybarb.red* 42djinn.red euthin.red
43helptiny.redsnake.red 44wipe.red wipe.red* (tinywick.red) 45tinypoke.redmighty.red*
46tinypap1.redmusket.red 47tinyport.redtinywick.red* 48impx.red tinygold.red
49sum3.red incisor.red* 50oneshott.redquickd.red 51yaos.red yaos.red* (oneshott.red)
52cl-skies.redcl-skies.red* (tinyport.red) 53talon.red oneshott.red 54tinytim.red tinyuniv.red
55tinyfree.redtinyfree.red* (talon.red) 56sod2.red littreve.red* 57rasp.red rasp.red* (tinypap1.red)
58tinybish.redhelptiny.red* 59sniff.red tinysolo.red* 60clockwrk.redsniff.red*
67moomin.red troll.red* 68tinyboss.redsum3.red* 69oos.red tinyboss.red
70kb2.red tinytim.red* 71wing66.red tinybish.red* 72snufkin.red moomin.red*
73tinyblow.redtalon.red 74hired.red hemulen.red* 75gunman.red gunman.red* (hired.red)
79wingshot.redwing66.red* 80wshot-t.red wshot-t.red* (wingshot.red) 81potenza.red tinytibe.red
82tscan.red dettol.red* 83s774.red s774.red* (tscan.red) 84dk-skies.reddk-skies.red* (wingshot.red)
85t766.red t766.red* (tscan.red) 86e-threat.redclockwrk.red 87swarm.red snufkin.red*
88tinyshot.redtinyshot.red* (wingshot.red) 89tinybi2.red wingshot.red* 90easter.red kb2.red*

The starred warriors are those warriors being pushed off because they were too near to the new challenger. If the new challenger did not make it, I wrote the nearest warrior in parenthesis. Most of the results makes no wonder: see how oneshots and bishots keep pushing off other oneshots and bishots while approaching the top of the hill.

The resulting hill is:

Diversity Tiny Hill after challenger #90 easter.red

#WarriorWinsLossesTiesScoreNearest warrior 1Distance 1
1easter.red 45752982244316168potenza.red 488.87
2tscan.red 47373551171215923tinybi2.red 391.31
3e-threat.red46023304209415900tscan.red 496.53
4swarm.red 37991829437215769tinyblow.red573.55
5tinybi2.red 47283728154415728tscan.red 391.31
6potenza.red 42432799295815687easter.red 488.87
7tinyblow.red33771342528115412swarm.red 573.55
8hired.red 44453969158614921tinybi2.red 408.74
9oos.red 45494241121014857tinybi2.red 483.68
10muskrat.red 45554673 77214437djinn.red 533.38
11tci.red 35293366310513692dusting.red 585.48
12snowst.red 31372652421113622swarm.red 624.93
13dusting.red 32963764294012828e-threat.red523.57
14tinypoke.red36164570181412662muskrat.red 615.40
15impx.red 32464243251112249dusting.red 631.04
16djinn.red 37495382 86912116muskrat.red 533.38
17phantom.red 33044620207611988dusting.red 527.17
18sept.red 33465499115511193ricket.red 645.60
19squirm.red 28574717242610997dusting.red 598.34
20ricket.red 31095568132310650sept.red 645.60

And the resulting numeric discriminant is:

Numeric Discriminant 1 after challenger #90 easter.red

WarriorWinsLossesTiesScoreNearest warriorDistanceDiscriminant
/1000
swarm.red 37991829437215769tinyblow.red573.559044.3
tinyblow.red33771342528115412swarm.red 573.558839.5
snowst.red 31372652421113622swarm.red 624.938512.9
tci.red 35293366310513692dusting.red 585.488016.4
easter.red 45752982244316168potenza.red 488.877904.1
e-threat.red46023304209415900tscan.red 496.537894.9
tinypoke.red36164570181412662muskrat.red 615.407792.2
impx.red 32464243251112249dusting.red 631.047729.7
muskrat.red 45554673 77214437djinn.red 533.387700.4
potenza.red 42432799295815687easter.red 488.877669.0
sept.red 33465499115511193ricket.red 645.607226.2
oos.red 45494241121014857tinybi2.red 483.687186.0
ricket.red 31095568132310650sept.red 645.606875.6
dusting.red 32963764294012828e-threat.red523.576716.4
squirm.red 28574717242610997dusting.red 598.346579.9
djinn.red 37495382 86912116muskrat.red 533.386462.4
phantom.red 33044620207611988dusting.red 527.176319.7
tscan.red 47373551171215923tinybi2.red 391.316230.9
tinybi2.red 47283728154415728tscan.red 391.316154.6
hired.red 44453969158614921tinybi2.red 408.746098.8

The distances flattened since the first challenges; this makes me think that maybe 20 slots are too few. But the warriors are more or less equally spaced, and this is good. The most winning strategy gets the most warriors on the hill, as far as it allows many variants.

Anyway, 3 of the least 20 warriors survived 70 challenges! This means that the strategies in `ricket.red`, `squirm.red`, and `sept.red` are really diverse and maybe competitive! Maybe they just need some good implementation?

Notes

Note 1 A hill with many different strategies can help developing smarter warriors, and more important it can enhance the development of new strategies for Corewars. The developer of a new idea can find it frustrating to see his or her warrior continuously failing in entering a standard hill; finally, he or she would quit the idea. And maybe it was a good idea, but the hill was not diverse enough, it was just full of warriors based on the same strategy, and the new warrior failed against only that strategy. top

Note 2 ```CORESIZE==800 && MAXPROCESSES==800 && MAXCYCLES==8000 && MAXLENGTH==20 && MINDISTANCE==20```. I used the `-f` flag of pMars in order to always replicate the same results. top

Note 3 As an example for the first distance: say `warrior1` scores `200 180 120` against itself, scores `120 140 240` against `warrior2`, scores `160 160 180` against `warrior3`, and so on; say `warrior2` scores `120 140 240` against `warrior1`, scores `180 180 140` against itself, scores `120 160 220` against `warrior3`, and so on; the distance between `warrior1` and `warrior2` is:

```sqrt(
(200 - 120)^2 + (180 - 140)^2 + (120 - 240)^2 //scores against warrior1
+ (120 - 180)^2 + (140 - 180)^2 + (240 - 140)^2 //scores against warrior2
+ (160 - 120)^2 + (160 - 160)^2 + (180 - 220)^2 //scores against warrior3
//and so on with the scores against the other warriors on the hill
)```

I dropped the ties score for the second distance because the ties score is not independent of the wins and the losses. While the most distant points using the first distance are `500 0 0`, `0 500 0`, and `0 0 500`, the most distant points using the second distance are just `500 0 0` and `0 500 0`. The "full ties score" is slightly nearer and half way between the "full wins" and "full losses"; this gives some kind of semantics to the second distance.

One could as well drop either the wins or the losses from the first definition and get two other distances; anyway, these distances have no semantics sense in my opinion. top

Note 4 There are other couples of warriors that are similar to each other and distant from the other warriors of the hill. The other couples are:

`quickd.red` (qscan -> dclear) and `tinyak47.red` (scan -> dclear) in both distances:

```;name QuickD
;author Franz
;strategy qscan+dclear
;strategy qscan for tinyhill (no not Q^2)```
```;name Tiny AK-47
;author Franz
;strategy scanner->d-clear```

`tinybarb.red` (stone/imp) and `pergamen.red` (paper/imp) in both distances:

```;name Tiny Barbarian 3
;author Franz
;strategy stone/imp (continuous launching imp with kill fuse)```
```;name Pergament
;author Christian Schmidt
;strategy silk/imps```

`ugly.red` (evolved stone/imp?) with `euthin.red` (qbomb -> clear) in the first distance, and with `squirm.red` (qbomb -> paper) in the second distance:

```;name Ugly
;author John Regehr```
```;name Euthin
;author Philip Thorne
;strategy Nuthin with splits. i.e. stupid quick bomb/clear
;strategy John Metcalf 2002 Tournament Round 1, Warrior 1```
```;name Squirm13
;author Philip Thorne
;strategy tworm6, different engine.
;strategy i.e. silk-worm with chaotic core-copy
;strategy John Metcalf 2002 Tournament Round 1, Warrior 2```

`stunner.red` (bomber -> clear) with `snow.red` (scanner?), in both distances:

```;name Stunner
;author Sascha Zapf
;strategy Fast Incendiary Bomber, Twopass Coreclear
;strategy Two Bombing steps, Bootstrapping```
```;name Snow Castle
;author Compudemon```

Except for `quickd.red` and `tinyak47.red`, these seem not to be couples of similar warriors, at first glance. Anyway, all of these couples are for sure a base for defining different "equivalence classes" for the warriors on the hill. This still needs more investigations. top

Note 5 I say "randomly" because `tiny-p.red` is the most "diverse" of the warriors in the hill; one can correctly state that `tinybrut.red` is the nearest warrior, but for sure it could be any of the other warriors in the hill for a really new strategy! See `tinyspir.red` and `tinyclp.red`, for instance, other "diverse" warriors: they are far distant from the warriors on the hill, and only chance is that the nearest ones are `snake.red` and `tinybrut.red`; this high value makes no sense for a really diverse warrior. top

Note 6 Note that all of these considerations are independent of the chosen distance. The involved warriors may vary as the distance varies; anyway, the results and considerations still hold. top

Note 7 What would happen if the new challenger were not `tiny-p.red` but a suicide `dat.red`? Here are the results:

Diversity Tiny Hill after challenger #21 dat.red

#WarriorWinsLossesTiesScoreNearest warrior 1Distance 1Nearest warrior 2Distance 2
1quickd.red 5646 3672118218120tinyak47.red 557.76tinyak47.red 516.05
2tinyak47.red5521 3621135817921quickd.red 557.76quickd.red 516.05
3tinydawn.red4160 1616472417204silkligh.red 446.68silkligh.red 306.19
4tinybarb.red4120 1550483017190pergamen.red 557.72pergamen.red 450.47
5szczur.red 5124 3742163417006euthin.red 688.34euthin.red 625.90
6ugly.red 4744 3287246916701euthin.red 564.78squirm.red 494.39
7sept.red 5078 3958146416698tinyak47.red 749.45stunner.red 673.29
8silkligh.red3634 1340552616428tinydawn.red 446.68tinydawn.red 306.19
9squirm.red 4382 3177294116087ugly.red 596.87ugly.red 494.39
10pergamen.red3419 1531555015807silkligh.red 512.15silkligh.red 428.91
11euthin.red 4439 3701236015677ugly.red 564.78ugly.red 509.78
12ricket.red 4168 4370196214466tinytom.red 749.19tinytom.red 643.19
13tinytom.red 4126 4345202914407tinyever.red 468.80tinyever.red 404.63
14snake.red 3046 2319513514273silkligh.red 621.91silkligh.red 478.21
15stunner.red 3407 3896319713418snow.red 680.15snow.red 519.06
16tinyever.red3666 4565226913267tinytom.red 468.80tinytom.red 404.63
17tinyspir.red1880 2776584411484snake.red 816.31snake.red 688.48
18tinybrut.red2681 4622319711240snow.red 665.86snow.red 560.88
19snow.red 2323 3964421311182tinybrut.red 665.86stunner.red 519.06
20tinyclp.red 3078 6590 83210066ricket.red 976.84tinybrut.red 847.46
21dat.red 25010250 0 750tinyclp.red 1342.69tinyclp.red 1306.81

This is surely an impressive distance! But anyway the score is impressively poor! We know for sure what to do, that is we would keep `tiny-p.red` and instead we would discard `dat.red`; this means that we are using an intuitive threshold, but we need to numerically define this threshold, that would depend both on the score and the distance. top

Note 8 Again, you can note that all of these considerations are independent of the chosen distance. top

Note 9 Note that this definition is independent of the scales you use to compute the score and the distance; that is, if I used the "percent" scoring method instead of the full score, then ordering the warriors by the "percent" discriminant would give the same results as ordering by the numeric discriminant I used here.

The definition is not independent of the distance, of course. It is just independent of the scale. top

Note 10 Now let's see what happened if the new challenger were `dat.red` instead of `tiny-p.red`:

Numeric Discriminant 1 after challenger #21 dat.red

WarriorWinsLossesTiesScoreNearest warriorDistanceDiscriminant
/1000
sept.red 5078 3958146416698tinyak47.red 749.4512514.3
szczur.red 5124 3742163417006euthin.red 688.3411706.0
ricket.red 4168 4370196214466tinytom.red 749.1910837.9
quickd.red 5646 3672118218120tinyak47.red 557.7610106.6
tinyak47.red5521 3621135817921quickd.red 557.76 9995.6
tinyclp.red 3078 6590 83210066ricket.red 976.84 9832.9
squirm.red 4382 3177294116087ugly.red 596.87 9601.9
tinybarb.red4120 1550483017190pergamen.red 557.72 9587.3
ugly.red 4744 3287246916701euthin.red 564.78 9432.4
tinyspir.red1880 2776584411484snake.red 816.31 9374.5
stunner.red 3407 3896319713418snow.red 680.15 9126.2
snake.red 3046 2319513514273silkligh.red 621.91 8876.5
euthin.red 4439 3701236015677ugly.red 564.78 8854.0
pergamen.red3419 1531555015807silkligh.red 512.15 8095.6
tinydawn.red4160 1616472417204silkligh.red 446.68 7684.8
tinybrut.red2681 4622319711240snow.red 665.86 7484.3
snow.red 2323 3964421311182tinybrut.red 665.86 7445.7
silkligh.red3634 1340552616428tinydawn.red 446.68 7338.1
tinytom.red 4126 4345202914407tinyever.red 468.80 6754.1
tinyever.red3666 4565226913267tinytom.red 468.80 6219.6
dat.red 25010250 0 750tinyclp.red 1342.69 1007.0

Numeric Discriminant 2 after challenger #21 dat.red

WarriorWinsLossesTiesScoreNearest warriorDistanceDiscriminant
/1000
sept.red 5078 3958146416698stunner.red 673.2911242.7
szczur.red 5124 3742163417006euthin.red 625.9010644.1
quickd.red 5646 3672118218120tinyak47.red 516.05 9350.8
ricket.red 4168 4370196214466tinytom.red 643.19 9304.4
tinyak47.red5521 3621135817921quickd.red 516.05 9248.1
tinyclp.red 3078 6590 83210066tinybrut.red 847.46 8530.5
ugly.red 4744 3287246916701squirm.red 494.39 8256.9
euthin.red 4439 3701236015677ugly.red 509.78 7991.8
squirm.red 4382 3177294116087ugly.red 494.39 7953.3
tinyspir.red1880 2776584411484snake.red 688.48 7906.5
tinybarb.red4120 1550483017190pergamen.red 450.47 7743.5
stunner.red 3407 3896319713418snow.red 519.06 6964.7
snake.red 3046 2319513514273silkligh.red 478.21 6825.5
pergamen.red3419 1531555015807silkligh.red 428.91 6779.7
tinybrut.red2681 4622319711240snow.red 560.88 6304.3
tinytom.red 4126 4345202914407tinyever.red 404.63 5829.5
snow.red 2323 3964421311182stunner.red 519.06 5804.1
tinyever.red3666 4565226913267tinytom.red 404.63 5368.2
tinydawn.red4160 1616472417204silkligh.red 306.19 5267.7
silkligh.red3634 1340552616428tinydawn.red 306.19 5030.1
dat.red 25010250 0 750tinyclp.red 1306.81 980.1

In either case, `dat.red` does not make its way to the hill; its diversity does not balance the poor score. This is the expected behaviour, as for the intuitive requirements of a previous note. top

Note 11 This is due to many reasons. Say the author is cheating; or the author is a newbie and does not know the exact meaning of the words; or the warrior is buggy, and behaves differently from the author's thoughts. top

Note 12 To test my claim, I introduced a minimum change in `tinyak47.red` (I simply shifted the warrior by 7) and I entered the resulting warrior into the hill in both cases:

Diversity Tiny Hill after challenger #22 copyak47.red

#WarriorWinsLossesTiesScoreNearest warrior 1Distance 1
1copyak47.red54623563147517861tinyak47.red 119.42
2tinyak47.red54013736136317566copyak47.red 119.42
3quickd.red 53633755138217471copyak47.red 611.05
4tinydawn.red41541686466017122tinybarb.red 624.16
5tinybarb.red39271750482316604pergamen.red 553.03
6ugly.red 45713215271416427squirm.red 662.23
7szczur.red 47563778196616234ugly.red 783.51
8sept.red 46714017181215825stunner.red 854.58
9silkligh.red33421417574115767snake.red 578.71
10squirm.red 42283341293115615ugly.red 662.23
11euthin.red 42743846238015202ugly.red 664.40
12pergamen.red31681819551315017tinybarb.red 553.03
13ricket.red 40854536187914134tinytom.red 757.87
14tinytom.red 38744557206913691ricket.red 757.87
15snake.red 27342298546813670silkligh.red 578.71
16stunner.red 30044093340312415snow.red 653.06
17snow.red 21623983435510841stunner.red 653.06
18tinybrut.red222849943278 9962snow.red 685.95
19tinyspir.red140434235673 9885snake.red 1005.37
20tiny-p.red 189160152594 8267tinybrut.red1096.09
21tinyclp.red 23887265 847 8011tinybrut.red1032.17

Numeric Discriminant 1 after challenger #22 copyak47.red

WarriorWinsLossesTiesScoreNearest warriorDistanceDiscriminant
/1000
sept.red 46714017181215825stunner.red 854.5813523.7
szczur.red 47563778196616234ugly.red 783.5112719.6
ugly.red 45713215271416427squirm.red 662.2310878.4
ricket.red 40854536187914134tinytom.red 757.8710711.8
tinydawn.red41541686466017122tinybarb.red 624.1610686.9
quickd.red 53633755138217471copyak47.red 611.0510675.7
tinytom.red 38744557206913691ricket.red 757.8710376.1
squirm.red 42283341293115615ugly.red 662.2310340.7
euthin.red 42743846238015202ugly.red 664.4010100.2
tinyspir.red140434235673 9885snake.red 1005.37 9938.1
tinybarb.red39271750482316604pergamen.red 553.03 9182.5
silkligh.red33421417574115767snake.red 578.71 9124.5
tiny-p.red 189160152594 8267tinybrut.red1096.09 9061.4
pergamen.red31681819551315017tinybarb.red 553.03 8304.9
tinyclp.red 23887265 847 8011tinybrut.red1032.17 8268.7
stunner.red 30044093340312415snow.red 653.06 8107.8
snake.red 27342298546813670silkligh.red 578.71 7911.0
snow.red 21623983435510841stunner.red 653.06 7079.8
tinybrut.red222849943278 9962snow.red 685.95 6833.5
copyak47.red54623563147517861tinyak47.red 119.42 2133.0
tinyak47.red54013736136317566copyak47.red 119.42 2097.7

and

Diversity Tiny Hill after challenger #22 copyak47.red

#WarriorWinsLossesTiesScoreNearest warrior 2Distance 2
1copyak47.red55283680129217876tinyak47.red107.64
2tinyak47.red54953828117717662copyak47.red107.64
3quickd.red 53323872129617292copyak47.red539.38
4tinydawn.red42171737454617197pergamen.red510.64
5ugly.red 45893255265616423squirm.red 545.07
6tinybarb.red38691820481116418pergamen.red459.34
7szczur.red 46863931188315941ugly.red 667.24
8sept.red 47034143165415763stunner.red 680.95
9silkligh.red33001406579415694pergamen.red472.90
10euthin.red 43963824228015468ugly.red 586.35
11squirm.red 41713463286615379ugly.red 545.07
12pergamen.red30931807560014879tinybarb.red459.34
13ricket.red 42284452182014504tinytom.red 662.76
14tinytom.red 39904549196113931tinyever.red433.83
15snake.red 27212499528013443pergamen.red500.17
16stunner.red 30114153333612369tinybrut.red625.31
17tinyever.red33484893225912303tinytom.red 433.83
18tinybrut.red23745086304010162stunner.red 625.31
19tinyspir.red132235035675 9641snake.red 862.32
20tinyclp.red 27047059 737 8849tinybrut.red834.54
21tiny-p.red 187959962625 8262tinybrut.red883.43

Numeric Discriminant 2 after challenger #22 copyak47.red

WarriorWinsLossesTiesScoreNearest warriorDistanceDiscriminant
/1000
sept.red 47034143165415763stunner.red 680.9510733.8
szczur.red 46863931188315941ugly.red 667.2410636.5
ricket.red 42284452182014504tinytom.red 662.76 9612.7
quickd.red 53323872129617292copyak47.red539.38 9327.0
euthin.red 43963824228015468ugly.red 586.35 9069.8
ugly.red 45893255265616423squirm.red 545.07 8951.8
tinydawn.red42171737454617197pergamen.red510.64 8781.6
squirm.red 41713463286615379ugly.red 545.07 8382.7
tinyspir.red132235035675 9641snake.red 862.32 8313.6
stunner.red 30114153333612369tinybrut.red625.31 7734.5
tinybarb.red38691820481116418pergamen.red459.34 7541.5
silkligh.red33001406579415694pergamen.red472.90 7421.7
tinyclp.red 27047059 737 8849tinybrut.red834.54 7384.8
tiny-p.red 187959962625 8262tinybrut.red883.43 7298.9
pergamen.red30931807560014879tinybarb.red459.34 6834.6
snake.red 27212499528013443pergamen.red500.17 6723.8
tinybrut.red23745086304010162stunner.red 625.31 6354.4
tinytom.red 39904549196113931tinyever.red433.83 6043.7
tinyever.red33484893225912303tinytom.red 433.83 5337.4
copyak47.red55283680129217876tinyak47.red107.64 1924.2
tinyak47.red54953828117717662copyak47.red107.64 1901.1

Even if they are the highest scoring warriors, they are indeed too similar, and their numeric discriminant is the lowest one. Incidentally, the copy happens to be a bit better than the original, and becomes the new king of the hill. The old koth is pushed off! But this is what we expected. top