Velocity Reviews > Ruby > [SOLUTION] Kalah (#58)

# [SOLUTION] Kalah (#58)

horndude77@gmail.com
Guest
Posts: n/a

 12-16-2005
I know this is a bit late, but I've been trying to train my neural net.
I've never used them before and I've been wanting to learn. I created a
neural net with the input being the kalah board plus one bias node(so
15 input nodes), 20 hidden nodes, and 6 output nodes. A move is
selected by running the neural net and then picking the valid move
whose corresponding output node is highest. I'm training the net right
now using Particle Swarm Optimization to find good weights.

I trained it against dave's player and adam's remove right. It found a
pretty good solution against the remove right player, but not dave's.
The best I could get after searching for a while was losing by 12. I
might have better luck if I just take dave's solution and replace the
function it uses to rate the board's goodness with a neural net and
then train it. That might be fun for later.

Anyways sorry about the lateness, but here it is.

-----Horndude77

NeuralPlayer.rb (Sorry about the long section of weights. I had them on
one line each.):
=================================================
require 'NeuralNet'

class NeuralPlayer < Player
def initialize(name)
super(name)
@net = NeuralNet.new(15, 20, 6)
@num_weights = 15*20 + 20*6

#weights for RemoveRight
#self.weights = [-0.428456550403913, -0.909217917148082,
-0.468284431041651, 0.357903882475321, -0.104252998861521,
-0.460447451110633, 0.264105895124314, -0.220335064829405,
0.344066370486408, 0.110887382259345, -0.112061654833158,
0.387531331474845, 0.253470699210902, 0.58235888221721,
0.306268984507146, 0.692431343604429, -0.0536485504199445,
1.25989522777867, -1.10462932704233, -0.351286944668706,
-0.567170711584581, 1.29779740339143, 0.907906329763339,
-0.207925256569637, 0.177102138750371, 0.128961825966903,
-1.40103570953856, 0.60460561949975, -0.293757627893575,
0.519854674076599, -0.121247185426499, -0.48243591070721,
-0.5635586279583, 0.87760707848256, -0.24059588906072,
-0.0397911286451754, -2.61454740162978, 0.100948481882159,
0.649844494979625, -0.20679545186547, 0.956480816100499,
0.379654934947368, 0.213954601603671, 0.0528884967154502,
0.625382960895802, 0.362097750351292, -0.253497508633716,
-0.883702364891605, -0.101659606324204, 0.248216287934223,
-0.113052794219895, 0.634086308736, -0.302798853606374,
-0.346890845789382, -0.779510000549479, -0.0360852571092638,
0.0153516471477581, -0.171835179564683, 0.0251128237293062,
0.645490210802246, -0.193099922624216, 0.712786971652146,
-0.152956125676004, -0.616851260423588, 0.2459019745739,
-0.955383328688331, -0.364705013321598, -0.617848226340645,
0.475091440306075, 0.354449966944016, -1.01613173478496,
0.676427027866194, 0.284847198728979, -0.841248187176398,
0.429200477632715, -0.326666975727536, -0.900577897928031,
-0.151187352160431, 0.418136290801099, 0.0941511164912963,
0.506840998984342, 0.103254060859946, 0.333803252464272,
-2.06121470406907, -0.225537973154723, -0.233342939397305,
-0.102999506187284, -0.53850202703304, -0.555527143472232,
-0.671017075023332, -0.282380091302946, 0.131082542665543,
-0.723479705286975, 0.795054642785429, 0.491077298824963,
0.423059363779898, -2.29476738228994, -0.121696962009613,
-0.328075962465621, -0.367687083335075, 0.37277431250442,
-0.891982913707634, 0.690166633881076, 2.20541381798063,
0.33841734898414, 1.34426349664742, 0.217566888046106,
-0.671506739310853, 0.0457879215134461, -0.785153977981076,
0.4399351958435, -1.07227081177901, 0.80071121984544,
-0.498359707974827, 1.50749203618481, 0.00155955509612907,
0.558230940831766, -0.762174449476105, -0.0842126063238458,
-0.861999505780237, -0.346765623726261, 0.189041394170814,
0.515209464762614, 0.953695829738959, 0.109226147741295,
-0.410604039478746, 1.26399802844183, -0.42263330334738,
-1.22115749426171, -0.331234653704824, 0.102886993963447,
-0.100692469885383, 1.20483707939992, -0.347967500808309,
0.553050973560177, -0.0947739419530351, 0.491011977559244,
0.628874101325749, -1.95690538525791, 0.297814702564266,
-0.471007824648471, -0.414483183737145, 0.0726120056956718,
-0.933570106288705, 0.194825010200492, -0.332411723772583,
-0.454179722185871, -1.52057182606227, -0.743829261927187,
0.217180769977938, 1.23707542789918, 0.249214021285456,
0.980914083149354, 0.840109804787634, 0.0549821073482349,
0.759213641648435, 0.345571660732875, 0.642177051909433,
-0.699048329339318, -0.711124967241672, -0.198273084388503,
-0.682136345206517, 0.311305839135266, 0.631334457513039,
0.600316128422118, 0.119320030158148, -0.277536611595672,
0.152726604986164, -1.12883395672669, 0.685939108743903,
0.612340495493681, -0.470976215605829, 0.192660126498784,
-0.38101262950115, 0.692042726229392, 0.375075320693942,
-0.537093511777074, -0.75716836463867, 0.133598059764474,
-0.0990331086141189, -0.342974262988399, 0.148259446813639,
-0.307505302024212, -0.691169077958319, 0.160615435359153,
-0.473318586554398, -0.147746841313201, 0.384987460864245,
-1.71568495055048, 0.605786228599172, -0.331527288831919,
-0.742009170961669, -0.286044861721401, -0.197316839222173,
-0.652244349958852, -0.6931049458475, 0.606268100395642,
-0.816028396199571, -0.276575039831182, -0.965134498229981,
-0.758589133085266, -0.215462052762639, -1.22485716505581,
0.635854825774725, 0.0347106278236468, 0.68017020773746,
0.486510650159744, -0.950942640912604, -0.408793432853341,
0.0660212214118211, 0.439275058115052, -1.90764266527444,
0.0705340780324987, -0.579390528498766, -0.594227207465761,
-0.607485381621411, -0.745915297691384, 0.648556199264886,
0.424482268251714, 0.448565852678736, -0.212875620275073,
-1.60767121899908, 0.590280093295565, 0.220889024665176,
0.519830949320126, -1.58646652366069, 0.0490820218238098,
-0.939734916717465, 0.271622882831742, 0.587123430789783,
0.356941209321922, 0.431588738070851, -0.00363682276519776,
0.632624296908395, -0.460607536832767, -0.162344504807553,
0.244686235644648, 0.365983697367206, -0.556207060994067,
-0.247592686197143, -0.256153222456516, 1.42851969844773,
0.150973382582707, 0.217898142551229, 0.0327769935098895,
0.0301879317982763, 0.0504474882971441, 0.927135059762964,
-1.32001110030053, -0.0908289933296031, -0.649306861640546,
-0.409394034911994, 0.548916567397019, -0.816455346515919,
-0.23857172691294, 0.124546229435521, -0.557501169427238,
0.0367883579939846, 0.217641257520411, -0.370946458590141,
0.665435343143148, 0.795439121655607, -0.328009918280298,
-0.889705313261023, 0.528441781909589, -0.521804444678478,
-0.257741432376917, 0.28334033531291, -0.647816542299153,
-0.11188517833591, -0.382643376445593, -0.50836534761093,
-0.881302835589924, 0.451928929683854, 0.322905810792575,
-0.295616304054877, -0.0490996038261706, -0.419065683767976,
0.0889212390738239, 0.354441291440674, 0.533502165411728,
0.39775482176289, 0.522613557593291, 0.56763651037131,
-0.553985587928485, -0.0892770054346463, 0.417242403170033,
-0.0622231365237445, -0.536468658574459, -0.625611293373744,
0.397897575429255, -0.164522809437456, -0.76074160128093,
-0.338860069316338, 0.108424735798555, 0.72183978231058,
0.270777413929673, -0.0460416847164016, -0.107106555215344,
-1.16391449205179, 0.0287701615910848, 0.338030888059846,
0.916736090240755, -0.0946791015986226, -0.337775858656124,
-0.184221985273276, 0.7317875788664, -0.246207369460492,
0.627625049453152, -0.265781090911406, 0.250113034586153,
-0.203373686280343, -0.632653811240432, 0.96838789592563,
0.19063294685656, 1.17332675801791, -0.516224856380255,
-0.264875062177442, 0.50505882714235, -0.491935430100226,
0.4549665963441, -0.414740791398929, -0.571609921257171,
-0.265250663950144, -0.475686272333388, -1.07131641800336,
-0.168325437973922, -0.17234499168695, 1.2020474172808,
0.337248901596775, -0.634358591648102, -2.94504361685402,
-0.0474679493484615, -0.46289571515561, -0.149910278399775,
-0.56911680359925, 0.856479648671053, 0.0222252254438126,
-0.0789053965464129, -0.865175832880598, 0.813113040749056,
1.40052017545579, 0.247265188021256, -0.440075796418733,
0.917240725211066, 0.726954195590911, 0.573646173145207,
-0.336511408821544, -0.222735979722609, 0.879239872079174,
-0.733586265855175, -0.41900569195846, -0.293545971690515,
-0.632169580731648, -0.0856443553620738, -0.223316902854729,
0.403983130234464, -0.0986907442550533, 0.505726677775571,
0.544979171664306, -0.92863401861874, -0.583791809420349,
-0.682365608929785, -0.620485109687089, -0.0729610489595295,
1.67633914332691, 0.557908335099985, -0.654472279868246,
1.696774835487, 0.0502110469681493, 1.18420531528306,
-0.479767058178744, -1.14370493230831, 0.0504510683261292,
-0.237302537046759, -0.0639529013404704, 0.276548508170619,
0.742445105762371, -0.792246089654982, 0.269589581769951,
-0.593650654967001, -1.10475004597524, -0.705061651554581,
0.560147802074617, 0.112770824037605, 0.308635801604607,
-0.139788519302014, -0.171711481459321, 0.0548073868984597,
0.622975084294081, -0.887766178428485, -0.0826250645225019,
-0.294980224893042, 0.324832701146147, -0.632388433547754,
-0.0743648174407521, 0.256966886000103, -0.348550409126788,
0.86243829650827, 0.110484229604374, -0.105573500449927,
-0.584517432238993, 0.119208851966649, 0.993143683984971,
-0.358145459385369, -0.0579403357513844, -0.965421816301397,
0.512560827725041, -1.42246421454656, 0.863912738871492,
1.04780140334956, -0.0646477189132773, -0.543296500968879,
0.271989197407765, -0.959413629549363, 0.280181611937799,
-0.363234787452163, 0.0239440462433509, 0.906154588569019,
0.158870148658544]

#weights for Dave
self.weights = [0.595765520562772, 0.572313565308922,
-1.01593258550904, -1.63154027608213, -0.242177969065067,
-1.44498150429411, -0.611346758262896, -0.714767503318283,
0.133920007475619, -0.0280544755220122, 0.805544561666266,
-0.194520526790607, 1.1332800840179, -0.899871016430959,
0.247063828714958, 0.224254662718752, -0.618371544496958,
0.684186664735964, -0.190457855344232, 0.799862285892088,
-0.555844449171634, 0.0238775186945493, -0.180573650320856,
0.354543728300561, 0.513768996058762, 0.23348678845317,
0.178371745419366, -0.591680504803924, -0.201463863457764,
1.68690987229618, 0.444379703941704, 0.516277936677377,
-0.165293331915385, 0.183888467391197, -0.207605328542711,
0.0336538540792326, 0.0830359695274841, 0.791089393285359,
0.617361158680298, 0.860187793570229, -0.85071993055499,
0.397924224079726, -0.921314700002768, 0.15306944130641,
-0.738627827917805, -0.796644068900635, -0.0234897027237452,
-0.596106214153031, 0.0103028873257534, 0.694204932672169,
-0.0783157140820865, 1.47304347282447, 0.243039689593514,
-0.154484297644386, -0.857262383343563, 0.252696814893751,
-0.40343952897704, -0.294704552057072, -0.605114371140755,
-0.117410075097659, 0.16976424826419, 0.0797140147048645,
1.15575512685767, -0.716442817770782, 0.0288381173038192,
1.24303417704093, 1.08948769036477, -0.250157841294754,
-0.221026751512915, -0.0412528829199518, -1.28136626981268,
0.0271221530977974, -0.819704733220784, 0.826844506255673,
-0.732099526633263, 0.524618630380285, -0.648083676037858,
-0.00499945681324156, -0.594934960761219, -0.776499962950219,
-0.595310019616089, -0.40437646365592, 0.0213853255182831,
-0.123200509730716, 0.595725189798745, 0.387206450180365,
-0.103128672991375, -0.796595266582018, -0.57040356766035,
0.617376786302605, -0.0492958991933076, 1.87381016576847,
0.0500697306671592, -0.00374619138529117, -0.333956103620826,
0.682428766042459, 0.45085001975015, 0.157797184138026,
0.537906024336842, 0.240119993671652, -1.71128081561554,
0.409489725584302, -0.920812577416039, -0.256255495792021,
-0.704681250903957, -0.948557914062174, -0.290420522444693,
-0.0532276068256267, 0.828402958638734, 1.35836495166806,
0.280025344929557, 0.936707731344621, -0.192066513071091,
-0.075782675806965, 1.35427201545769, -0.113366307708726,
-0.0504057876198619, 0.73601129297563, -0.897915461464336,
0.271291192038269, 0.134944553786449, 0.938718165429378,
-0.991812182124245, 0.613719915325468, -0.361579916581629,
-0.825772807653645, 1.42672684008144, 0.17313277238907,
0.283468798275685, 0.0904374445462766, 0.668305801258156,
-0.0088422724896573, 0.139621424234071, -0.903858344121345,
0.656929574729915, -0.437276244381152, 1.0358154860163,
-0.00675062072284553, 0.36195163246692, -0.414024029206097,
-0.445187541089639, -0.360619428139445, 1.07422913793284,
0.857220973547937, 1.2867735591499, -0.267002726755962,
-1.00800992274211, -0.280795345456028, -0.337565151748177,
-0.089099648711894, 0.0360080087280767, -0.447012196582776,
-0.949137872310408, -2.46913736427525, 0.20902350638093,
-0.14902418251281, -0.300060511323241, -0.0355604438556937,
-0.0946652143482725, 0.0244973704529738, 0.121535182384221,
0.877938462750686, 0.13514569157873, 0.730894434624369,
-0.728258747062556, -0.585656722420927, -0.546402878819304,
-0.343737233363635, 0.409586311239579, -0.254866830426791,
-0.242883255706001, -0.186348714111791, -0.265694023398695,
0.731393941678047, -0.0746181059090219, 0.218347383891012,
-0.812929710983027, 0.146549203387507, 0.110651741058259,
-1.09842076325924, -1.04917158207456, -1.47015228627904,
0.575126789184426, 1.85809542921445, 0.936099082727676,
-0.778637023080794, 0.416111666430353, -0.194774649283276,
-0.941750335545621, -0.131274284178395, -0.0477668866045489,
0.602038230833452, 0.569125547608728, -0.434815281396334,
0.0596187688278964, -0.789702207783062, 0.206776039104787,
0.412273228995914, -0.726223826540894, 0.23140765095681,
0.918138236244244, 0.0140589140937358, -0.879874698211939,
0.884726701492646, -0.9246077647375, 0.397956364508967,
-0.39926602290578, 0.294201967223436, -0.924516544204645,
-0.126637130005552, -0.0567156618256692, -0.211649106737817,
-0.247314351914321, -0.189047057484531, 2.15593418636414,
-0.279329113054268, 0.191024744803032, 0.395286138597393,
-1.39057157713051, 0.369662236309845, 1.04386554488724,
-1.43230866140681, -0.366813710646212, -0.430484633313484,
-2.31467831654428, -0.0955713345233841, 0.665451124992163,
0.256568831197233, 1.99980579849825, 0.0105295972456726,
-1.85153413418145, -0.323188710035103, -0.0589264915911539,
0.741860000848901, 0.987659517391252, -0.217542415932929,
-0.0237332701760307, -0.210199811323904, 0.480403776250072,
-0.620030875875817, -0.876460650685941, -0.317406520628967,
-0.952794168007896, -0.319999914913699, -1.3316286915274,
-0.281774914754018, -0.76777164315395, -0.994548131998872,
-0.817347614586046, -0.181307768357958, 1.11715374852209,
0.639399050861402, 0.630134457849217, -0.0915725401145076,
-1.71523900325495, 0.800906843087041, -0.160391655299882,
-0.787097863742348, 0.23632512472484, -0.179783010552081,
-1.04790809440798, 1.93084760034675, -0.203343177185156,
-0.485059144063684, 0.123123233243786, 2.47502432679845,
-0.372943001667596, -0.720993545833188, -0.533049453232514,
-1.30323445917252, -0.47058984022737, -0.513020646920172,
-1.0662627912043, -0.830457885094073, 1.19166394800038,
0.898537828821606, 0.403628314437249, 0.534754482297255,
0.194168555573731, 0.297322223207161, 0.702070065980465,
0.427354253638605, 0.550765820388865, 0.0496154314917118,
-0.18783154800471, 0.281383359645264, -0.101787180249122,
0.467473794871525, 0.429333489799105, -0.925046880212712,
0.768862953876434, -0.244065842007048, -0.776634866039481,
-0.970422919673118, 0.91621374088124, -1.25133173208347,
0.586925976766684, 0.611170478831929, -0.960917249895769,
0.399177856656425, 1.0399190659828, 1.05995835961873,
-0.0208502304088755, -0.220667255620733, 0.165445576721379,
-0.114795073831474, 0.617090582805893, 0.21823817643972,
0.123207495797606, 1.42383666809597, -0.294183654221106,
0.691711203231252, -0.142925100919743, -0.179032193873003,
0.0702627574729848, 0.050761109919964, -0.370460718365878,
0.242887469540777, 0.601316253626796, 1.18056456152599,
0.0130617818565887, 0.383274585308917, 0.678831957200485,
0.774370794216735, 0.272507059890609, -0.655792750040113,
0.769805400188241, -0.693486521873978, -0.754598879188519,
-0.074234513578388, 0.159284258659505, -0.450713615502174,
-0.390642496445363, -0.442808200102512, 0.267069977558354,
1.17025338402709, -0.214563443086823, -0.887455981648988,
-0.260310917181494, -0.00786283804287108, 0.247962909868963,
-0.362811078077127, 0.741310134065408, -0.200574130010101,
0.06615901401702, -1.44879735953932, -0.951059812759707,
0.32796539362041, 1.33352570257521, 0.202301767080624,
0.417550060347928, -0.513589660508719, 0.887169302020696,
-0.307274011792591, -0.532308937796632, -1.20959762064861,
0.45600602813945, -0.0874192202404007, 0.202709375017572,
0.17294847307896, -0.567443011220909, 0.440070114304498,
-0.0462495898214306, -1.05197180669229, 0.459254566465936,
0.311883378462867, -0.132864109735062, -0.353295045617759,
0.657360728811636, -0.00434468322735784, 0.25414344776134,
1.36859672044245, 0.537296612344187, 0.662805848878859,
-0.428961273880273, -0.510298293008916, 0.908502083520438,
0.543623178256533, 0.194510179239622, 0.150953472942602,
-0.723401233383223, 0.222253838102068, -0.252464263706322,
-0.320356082060333, 0.019418223582139, 0.904531241872239,
-0.458408804709521, -0.164916747460608, 0.504399574818756,
-0.0285722916383224, -0.666632449053057, 0.0531630039692571,
0.101723326754842, -0.768629611012825, -1.19955210039743,
-0.778246378153086, 0.0675714759482876, -0.396111692515287,
1.5613083872805, -0.494767892310519, 0.875913986718127,
0.249256338465321, -0.362941176741653, 0.937178999188274,
-1.3214093512053, -0.243068895971681, 0.179619525348131,
0.0273438374107876, 0.968372096980664, -0.209418553863336,
1.06698122835133, 0.112620291820417, 0.554996780348471,
0.34794240961505, -0.34321078192519, 0.513339264686877,
-1.24218990057805, 0.0172507054843588, 1.73545904209529,
-0.310201933026909]
end

def weights=(weights)
@net.weights = weights
end

def choose_move
#the board is the input to the neural net plus a bias node.
output = @net.run(@game.board+[1])
max_index = 0
max = -1000000
valid_moves.each do |m|
max_index, max = m, output[m] if output[m] > max
end
offset = @side == KalahGame::TOP ? 7 : 0
max_index + offset
end

def valid_moves
offset = @side == KalahGame::TOP ? 7 : 0
moves = []
6.times do |i|
moves << i if @game.legal_move?(i+offset)
end
moves
end
end

NeuralNet.rb:
==========================================
class NeuralNet

def initialize(num_input, num_hidden, num_output)
@num_input = num_input
@num_hidden = num_hidden
@num_output = num_output
@weights = Array.new(@num_input*@num_hidden +
@num_hidden*@num_output) { rand }
end

def weights=(weights)
@weights = weights
end

def run(inputs)
index = 0
hidden = Array.new(@num_hidden, 0)

inputs.each do |i|
@num_hidden.times do |h|
hidden[h] += @weights[index] * i
index += 1
end
end

output = Array.new(@num_output, 0)

hidden.each do |h|
@num_output.times do |o|
output[o] += @weights[index] * h
index += 1
end
end

output
end
end

David Balmain
Guest
Posts: n/a

 12-16-2005
Dude, nice work. I really must take a closer look later on.

On 12/16/05, http://www.velocityreviews.com/forums/(E-Mail Removed) <(E-Mail Removed)> wrote:
> I know this is a bit late, but I've been trying to train my neural net.
> I've never used them before and I've been wanting to learn. I created a
> neural net with the input being the kalah board plus one bias node(so
> 15 input nodes), 20 hidden nodes, and 6 output nodes. A move is
> selected by running the neural net and then picking the valid move
> whose corresponding output node is highest. I'm training the net right
> now using Particle Swarm Optimization to find good weights.
>
> I trained it against dave's player and adam's remove right. It found a
> pretty good solution against the remove right player, but not dave's.
> The best I could get after searching for a while was losing by 12. I
> might have better luck if I just take dave's solution and replace the
> function it uses to rate the board's goodness with a neural net and
> then train it. That might be fun for later.
>
> Anyways sorry about the lateness, but here it is.
>
> -----Horndude77
>
> NeuralPlayer.rb (Sorry about the long section of weights. I had them on
> one line each.):
>

Ezra Zygmuntowicz
Guest
Posts: n/a

 12-16-2005
Wow!

-Ezra

On Dec 15, 2005, at 5:45 PM, (E-Mail Removed) wrote:

> I know this is a bit late, but I've been trying to train my neural
> net.
> I've never used them before and I've been wanting to learn. I
> created a
> neural net with the input being the kalah board plus one bias node(so
> 15 input nodes), 20 hidden nodes, and 6 output nodes. A move is
> selected by running the neural net and then picking the valid move
> whose corresponding output node is highest. I'm training the net right
> now using Particle Swarm Optimization to find good weights.
>
> I trained it against dave's player and adam's remove right. It found a
> pretty good solution against the remove right player, but not dave's.
> The best I could get after searching for a while was losing by 12. I
> might have better luck if I just take dave's solution and replace the
> function it uses to rate the board's goodness with a neural net and
> then train it. That might be fun for later.
>
> Anyways sorry about the lateness, but here it is.
>
> -----Horndude77
>
> them on
> one line each.):
> =================================================
> require 'NeuralNet'
>
> class NeuralPlayer < Player
> def initialize(name)
> super(name)
> @net = NeuralNet.new(15, 20, 6)
> @num_weights = 15*20 + 20*6
>
> #weights for RemoveRight
> #self.weights = [-0.428456550403913, -0.909217917148082,
> -0.468284431041651, 0.357903882475321, -0.104252998861521,
> -0.460447451110633, 0.264105895124314, -0.220335064829405,
> 0.344066370486408, 0.110887382259345, -0.112061654833158,
> 0.387531331474845, 0.253470699210902, 0.58235888221721,
> 0.306268984507146, 0.692431343604429, -0.0536485504199445,
> 1.25989522777867, -1.10462932704233, -0.351286944668706,
> -0.567170711584581, 1.29779740339143, 0.907906329763339,
> -0.207925256569637, 0.177102138750371, 0.128961825966903,
> -1.40103570953856, 0.60460561949975, -0.293757627893575,
> 0.519854674076599, -0.121247185426499, -0.48243591070721,
> -0.5635586279583, 0.87760707848256, -0.24059588906072,
> -0.0397911286451754, -2.61454740162978, 0.100948481882159,
> 0.649844494979625, -0.20679545186547, 0.956480816100499,
> 0.379654934947368, 0.213954601603671, 0.0528884967154502,
> 0.625382960895802, 0.362097750351292, -0.253497508633716,
> -0.883702364891605, -0.101659606324204, 0.248216287934223,
> -0.113052794219895, 0.634086308736, -0.302798853606374,
> -0.346890845789382, -0.779510000549479, -0.0360852571092638,
> 0.0153516471477581, -0.171835179564683, 0.0251128237293062,
> 0.645490210802246, -0.193099922624216, 0.712786971652146,
> -0.152956125676004, -0.616851260423588, 0.2459019745739,
> -0.955383328688331, -0.364705013321598, -0.617848226340645,
> 0.475091440306075, 0.354449966944016, -1.01613173478496,
> 0.676427027866194, 0.284847198728979, -0.841248187176398,
> 0.429200477632715, -0.326666975727536, -0.900577897928031,
> -0.151187352160431, 0.418136290801099, 0.0941511164912963,
> 0.506840998984342, 0.103254060859946, 0.333803252464272,
> -2.06121470406907, -0.225537973154723, -0.233342939397305,
> -0.102999506187284, -0.53850202703304, -0.555527143472232,
> -0.671017075023332, -0.282380091302946, 0.131082542665543,
> -0.723479705286975, 0.795054642785429, 0.491077298824963,
> 0.423059363779898, -2.29476738228994, -0.121696962009613,
> -0.328075962465621, -0.367687083335075, 0.37277431250442,
> -0.891982913707634, 0.690166633881076, 2.20541381798063,
> 0.33841734898414, 1.34426349664742, 0.217566888046106,
> -0.671506739310853, 0.0457879215134461, -0.785153977981076,
> 0.4399351958435, -1.07227081177901, 0.80071121984544,
> -0.498359707974827, 1.50749203618481, 0.00155955509612907,
> 0.558230940831766, -0.762174449476105, -0.0842126063238458,
> -0.861999505780237, -0.346765623726261, 0.189041394170814,
> 0.515209464762614, 0.953695829738959, 0.109226147741295,
> -0.410604039478746, 1.26399802844183, -0.42263330334738,
> -1.22115749426171, -0.331234653704824, 0.102886993963447,
> -0.100692469885383, 1.20483707939992, -0.347967500808309,
> 0.553050973560177, -0.0947739419530351, 0.491011977559244,
> 0.628874101325749, -1.95690538525791, 0.297814702564266,
> -0.471007824648471, -0.414483183737145, 0.0726120056956718,
> -0.933570106288705, 0.194825010200492, -0.332411723772583,
> -0.454179722185871, -1.52057182606227, -0.743829261927187,
> 0.217180769977938, 1.23707542789918, 0.249214021285456,
> 0.980914083149354, 0.840109804787634, 0.0549821073482349,
> 0.759213641648435, 0.345571660732875, 0.642177051909433,
> -0.699048329339318, -0.711124967241672, -0.198273084388503,
> -0.682136345206517, 0.311305839135266, 0.631334457513039,
> 0.600316128422118, 0.119320030158148, -0.277536611595672,
> 0.152726604986164, -1.12883395672669, 0.685939108743903,
> 0.612340495493681, -0.470976215605829, 0.192660126498784,
> -0.38101262950115, 0.692042726229392, 0.375075320693942,
> -0.537093511777074, -0.75716836463867, 0.133598059764474,
> -0.0990331086141189, -0.342974262988399, 0.148259446813639,
> -0.307505302024212, -0.691169077958319, 0.160615435359153,
> -0.473318586554398, -0.147746841313201, 0.384987460864245,
> -1.71568495055048, 0.605786228599172, -0.331527288831919,
> -0.742009170961669, -0.286044861721401, -0.197316839222173,
> -0.652244349958852, -0.6931049458475, 0.606268100395642,
> -0.816028396199571, -0.276575039831182, -0.965134498229981,
> -0.758589133085266, -0.215462052762639, -1.22485716505581,
> 0.635854825774725, 0.0347106278236468, 0.68017020773746,
> 0.486510650159744, -0.950942640912604, -0.408793432853341,
> 0.0660212214118211, 0.439275058115052, -1.90764266527444,
> 0.0705340780324987, -0.579390528498766, -0.594227207465761,
> -0.607485381621411, -0.745915297691384, 0.648556199264886,
> 0.424482268251714, 0.448565852678736, -0.212875620275073,
> -1.60767121899908, 0.590280093295565, 0.220889024665176,
> 0.519830949320126, -1.58646652366069, 0.0490820218238098,
> -0.939734916717465, 0.271622882831742, 0.587123430789783,
> 0.356941209321922, 0.431588738070851, -0.00363682276519776,
> 0.632624296908395, -0.460607536832767, -0.162344504807553,
> 0.244686235644648, 0.365983697367206, -0.556207060994067,
> -0.247592686197143, -0.256153222456516, 1.42851969844773,
> 0.150973382582707, 0.217898142551229, 0.0327769935098895,
> 0.0301879317982763, 0.0504474882971441, 0.927135059762964,
> -1.32001110030053, -0.0908289933296031, -0.649306861640546,
> -0.409394034911994, 0.548916567397019, -0.816455346515919,
> -0.23857172691294, 0.124546229435521, -0.557501169427238,
> 0.0367883579939846, 0.217641257520411, -0.370946458590141,
> 0.665435343143148, 0.795439121655607, -0.328009918280298,
> -0.889705313261023, 0.528441781909589, -0.521804444678478,
> -0.257741432376917, 0.28334033531291, -0.647816542299153,
> -0.11188517833591, -0.382643376445593, -0.50836534761093,
> -0.881302835589924, 0.451928929683854, 0.322905810792575,
> -0.295616304054877, -0.0490996038261706, -0.419065683767976,
> 0.0889212390738239, 0.354441291440674, 0.533502165411728,
> 0.39775482176289, 0.522613557593291, 0.56763651037131,
> -0.553985587928485, -0.0892770054346463, 0.417242403170033,
> -0.0622231365237445, -0.536468658574459, -0.625611293373744,
> 0.397897575429255, -0.164522809437456, -0.76074160128093,
> -0.338860069316338, 0.108424735798555, 0.72183978231058,
> 0.270777413929673, -0.0460416847164016, -0.107106555215344,
> -1.16391449205179, 0.0287701615910848, 0.338030888059846,
> 0.916736090240755, -0.0946791015986226, -0.337775858656124,
> -0.184221985273276, 0.7317875788664, -0.246207369460492,
> 0.627625049453152, -0.265781090911406, 0.250113034586153,
> -0.203373686280343, -0.632653811240432, 0.96838789592563,
> 0.19063294685656, 1.17332675801791, -0.516224856380255,
> -0.264875062177442, 0.50505882714235, -0.491935430100226,
> 0.4549665963441, -0.414740791398929, -0.571609921257171,
> -0.265250663950144, -0.475686272333388, -1.07131641800336,
> -0.168325437973922, -0.17234499168695, 1.2020474172808,
> 0.337248901596775, -0.634358591648102, -2.94504361685402,
> -0.0474679493484615, -0.46289571515561, -0.149910278399775,
> -0.56911680359925, 0.856479648671053, 0.0222252254438126,
> -0.0789053965464129, -0.865175832880598, 0.813113040749056,
> 1.40052017545579, 0.247265188021256, -0.440075796418733,
> 0.917240725211066, 0.726954195590911, 0.573646173145207,
> -0.336511408821544, -0.222735979722609, 0.879239872079174,
> -0.733586265855175, -0.41900569195846, -0.293545971690515,
> -0.632169580731648, -0.0856443553620738, -0.223316902854729,
> 0.403983130234464, -0.0986907442550533, 0.505726677775571,
> 0.544979171664306, -0.92863401861874, -0.583791809420349,
> -0.682365608929785, -0.620485109687089, -0.0729610489595295,
> 1.67633914332691, 0.557908335099985, -0.654472279868246,
> 1.696774835487, 0.0502110469681493, 1.18420531528306,
> -0.479767058178744, -1.14370493230831, 0.0504510683261292,
> -0.237302537046759, -0.0639529013404704, 0.276548508170619,
> 0.742445105762371, -0.792246089654982, 0.269589581769951,
> -0.593650654967001, -1.10475004597524, -0.705061651554581,
> 0.560147802074617, 0.112770824037605, 0.308635801604607,
> -0.139788519302014, -0.171711481459321, 0.0548073868984597,
> 0.622975084294081, -0.887766178428485, -0.0826250645225019,
> -0.294980224893042, 0.324832701146147, -0.632388433547754,
> -0.0743648174407521, 0.256966886000103, -0.348550409126788,
> 0.86243829650827, 0.110484229604374, -0.105573500449927,
> -0.584517432238993, 0.119208851966649, 0.993143683984971,
> -0.358145459385369, -0.0579403357513844, -0.965421816301397,
> 0.512560827725041, -1.42246421454656, 0.863912738871492,
> 1.04780140334956, -0.0646477189132773, -0.543296500968879,
> 0.271989197407765, -0.959413629549363, 0.280181611937799,
> -0.363234787452163, 0.0239440462433509, 0.906154588569019,
> 0.158870148658544]
>
> #weights for Dave
> self.weights = [0.595765520562772, 0.572313565308922,
> -1.01593258550904, -1.63154027608213, -0.242177969065067,
> -1.44498150429411, -0.611346758262896, -0.714767503318283,
> 0.133920007475619, -0.0280544755220122, 0.805544561666266,
> -0.194520526790607, 1.1332800840179, -0.899871016430959,
> 0.247063828714958, 0.224254662718752, -0.618371544496958,
> 0.684186664735964, -0.190457855344232, 0.799862285892088,
> -0.555844449171634, 0.0238775186945493, -0.180573650320856,
> 0.354543728300561, 0.513768996058762, 0.23348678845317,
> 0.178371745419366, -0.591680504803924, -0.201463863457764,
> 1.68690987229618, 0.444379703941704, 0.516277936677377,
> -0.165293331915385, 0.183888467391197, -0.207605328542711,
> 0.0336538540792326, 0.0830359695274841, 0.791089393285359,
> 0.617361158680298, 0.860187793570229, -0.85071993055499,
> 0.397924224079726, -0.921314700002768, 0.15306944130641,
> -0.738627827917805, -0.796644068900635, -0.0234897027237452,
> -0.596106214153031, 0.0103028873257534, 0.694204932672169,
> -0.0783157140820865, 1.47304347282447, 0.243039689593514,
> -0.154484297644386, -0.857262383343563, 0.252696814893751,
> -0.40343952897704, -0.294704552057072, -0.605114371140755,
> -0.117410075097659, 0.16976424826419, 0.0797140147048645,
> 1.15575512685767, -0.716442817770782, 0.0288381173038192,
> 1.24303417704093, 1.08948769036477, -0.250157841294754,
> -0.221026751512915, -0.0412528829199518, -1.28136626981268,
> 0.0271221530977974, -0.819704733220784, 0.826844506255673,
> -0.732099526633263, 0.524618630380285, -0.648083676037858,
> -0.00499945681324156, -0.594934960761219, -0.776499962950219,
> -0.595310019616089, -0.40437646365592, 0.0213853255182831,
> -0.123200509730716, 0.595725189798745, 0.387206450180365,
> -0.103128672991375, -0.796595266582018, -0.57040356766035,
> 0.617376786302605, -0.0492958991933076, 1.87381016576847,
> 0.0500697306671592, -0.00374619138529117, -0.333956103620826,
> 0.682428766042459, 0.45085001975015, 0.157797184138026,
> 0.537906024336842, 0.240119993671652, -1.71128081561554,
> 0.409489725584302, -0.920812577416039, -0.256255495792021,
> -0.704681250903957, -0.948557914062174, -0.290420522444693,
> -0.0532276068256267, 0.828402958638734, 1.35836495166806,
> 0.280025344929557, 0.936707731344621, -0.192066513071091,
> -0.075782675806965, 1.35427201545769, -0.113366307708726,
> -0.0504057876198619, 0.73601129297563, -0.897915461464336,
> 0.271291192038269, 0.134944553786449, 0.938718165429378,
> -0.991812182124245, 0.613719915325468, -0.361579916581629,
> -0.825772807653645, 1.42672684008144, 0.17313277238907,
> 0.283468798275685, 0.0904374445462766, 0.668305801258156,
> -0.0088422724896573, 0.139621424234071, -0.903858344121345,
> 0.656929574729915, -0.437276244381152, 1.0358154860163,
> -0.00675062072284553, 0.36195163246692, -0.414024029206097,
> -0.445187541089639, -0.360619428139445, 1.07422913793284,
> 0.857220973547937, 1.2867735591499, -0.267002726755962,
> -1.00800992274211, -0.280795345456028, -0.337565151748177,
> -0.089099648711894, 0.0360080087280767, -0.447012196582776,
> -0.949137872310408, -2.46913736427525, 0.20902350638093,
> -0.14902418251281, -0.300060511323241, -0.0355604438556937,
> -0.0946652143482725, 0.0244973704529738, 0.121535182384221,
> 0.877938462750686, 0.13514569157873, 0.730894434624369,
> -0.728258747062556, -0.585656722420927, -0.546402878819304,
> -0.343737233363635, 0.409586311239579, -0.254866830426791,
> -0.242883255706001, -0.186348714111791, -0.265694023398695,
> 0.731393941678047, -0.0746181059090219, 0.218347383891012,
> -0.812929710983027, 0.146549203387507, 0.110651741058259,
> -1.09842076325924, -1.04917158207456, -1.47015228627904,
> 0.575126789184426, 1.85809542921445, 0.936099082727676,
> -0.778637023080794, 0.416111666430353, -0.194774649283276,
> -0.941750335545621, -0.131274284178395, -0.0477668866045489,
> 0.602038230833452, 0.569125547608728, -0.434815281396334,
> 0.0596187688278964, -0.789702207783062, 0.206776039104787,
> 0.412273228995914, -0.726223826540894, 0.23140765095681,
> 0.918138236244244, 0.0140589140937358, -0.879874698211939,
> 0.884726701492646, -0.9246077647375, 0.397956364508967,
> -0.39926602290578, 0.294201967223436, -0.924516544204645,
> -0.126637130005552, -0.0567156618256692, -0.211649106737817,
> -0.247314351914321, -0.189047057484531, 2.15593418636414,
> -0.279329113054268, 0.191024744803032, 0.395286138597393,
> -1.39057157713051, 0.369662236309845, 1.04386554488724,
> -1.43230866140681, -0.366813710646212, -0.430484633313484,
> -2.31467831654428, -0.0955713345233841, 0.665451124992163,
> 0.256568831197233, 1.99980579849825, 0.0105295972456726,
> -1.85153413418145, -0.323188710035103, -0.0589264915911539,
> 0.741860000848901, 0.987659517391252, -0.217542415932929,
> -0.0237332701760307, -0.210199811323904, 0.480403776250072,
> -0.620030875875817, -0.876460650685941, -0.317406520628967,
> -0.952794168007896, -0.319999914913699, -1.3316286915274,
> -0.281774914754018, -0.76777164315395, -0.994548131998872,
> -0.817347614586046, -0.181307768357958, 1.11715374852209,
> 0.639399050861402, 0.630134457849217, -0.0915725401145076,
> -1.71523900325495, 0.800906843087041, -0.160391655299882,
> -0.787097863742348, 0.23632512472484, -0.179783010552081,
> -1.04790809440798, 1.93084760034675, -0.203343177185156,
> -0.485059144063684, 0.123123233243786, 2.47502432679845,
> -0.372943001667596, -0.720993545833188, -0.533049453232514,
> -1.30323445917252, -0.47058984022737, -0.513020646920172,
> -1.0662627912043, -0.830457885094073, 1.19166394800038,
> 0.898537828821606, 0.403628314437249, 0.534754482297255,
> 0.194168555573731, 0.297322223207161, 0.702070065980465,
> 0.427354253638605, 0.550765820388865, 0.0496154314917118,
> -0.18783154800471, 0.281383359645264, -0.101787180249122,
> 0.467473794871525, 0.429333489799105, -0.925046880212712,
> 0.768862953876434, -0.244065842007048, -0.776634866039481,
> -0.970422919673118, 0.91621374088124, -1.25133173208347,
> 0.586925976766684, 0.611170478831929, -0.960917249895769,
> 0.399177856656425, 1.0399190659828, 1.05995835961873,
> -0.0208502304088755, -0.220667255620733, 0.165445576721379,
> -0.114795073831474, 0.617090582805893, 0.21823817643972,
> 0.123207495797606, 1.42383666809597, -0.294183654221106,
> 0.691711203231252, -0.142925100919743, -0.179032193873003,
> 0.0702627574729848, 0.050761109919964, -0.370460718365878,
> 0.242887469540777, 0.601316253626796, 1.18056456152599,
> 0.0130617818565887, 0.383274585308917, 0.678831957200485,
> 0.774370794216735, 0.272507059890609, -0.655792750040113,
> 0.769805400188241, -0.693486521873978, -0.754598879188519,
> -0.074234513578388, 0.159284258659505, -0.450713615502174,
> -0.390642496445363, -0.442808200102512, 0.267069977558354,
> 1.17025338402709, -0.214563443086823, -0.887455981648988,
> -0.260310917181494, -0.00786283804287108, 0.247962909868963,
> -0.362811078077127, 0.741310134065408, -0.200574130010101,
> 0.06615901401702, -1.44879735953932, -0.951059812759707,
> 0.32796539362041, 1.33352570257521, 0.202301767080624,
> 0.417550060347928, -0.513589660508719, 0.887169302020696,
> -0.307274011792591, -0.532308937796632, -1.20959762064861,
> 0.45600602813945, -0.0874192202404007, 0.202709375017572,
> 0.17294847307896, -0.567443011220909, 0.440070114304498,
> -0.0462495898214306, -1.05197180669229, 0.459254566465936,
> 0.311883378462867, -0.132864109735062, -0.353295045617759,
> 0.657360728811636, -0.00434468322735784, 0.25414344776134,
> 1.36859672044245, 0.537296612344187, 0.662805848878859,
> -0.428961273880273, -0.510298293008916, 0.908502083520438,
> 0.543623178256533, 0.194510179239622, 0.150953472942602,
> -0.723401233383223, 0.222253838102068, -0.252464263706322,
> -0.320356082060333, 0.019418223582139, 0.904531241872239,
> -0.458408804709521, -0.164916747460608, 0.504399574818756,
> -0.0285722916383224, -0.666632449053057, 0.0531630039692571,
> 0.101723326754842, -0.768629611012825, -1.19955210039743,
> -0.778246378153086, 0.0675714759482876, -0.396111692515287,
> 1.5613083872805, -0.494767892310519, 0.875913986718127,
> 0.249256338465321, -0.362941176741653, 0.937178999188274,
> -1.3214093512053, -0.243068895971681, 0.179619525348131,
> 0.0273438374107876, 0.968372096980664, -0.209418553863336,
> 1.06698122835133, 0.112620291820417, 0.554996780348471,
> 0.34794240961505, -0.34321078192519, 0.513339264686877,
> -1.24218990057805, 0.0172507054843588, 1.73545904209529,
> -0.310201933026909]
> end
>
> def weights=(weights)
> @net.weights = weights
> end
>
> def choose_move
> #the board is the input to the neural net plus a bias node.
> output = @net.run(@game.board+[1])
> max_index = 0
> max = -1000000
> valid_moves.each do |m|
> max_index, max = m, output[m] if output[m] > max
> end
> offset = @side == KalahGame::TOP ? 7 : 0
> max_index + offset
> end
>
> def valid_moves
> offset = @side == KalahGame::TOP ? 7 : 0
> moves = []
> 6.times do |i|
> moves << i if @game.legal_move?(i+offset)
> end
> moves
> end
> end
>
> NeuralNet.rb:
> ==========================================
> class NeuralNet
> attr_reader :num_input, :num_hidden, :num_output, :weights
>
> def initialize(num_input, num_hidden, num_output)
> @num_input = num_input
> @num_hidden = num_hidden
> @num_output = num_output
> @weights = Array.new(@num_input*@num_hidden +
> @num_hidden*@num_output) { rand }
> end
>
> def weights=(weights)
> @weights = weights
> end
>
> def run(inputs)
> index = 0
> hidden = Array.new(@num_hidden, 0)
>
> inputs.each do |i|
> @num_hidden.times do |h|
> hidden[h] += @weights[index] * i
> index += 1
> end
> end
>
> output = Array.new(@num_output, 0)
>
> hidden.each do |h|
> @num_output.times do |o|
> output[o] += @weights[index] * h
> index += 1
> end
> end
>
> output
> end
> end
>
>
>

-Ezra Zygmuntowicz
WebMaster
Yakima Herald-Republic Newspaper
(E-Mail Removed)
509-577-7732