途心10マーガレットのミニマックス解

マーガレットについて。

途心3のマーガレットが三すくみであることは知られているが、途心10だと155すくみの構造を持つことが分かった。ゲーム理論の言葉でいうと、途心10マーガレットを零和ゲームと見たときのミニマックス解(と信じるもの)を一つ見つけた。

途心10で可舞な剣師は大量に居るのにたった155すくみというのはどういうことかというと、この155種で途心10の全ての剣師に対応できるということ。具体的には、途心10マーガレットを二人で対戦する時、片方のプレイヤーがこの155種から決まった確率でランダムに剣師を選ぶ戦略を取ると、もう片方のプレイヤーはどう頑張っても1/2の確率でしか勝てない。これは、普通のじゃんけんでグーチョキパーを厳密に1/3ずつの確率で出す相手に対して優位に立つ方法がないのと同じ現象。

以下に具体的な155種の剣師表を貼るが、これを使うと一対一の途心10マーガレットをじゃんけんと同等の運ゲーに変換できることに注意。また、ある意味で「強い」剣師の一覧でもあるので、その点でもネタバレであることに留意されたし。


以降、「勝率」といったら引き分けを0.5勝扱いで数えることにする。(これによってゲーム理論でいう「期待利得」が勝率と同じになって便利)

18847237291421713811412661881261105233650  5/1/0/4/熱熱斬斬/        (斬雪)
20617516814896433519773030734032446205590  5/0/0/4/衝熱熱衝速/
34836185620654658981275210994282863050450  5/0/0/4/衝速熱衝熱/
 3100543923511571579919779908817665941568  5/0/0/4/速衝熱衝熱/      (紫電)
 4495247347775760653097949568251037322726  5/0/0/4/速衝熱衝護/      (cf.5/0/0/4/速熱衝衝護/えぬえむ)
50907711034588152393790375409615009476528  5/0/0/4/速熱衝衝熱/
21000005866166024775115374136833210980696  5/0/0/4/速熱熱衝斬/
29643561757592108838286881253621743041496  5/0/0/4/速熱熱衝衝/      (ヤマハ)
67277176267760336251079110206244654986574  5/0/0/4/速護熱衝衝/      (えぬえむ他二名:top)
40887863476350242590175782186434322435998  5/0/0/4/速鏡熱衝衝/
40082001219271885769189318444536434407656  5/0/0/4/速鏡熱熱衝/
 8056864770031013683525602363147932288276  5/3/0/3/毒斬斬/
16819410557494514512297381881670083321718  5/3/0/3/毒毒斬/
25366289838242141331929863068305153380148  5/3/0/3/毒毒毒/          (呪氷)
32171398652608551684072578644055333589402 10/2/0/3/毒毒毒/
17165550912004891935368297659814677265382 10/2/0/3/熱斬斬/          (●野 啓)
14235472140307049244216208868657085779634  5/1/0/3/速熱衝衝速/
 2337451026223523270098177659251926210798  5/1/0/3/速護熱衝重/
11208943590823920785200571284639490794250  5/1/0/3/速速熱衝衝/
 7971937105762026871875590166452187600854  5/0/1/3/重熱衝護命/
29813909187363633567458929833151318376854 15/0/0/3/重熱護護/        (cf.15/0/0/3/重護熱護/岩)
11889691193097819358735525350859685556014  5/0/1/3/衝死護護速/
 3816448541252271060749122323067869976778  5/0/0/3/衝鏡速熱命絶/
 8430197864208504383370471889669930116724  5/0/1/3/死衝死護護/
59124923204226613719976040320541228743858  5/0/2/3/死護護斬/        (cf.5/0/2/3/護護死斬/美少女戦士Perfume)
28882187330479266747157225252061594742402 15/0/0/3/熱衝衝速/
 1533638250994339260256202175866140424490 15/0/0/3/護熱重護/
14899245948881968780802100766487013533526 10/0/1/3/護命熱絶/
46583191290769126447318396851920730795994 15/0/0/3/速衝熱衝/
25863731918828244803772066786241618777518 10/0/1/3/速衝熱衝/
  957578658155015735930802317079597340006 10/0/0/3/速衝熱命衝/
 8883739987859507359761895506388554751437  5/0/0/3/速衝護熱重絶/
 4055506927033905448590610621157427465342 10/0/0/3/速絶護熱重/
67345725033765478900179046530870585240714 15/0/0/3/速熱衝衝/        (パリグ)
60517450802795552279613992097689905311398 10/0/0/3/速熱衝衝熱/      (ゴキ)
23110090078251241225913498912877804892374 10/0/0/3/速熱絶盾衝/
 5032576021568990825772579170232677802126 10/0/0/3/速熱速衝衝/
25708235426646157971644856809104616798793  5/0/0/3/速護熱衝重絶/
41797632892493952666521150064541693396134 10/0/0/3/速護熱衝絶/      (河村)
11948929770498368719792246835558963826114  5/0/0/3/速護護斬死死/
39938493362462286140699529065660191149034 10/0/0/3/速速衝熱衝/
36926892155014180264077065975057120695478 10/0/0/3/速速熱衝衝/      (リヴェリオン)
 7749815683346779810574135208375801105982  5/0/0/3/速速熱絶衝衝/
 9140985502451893367348617239584707380572  5/0/0/3/速命鏡熱絶衝/    (cf.5/0/0/3/速鏡熱衝絶命/白亜)
 5393978554591874161776863682846783936154  5/0/0/3/鏡重熱衝速熱/
10275888565676920736372331497654161093152 10/0/0/3/鏡魔速熱絶/      (cf.10/0/0/3/速魔鏡熱絶/マリイ)
20669481140954727994482972102690046318884 10/0/1/3/鏡死護護/
17818225724734381795757540471546803572814 15/0/0/3/鏡熱斬毒/
  534956026943285228286399720243779839538 15/0/0/3/鏡熱重盾/
 6303529940453129944537436294299786896864  5/0/0/3/鏡熱衝速衝熱/
 9486985538340038190299975365176592030062 10/0/0/3/鏡熱衝命絶/
13874501198129627986225591111266931950198 15/0/0/3/鏡熱絶盾/
 1586570772424789464154343287484990044596 10/0/0/3/鏡速熱衝絶/      (cf.10/0/0/3/速鏡熱衝絶/オオオカタオオカ亜種)
 8190533288804556839210145423803520431450  5/0/0/3/鏡速熱衝命絶/
 2469430453402539696853355602617250483900  5/0/0/3/鏡速熱絶命衝/
17751758419135532697857608875213995411290  5/0/0/3/鏡鏡速熱魔絶/
37374961742059435844128314611704444446206 10/0/0/3/鏡鏡鏡鏡魔/
 5462571312841943424729270664236589173054 10/0/0/3/鏡命熱衝速/
 5985894921231240923141256065892375979786  5/0/0/3/命鏡衝熱絶速/
25681356490609203650899672786568637607286  5/4/0/2/毒高毒/          (eq.短兵急ヘートヴィヒ)
17327380878381656023454165935710494291536  5/3/0/2/斬斬高高/
15001133133960713259685557515651675788002 10/3/0/2/高毒斬/
64285348104120743644350510767306953256948  5/3/0/2/毒高高毒/        (eq.しゃるる)
32834329958784352573957514168796544346462 10/3/0/2/毒高毒/          (eq.結瘴)
41321789041807403022724049618900230356098 15/2/0/2/毒衝毒/
 6852062442789057948203708278332004481482 15/2/0/2/毒毒盾/          (cf.15/2/0/2/毒毒命/仁科:last)
 6978612396860797167836661211467051948102 15/2/0/2/絶毒毒/
45246595727834281212863241502748053999654 15/2/0/2/魔毒毒/
 7012495464945546776697370163182875556648 10/1/2/2/毒衝護/
21000005866166024775115374136833210980696 15/1/0/2/毒毒魔鏡/
12319825512910617229275651540301489445844 15/1/0/2/毒鏡鏡毒/
 9762654998200622858625504208816665661050 15/1/0/2/速熱重衝/        (cf.15/1/0/2/速熱衝絶/うさぴこ)
31161654882237381233981469200384664175902  5/1/2/2/鏡絶護命/
  576321839436150334644645042458301458651 20/0/0/2/重熱絶速/
 4000019334524033781433756404548497668442 20/0/0/2/重熱速衝/
 5656160873285323330769537316465578716947 20/0/0/2/重速熱絶/
 9685257185476992751817069790084928363048 10/0/2/2/衝熱速衝/
 6239328707119092242832115189744335187018 20/0/0/2/衝速熱絶/
40975866201980246510538999345330887782862 20/0/0/2/絶熱絶速/
 8623019845007398443775840216294861538516 15/0/0/2/魔鏡熱命絶/
24779197218459794024387737102808318324494 15/0/1/2/死死護命/
 4375364968145535494685321103054991231166 15/0/0/2/死護速斬死/
 3073368161023126804981445664381237312080  5/0/3/2/死護鏡護/
  588711163666020366837055779787729397257 10/0/1/2/死護鏡回2命/
 2652164516519484326573824721134522283336 10/0/1/2/死護命回3衝/
43713573665730344755791507281471731265838 20/0/0/2/死速回4盾/
12075668653111669031833967512755078678122 15/0/0/2/死鏡速鏡盾/      (死神ルゥル)
19516008301305897663084132188981770652896 20/0/0/2/死鏡回5盾/
11174830167529287803385024586630298100510 20/0/0/2/熱重速衝/
 1292570274838386428282351485644294391808 10/0/2/2/熱重速衝/
15231040579779801715336072133683024715030  5/0/3/2/熱衝絶速/
 8914339325891631152396118710747397072516 20/0/0/2/熱絶速衝/
 6079533803810784213369021765702645493044 15/0/0/2/熱速衝重絶/
12968801451609612089299540563843642610510 15/0/0/2/熱速衝重命/
 3590989876431350470419425700895739779820 20/0/0/2/熱速衝絶/        (cf.20/0/0/2/速熱衝絶/強者達の功績:top)
 1962714803559936238235278551814026479736 15/0/0/2/速絶熱命衝/
43413642321798116263728054201261409943564 20/0/0/2/速熱重絶/        (老人と海)
 6658520949396422339483618654127938808712 20/0/0/2/速熱衝重/        (ロンドルヌラルガシア:middle)
 1896949614615254476346799324880276813792 20/0/0/2/速熱絶重/        (刃)
 8976273273560316945024473803347966122210 20/0/0/2/速熱絶絶/
13677796527464344748934684978148239544944 20/0/0/2/速熱絶盾/
 1042192636870595998687793265058625312944 15/0/0/2/速熱命絶衝/
 6661497432841796744803286483989830848058 15/0/0/2/速護絶死回1/
11323241087367430140645362461786106266106  5/0/0/2/速速魔魔魔魔魔/
18184275705173457275741851519186054966242 15/0/0/2/速盾熱重衝/      (cf.15/0/0/2/盾速熱衝重/一路)
11455786128788406501433637199318839139286 20/0/0/2/速鏡熱重/
13640299808149224501899225637265969978424 15/0/0/2/速鏡熱重絶/      (有坂)
  271111506624667851451846041678937900890 15/0/0/2/速鏡熱重鏡/
 9930081093564521549217065566194828341682 15/0/0/2/速鏡熱絶重/
 9727276688250277646087675068081744690932 15/0/0/2/速鏡熱絶鏡/
16705889085111074813924336279548796639034 15/0/0/2/速鏡熱魔絶/      (cf.15/0/0/2/速魔鏡熱絶/KFM)
20747570395806344049555465746083259411610 15/0/0/2/盾速熱重絶/
11403344872982232813400803599337031755962 15/0/0/2/盾速熱絶重/
16951317190771512483779544303372833395838 15/0/0/2/鏡重熱絶速/
20529948038118837888867626163204368277938 10/0/2/2/鏡魔鏡護/
 3549961745397690590795397443401138338166 15/0/0/2/鏡魔鏡速鏡/
16932119138104908823310810479809989165376  5/0/3/2/鏡魔鏡鏡/        (cf.5/0/3/2/魔鏡鏡鏡/鏡の魔人)
 6696439031280045124768482475056186757102 15/0/0/2/鏡死護速鏡/
12426343213884224813660734547416828697388 15/0/0/2/鏡死護速回4/
23984789304901510230296089562724165460097 10/0/1/2/鏡死護命回2/
17013147206459218650739997084832531436414 15/0/0/2/鏡死速護鏡/
 7468263881379427458723219401389121346394  5/0/2/2/鏡死鏡護盾/
 9685257185476992751817069790084928363048 15/0/0/2/鏡熱衝重速/      (cf.15/0/0/2/速熱衝鏡重/驟路)
27890464989326389841178856964064417434122 15/0/0/2/鏡熱絶絶速/
 2496813554766419715071788083279411153494 15/0/0/2/鏡熱命命重/
 1734165961242183984051099650312695162528 15/0/0/2/鏡速衝熱絶/      (cf.15/0/0/2/速熱鏡衝絶/「ライカ」を握り締めるアレキサンダー)
  660459666856541065905938782775048738914 15/0/0/2/鏡速熱重盾/
15771268870201755628890273815967675340326 15/0/0/2/鏡速熱重命/
 9054588695272749673041947922055190899926 15/0/0/2/鏡速熱絶絶/
 7561286634041161724616447382394805685782 15/0/0/2/命絶重熱命/
69743222991871209905832410703234888453586 15/0/0/2/命速熱衝絶/
92262641474616535340471313054621240683240 10/0/1/2/回3重死護命/
18737062260994052240900382827337455817296 10/0/1/2/回3死死護命/
46871038850427201581426566236750343003622  5/6/0/1/毒高/
57083469949829413379017809667467043941190 10/5/0/1/斬高/            (eq.ときとかし)
79627896364338093374377138449628510655664 10/5/0/1/高毒/            (手首切ったネス)
 1308556850090673268547653936467142789642  5/5/0/1/衝高毒/          (eq.出席番号28番)
23010751219972995714716823649637690776352  5/5/0/1/毒毒高/
35997166417347627306740368427203040352324 15/3/0/1/毒命絶/
31523909821905714681315836240467327237330 15/2/0/1/高絶毒命/
 4573966883271824084580475913392086370552 10/2/2/1/毒絶命/
20378253555542609703613106295894231341118 10/1/3/1/毒魔鏡/
 8600145293158637343920874839505365397020 15/1/0/1/死回4命絶命/
 5608079521202779742812459112607529900274 15/0/0/1/死速回2鏡鏡鏡/
 8379556961101698941625607005277321127486 10/0/3/1/速熱重絶/
12801913421174729224167181175559812350766 10/0/3/1/速熱命重/
 2988718124612579812045298436418508856262 20/0/0/1/速盾回4死鏡/     (cf.20/0/0/1/速回4盾鏡死/梅)
 7321797204934216759631581359353820482736 20/0/0/1/速回4絶盾死/     (cf.20/0/0/1/死速回4絶盾/巫女瓜)
22825969132503029122174864035070191750236 20/0/0/1/速回4盾死死/
 2422251292365872711200119543428951117870  5/0/3/1/鏡魔魔鏡速/
 1624140899588358835695227737417313225572 15/0/0/1/鏡回2命鏡鏡死/
13344429081466322562794531351077718355766 20/0/0/1/回4速斬死盾/
14153474106850919222298664146355789257742 20/0/0/1/回4速熱重絶/
14127527459846725038433808129865986590438 20/0/0/1/回4速熱絶鏡/
19017981407898024119538351886284651543076 20/0/0/1/回4速盾死鏡/     (cf.20/0/0/1/速回4盾鏡死/梅)

左端の整数はその剣師の相対頻度(あるいは重み)を表す。つまり、前述のランダム戦略を取る際には、各剣師をこの数値に比例した確率で出す。分母、つまり相対頻度の合計は、2809144853646263846735669256035674737034766。既存の剣師と同じ構成であることが分かったものについては括弧付きでその名前を表記した。同じでないものの同値である場合はeq.を、同値はないがよく似ている場合はcf.を付けた。出展は、ディスクオリア/マーガレット四捨五入/マーガレット・プロフェシー/はーい、それじゃふたり組作ってーマーガレット/マーガレット・チェックメイト/2ch/マーガレット・アポクリファチェックメイトの剣師には:top/:middle/:lastの接尾辞を付けた。

このミニマックス解は唯一のものではなく、無限に存在するうちの一つでしかないが、おそらく、どの解も似たりよったりで含まれる剣師はほとんど同じ、頻度が多少違う程度だと思う。(途心4のミニマックス解がそんな感じだったので)

内容

高毒速攻、斬撃速攻、スタンエンジン、重絶エンジン、各種のデス剣師など、有力な型の多くが含まれている。ややマイナーな毒耐久や魔鏡もちゃんと入っている。一方、純粋な高速速攻や鏡連打は存在しない。また、魔法剣四本の剣師がいない。魔連打は5/0/0/2/速速魔魔魔魔魔/のみ。

最も珍しい型はたぶん非加熱絶対の5/1/2/2/鏡絶護命/だろう。

剣の並びの選択が面白い。例えば20/0/0/2/熱速衝絶/という構成がリストにある。徘徊するライカに倣った速熱衝絶の方が自然に思えるが、この環境ではそのように変更すると勝率が下がるのが確認できる。速熱よりも熱速が優秀なのは以下のような場合らしい。

  • 20/0/0/2/速熱重絶/が相手のとき、こちらが速熱衝絶だと基本的に同時行動になる。4ターン目に与えたスタンは4ターン目中に解消され、5ターン目に重撃と衝撃を同時行動で撃ち合った結果、オーバーキル判定で敗北する。一方、熱速衝絶であれば、4ターン目にあえて先攻を譲ることでスタンを一つ5ターン目に持ち越し、ワンテンポ早く衝撃剣を使って勝利できる。
  • 20/0/0/2/重熱絶速/が相手のとき、相手は2-4ターン目に各一点の余剰APを得るので、毎ターン先制して一回スタンを与えても動きが止まらない。2ターン目にあえて同時行動でスタンを与えることで、相手は2ターン目中にこれを解消できず、3ターン目に計2個のスタンを消化することになる。その結果相手は加速剣を一回振り逃すので、以降は相手の重撃よりも先に動ける。

どちらの場合も、同速の相手に対してなるべく遅く衝撃剣を当てることで次のターンにスタンを持ち越し、結果として重要な場面で先に動いている。なお、これと並び違いの剣師があと二種リストにある。(20/0/0/2/衝速熱絶/と20/0/0/2/熱絶速衝/)

型ごとの頻度合計:

0.2527     非加熱      (主な攻撃手段が攻撃力依存だが、加熱を持たない)
  0.1471     速攻        (無防備な相手に対して第二ターンの毒まで合わせて10ダメージ以上与えるもの)
  0.0945     毒耐久      (速攻以外で毒を持つもの)
  0.0111     絶対耐久    (絶対剣が唯一の能動的攻撃手段)
0.5403     加熱        (加熱剣を持つ)
  0.2251     攻撃的加熱  (耐久に割くボーナスが2点以下)
    0.0128     斬斬
    0.0075     斬衝
    0.0143     衝
    0.1516     衝衝
    0.0139     衝絶
    0.0028     衝重
    0.0123     衝絶重
    0.0100     絶
  0.3152     防御的加熱  (耐久に割くボーナスが3点以上)
    0.0063     斬
    0.0019     衝
    0.0638     衝衝
    0.0651     衝絶
    0.0291     衝重
    0.0022     衝絶重
    0.0326     絶
    0.0309     絶絶
    0.0564     絶重
    0.0268     重
0.0328     魔法        (主な攻撃手段が魔法剣)
  0.0040     魔連打
  0.0288     魔鏡
0.1742     デス        (主な攻撃手段がデス剣)
  0.0699     デスのみ
  0.0704     ヌルデス
  0.0031     ライフ潰しデス
  0.0236     二重デス
  0.0073     ヌル付き二重デス

(「耐久に割くボーナス」とは、HP・防御・加護剣・盾の剣・命の剣・回復剣Nに割り当てられたコストの合計。鏡の剣は含まない)

この分類はかなりいい加減で、例えば10/1/3/1/毒魔鏡/の主な攻撃手段は魔法なのか毒なのか分からない。(集計時には毒耐久として扱った)

統計

表中の剣師が剣・能力値をどう配分しているかの統計。「所持」はそれを持っている剣師の割合。「平均」は持っている平均個数。どちらも、平均を取る際には頻度で重みを付けてある。

(集計に当たっては、回復剣とヌル剣の疑似遅延がなくなるように構成を同値変形した。たとえば、15/0/0/1/鏡回2命鏡鏡死/ -> 15/0/0/1/鏡回3命鏡鏡死/)

素早さ  所持: 1.0000 平均: 2.3924
HP      所持: 1.0000 平均: 2.2084
攻撃力  所持: 0.2819 平均: 0.8418
防御力  所持: 0.1683 平均: 0.2748

加速剣  所持: 0.5633 平均: 0.6083
加熱剣  所持: 0.5403 平均: 0.6440
衝撃剣  所持: 0.4008 平均: 0.6190 (うち、ヌル衝 所持: 0.0187 平均: 0.0187)
絶対剣  所持: 0.2706 平均: 0.3016 (うち、ヌル絶 所持: 0.0050 平均: 0.0050)
鏡の剣  所持: 0.2443 平均: 0.3418
蟲毒剣  所持: 0.2214 平均: 0.3679
加護剣  所持: 0.2137 平均: 0.2658
デス剣  所持: 0.1742 平均: 0.2067
命の剣  所持: 0.1701 平均: 0.1767
重撃剣  所持: 0.1624 平均: 0.1624 (うち、ヌル重 所持: 0.0328 平均: 0.0328)
高速剣  所持: 0.1405 平均: 0.1695
盾の剣  所持: 0.0916 平均: 0.0916
斬撃剣  所持: 0.0884 平均: 0.1102 (うち、ヌル斬 所持: 0.0210 平均: 0.0210)
魔法剣  所持: 0.0826 平均: 0.0996
回復剣4 所持: 0.0564 平均: 0.0564
回復剣3 所持: 0.0498 平均: 0.0498
回復剣5 所持: 0.0069 平均: 0.0069
回復剣2 所持: 0.0044 平均: 0.0044

加速加熱衝撃が頭一つ抜けて高頻度であるなど、剣についての素朴な「強さ」の印象を裏付けるかのようだ。個人的には高速剣と魔法剣はもっと使われるかと思っていたが。

偏りはあるものの15種の剣すべてが使われている。平均0.0916本の盾の剣と0.6440本の加熱剣で7倍程度の違いあるが、これが大きいのか小さいのか良く分からない。ゲームとしてのマーガレットのバランスの良さ/悪さを示しているのかもしれないが、関係ないのかもしれない。極端にバランスの壊れた剣を入れてみて統計を取り直したりすると面白そうだが、気軽に遊ぶには今のところ計算量が大きすぎる。

勝率

このリストを環境とみなすと、どの途心10剣師もこの環境で5割を超える勝率をあげることができない。中でも、このリストにある剣師は全て、この環境でちょうど1/2の勝率をとる。*1

リストにない有名剣師何人かについて、この環境での勝率を調べてみた。

0.46358  0/6/0/2/高高/死の欠片
0.46246  5/5/0/2/高高/やみつむぎ
0.37351 10/0/0/2/魔魔魔魔速速/十字魔剣士ドレッサ
0.41075  5/0/0/5/魔魔魔魔/F・十津川硝子
0.43748  5/0/0/4/速魔魔魔魔/R・十津川硝子
0.20865 40/0/0/1/死/るーしえ君
0.47778 15/0/1/2/速熱衝絶/徘徊するライカ
0.08739 50/0/0/0//ウォール
0.06436  5/3/0/3/死死死/全く何も考えてオランダ

技術的な話

この一覧を作るのにはタブー探索を使った。

適当な剣師の集団に、その内部でのミニマックス解(これは線型計画法で計算できる)に従って重みを付けて環境とする。次に、この環境中で0.5を超えるなるべく高い勝率を持つ剣師をタブー探索で探す。見つかったらそれを集団に追加して最初に戻る。

マーガレット剣師のタブー探索についてはマケニピのオーナーの思考記録にも書いた。
新しい剣師が見つからなくなったところで、この集団が本当に途心10全体のミニマックス解であることを検証する。基本的には、途心10の剣師を全部列挙して、勝率1/2を超えるものが存在しないことを示せばいい。時間短縮のため、「N≧8の回復剣Nを持つ剣師は、代わりに勝利剣8を持つ剣師の下位互換である」という事実を使って探索範囲を減らした。
ただし、勝利剣Nは次のように定義する。

 [勝N] 勝利剣N <補助> <遅延起動N> <リミテッド> : 勝利させる。

この他にも「おそらく正しいと思われるものの証明は付いていない命題」をいくつか使っている。コードにバグがある可能性もあるので、完全な検証と言えるものではない。

これを見つける段階と検証する段階の両方において、高速なマーガレット処理系であるエテンを使わせて頂いた。検証用ソースコード。タブー探索のコードは、Haskellでごちゃごちゃ書いていたりGPLのライブラリを改変したりしていてややこしいが、リクエストがあれば公開する。

*1:実際に計算して確かめてもいいが、次のように考えることもできる。プレイヤーAとBが途心10マーガレットで対戦する。このとき、どちらのプレイヤーもこのリストに従った確率で剣師をランダムに選ぶとする。二人のプレイヤーは対等なので、この勝負でのプレイヤーAの勝率は1/2。(ここでも引き分けは0.5勝扱い)一方、Aの立場から見ると、Aはリストからランダムに剣師を選ぶのだから、Aの勝率は、リスト中の各剣師の勝率の加重平均である。したがってこの加重平均は1/2に一致する。このことと、リスト中のどの剣師も1/2を超える勝率を持たないという前提と合わせると、リスト中の全ての剣師の勝率がちょうど1/2になるしかないことが分かる。