Verwijderd
Het is nu nog een starterbot, maar ben al bezig om een wat intelligenter botje te schrijven =)
Verwijderd
Ik heb mij ook aan geslotenBolukan schreef op dinsdag 11 maart 2014 @ 10:03:
Goed idee:
Tweakers Leaderboard
@Hieronder: he jammer, stond ik toch 2 minuten een keer bovenaan
Straks maar weer eens verder puzzelen om mijn AI slimmer te krijgen dan de rest
[ Voor 1% gewijzigd door Johnnei op 11-03-2014 14:01 . Reden: typo ]
They blur the lines and lead the way, their way!
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Oh jammer. Het is dus niet toegestaan om gewoon even een optimization toolbox te gebruiken. Bummer.Herko_ter_Horst schreef op zaterdag 08 maart 2014 @ 17:34:
Meestal zijn alleen standaard libraries toegestaan bij dit soort contests, in elk geval voor het deel dat je daadwerkelijk submit.
Maar als jij om de engine en jouw bot een UI heen wilt bouwen, moet je natuurlijk zelf weten wat je gebruikt.
Wat voor een optimization toolbox zou je willen gebruiken om de bot te schrijven? Ik denk niet dat dit een probleem is dat opgelost word met een standaard optimalisatie algoritme...Chip. schreef op donderdag 13 maart 2014 @ 00:52:
[...]
Oh jammer. Het is dus niet toegestaan om gewoon even een optimization toolbox te gebruiken. Bummer.
Ik heb me ook aan de Tweakers groep toegevoegd.
Ik was begonnen aan een Python bot, maar heb de laatste dagen niet bepaald tijd gehad om eraan te besteden. Op GitHub heb ik een soort-van-bijna-af bot staan die je wellicht als startpunt zou kunnen gebruiken, maar nog niet getest met de daadwerkelijke engine zelf, dus zal vast vol staan met fouten. Eh, het ding slaagt nog niet eens voor zijn eigen doctests.TheNephilim schreef op donderdag 13 maart 2014 @ 11:42:
Jammer dat er alleen een Java starter bot is, als ze nou eens een Python starter bot hadden, dan zou ik er zeker mee beginnen. Gewoon een beetje aanklooien, want het zegt me allemaal nog niet zo heel veel
Matlab of nog beter CPLEX van IBM. En je kan de gehele map gewoon als een graaf zien. Waarbij ieder land gewoon een bepaald gewicht heeft. Vervolgens zou je dus je troepen verplaatsing kunnen optimalizeren of waar je je troepen moet plaatsen. Eventueel zou je ook een model predictive controller kunnen maken, alleen moet je dan een soort algemeen model hebben voor je tegenstanders.Pete schreef op donderdag 13 maart 2014 @ 08:51:
[...]
Wat voor een optimization toolbox zou je willen gebruiken om de bot te schrijven? Ik denk niet dat dit een probleem is dat opgelost word met een standaard optimalisatie algoritme...
Ik heb me ook aan de Tweakers groep toegevoegd.
Verwijderd
Het is mogelijk om bij maximaal 3 'institutes' te horen. Voorlopig is dit gewoon de naam voor een apart groepje/competitie waar je bij wil horen. Omdat we uit het verleden weten dat dit vaak een school of bedrijf betreft, hebben we het zo genoemd. Maar je staat natuurlijk vrij om daar in te vullen wat je wil.Janoz schreef op dinsdag 11 maart 2014 @ 15:14:
Misschien nog een feature request voor AIGames: Het toevoegen van een mogelijkheid om bij 1 of meer groepjes/competities te horen waardoor je instituut niet hoeft te 'misbruiken' voor een soort eigen competitie. Een speler zou dan gewoon zijn opleiding of werkgever in kunnen vullen bij instituut, maar daarnaast een 'competitie' starten met vriendengroep of, zoals in dit geval, een andere community.
Dat is natuurlijk heel leuk bedacht, maar in de praktijk zou dat voor geen meter werken. En ja, ik weet wat die pakketten doen; ik ben een doctoraal onderzoeker in machine learning.Chip. schreef op donderdag 13 maart 2014 @ 12:59:
[...]
Matlab of nog beter CPLEX van IBM. En je kan de gehele map gewoon als een graaf zien. Waarbij ieder land gewoon een bepaald gewicht heeft. Vervolgens zou je dus je troepen verplaatsing kunnen optimalizeren of waar je je troepen moet plaatsen. Eventueel zou je ook een model predictive controller kunnen maken, alleen moet je dan een soort algemeen model hebben voor je tegenstanders.
Het eerste probleem is dat je het hebt over 'gewoon' een graaf met 'gewoon' een bepaald gewicht voor troepen verplaatsingen. Het probleem hier is dat je niet de volledige map kan zien (incomplete information) en dat er een hoop kansrekening aan te pas gaat op lokaal niveau voor het verslaan van tegenstanders.
Oftwel, zodra je het probleem snapt en doorgrond zul je zien dat graaf algoritmen je bijna niets zullen helpen. Misschien als je een basisbot hebt die al redelijk zelfstandig lokaal kan werken, maar niet als 'basis'-oplossing voor het probleem.
Wel heb je ook een graaf nodig:
* Om je inland-armies naar het front te krijgen;
* Om de attractiviteit van elke superregion te bepalen: Hoeveel zetten en armies heb je naar verwachting nodig (versus wat krijg je ervoor/pak je ermee af.);
* Om te onthouden welke regions met elkaar zijn verbonden.
Aan de andere kant, mijn shortest-path-algoritme en graaf implementatie is minder dan 20 regels van mijn code. Ter vergelijking, de io is al 300 regels
Welke talen gebruiken jullie? Ik heb mijn bot nu in C++ geschreven.
Ook zijn de regels een stukje veranderdAfter the finals are done, we now also have a prize (thanks to Starapple) for the best institute. The top 5 bots in the best institute will all get a -to be announced later- prize. Only institutes with at least 5 bots in it compete for this prize.
Alle wijzigingen zijn te vinden op http://theaigames.com/dis...4571/major-changes/1/showThere also was a change in the engine. In Conquest regions could attack/transfer as many times to the same region as there were armies on it. We changed this to 1 attack/transfer per region to the same region per round.
P.S. de finales zijn ook een maand vertraagd!
NB: De "Other" zit een beetje dom te rotzooien in een deel van Noord-Amerika en Azie tegelijkertijd en daar heb je geen rekening mee te houden.
Ik heb ook honderden regels aan tooling, veel meer dan de daadwerkelijke speler code. Dat heb je altijd met dit soort projecten, omdat je toch een beetje flexible codebase wil opbouwen om mee te kunnen experimenteren.Pete schreef op vrijdag 14 maart 2014 @ 13:32:
Aan de andere kant, mijn shortest-path-algoritme en graaf implementatie is minder dan 20 regels van mijn code. Ter vergelijking, de io is al 300 regels
Inderdaad, precies mijn punt. De standaard optimalizatie-algoritmes voor grafen hebben hier heel weinig nut als strategie.Soultaker schreef op vrijdag 14 maart 2014 @ 17:42:
Pff, al dat gezeur over grafen, alsof de observatie dat het speelveld als graaf gemodelleerd kan worden automatisch een zinnige strategie oplevert.
Oeh, sneaky ons onze beste tactieken proberen te ontfutselenBolukan schreef op vrijdag 14 maart 2014 @ 16:27:
Vraagje: Je staat (met 2 legers) op Midden-Oosten en wilt Afrika veroveren. Heel Afrika bestaat uit neutrals met 2 legers. Wat is de beste taktiek? Graag met toelichting.
NB: De "Other" zit een beetje dom te rotzooien in een deel van Noord-Amerika en Azie tegelijkertijd en daar heb je geen rekening mee te houden.
En voor de mensen die hun Matlab formules op een graaf willen toepassen, zo moeilijk zal het toch niet zijn om implementaties in je favoriete taal te vinden voor de formules die je in Matlab zou gebruiken.
Ik heb er wel een hoor, maar dat is echt een hack.
Voor C++ programmeurs is het ook handig dat C++11 (grotendeels) ondersteund wordt:TheDevilOnLine schreef op vrijdag 14 maart 2014 @ 16:05:
Alle wijzigingen zijn te vinden op http://theaigames.com/dis...4571/major-changes/1/show
* Soultaker gaat maar eens z'n codebase herschrijven om daar gebruik van te maken.C++ now compiles with the "c++0x" flag
Ik gebruik een inverse normaal, met ipv ½ als continuity correction een paar gezochte waardes, daarmee zit ik er nooit meer dan 1 leger naast en 99% van de tijd is het gewoon correct. Ik heb niet eens gezocht naar iets als nbininv. Misschien toch gaan doen. Of gewoon de niet inverse binomial berekenen en kijken of ik goed zit, maar goed dan zal het al snel net zo hacky zijn als wat jij al hebt.Pete schreef op vrijdag 14 maart 2014 @ 18:35:
Ik heb wel een formule die ik mis uit matlab: nbininv. Helaas is daar echt niet makkelijk een C++ oplossing voor te vinden....
Ik heb er wel een hoor, maar dat is echt een hack.
[ Voor 4% gewijzigd door _js_ op 14-03-2014 23:05 ]
Less = more
Nog 23 punten Sharky..... Thee?YoIWriteCode schreef op zaterdag 15 maart 2014 @ 13:54:
Sharky (met bot Punisher) in het huis! Sta ik meteen op de 1e plek van Tweakers... jeuj! :-)
Verwijderd
Dit is waar de competitie van is afgeleid en heeft al jaren een zeer uitgebreide communitie van over de hele wereld. We hopen dan ook de concurrentie voor jullie ietsje uit te breiden
Veel succes met jullie bots jongens!
[ Voor 4% gewijzigd door bReChThOu op 18-03-2014 22:08 ]
zo kan ik bijvoorbeeld de random.py module niet gebruiken.
Is dit gewoon uitproberen, of zijn er ergens hints te vinden?
Waarschijnlijk is het het makkelijkst om zelf een simpele PRNG te maken.
Python 2.7.3
Mono 2.10.8
GCC 4.6.3
Maar als ik zie hoeveel tijd ik daar in heb gestoken..
Geen tijd hiervoor atm.. zo jammer
while (me.Alive) {
me.KickAss();
}
I will find you... And I will conquer you! ;-)IWriteCode schreef op zaterdag 15 maart 2014 @ 13:54:
Sharky (met bot Punisher) in het huis! Sta ik meteen op de 1e plek van Tweakers... jeuj! :-)
Leaderboard Institutes
[ Voor 32% gewijzigd door Bolukan op 19-03-2014 19:07 ]
Verwijderd
Ben benieuwd waar de weerstand begint te komen.
Echt slim is m'n bot namelijk nog niet.
Dan toch maar vertrouwen op mijn eigen lokale competitie... :-) Beetje balen alleen dat m'n oude versies beter zijn dan de nieuwe versies...
1
2
3
4
5
6
7
8
9
| 1 bot-v123 1696 2 bot-v125 1693 3 bot-v219 1677 4 bot-v140 1676 5 bot-v127 1673 6 bot-v126 1662 7 bot-v208 1644 8 bot-v189 1624 9 bot-v129 1622 |
Less = more
Ik realiseer me nu dat ik niet meer heb geantwoord op mijn forumthread over .NET 4. Ik hou m'n bot op .NET 3.5.
[ Voor 29% gewijzigd door CodeCaster op 20-03-2014 09:28 ]
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Dit ging goed totdat een aantal bots op een of andere manier meer dan 500MB aan geheugen wilden hebben: OutOfMemoryError. Dan is het wachten totdat de consumer weer opnieuw opgestart is.IWriteCode schreef op donderdag 20 maart 2014 @ 09:11:
Het gaat hard... 125 bots nu... Meer competitie is op zich leuk... maar je merkt wel dat alles langzamer wordt... de code staat langer in de wacht om gecompileerd te worden... en het aantal gespeelde wedstrijden per bot zal ook omlaag gaan...
Dan toch maar vertrouwen op mijn eigen lokale competitie... :-) Beetje balen alleen dat m'n oude versies beter zijn dan de nieuwe versies...
code:
1 2 3 4 5 6 7 8 9 1 bot-v123 1696 2 bot-v125 1693 3 bot-v219 1677 4 bot-v140 1676 5 bot-v127 1673 6 bot-v126 1662 7 bot-v208 1644 8 bot-v189 1624 9 bot-v129 1622
Zodra de engine IO een patch krijgt om hier netjes overweg te gaan, loopt alles weer vlekkeloos.
Less = more
Iemand een idee hoe dit op te lossen? Ik ben begonnen met de starterbot voor C#.
ps. ook op het forum van Conquest geplaatst: http://theaigames.com/dis...max-256-characters/1/show
pps. op stackoverflow wordt wel een oplossing genoemd, maar vroeg me meer af of het niet anders op te lossen was.
[ Voor 29% gewijzigd door Kips op 20-03-2014 15:46 ]
@hieronder, ik zat aan opponent_moves te kijken...., zelfde oplossing als bReChThOu gebruik ik
[ Voor 36% gewijzigd door Bolukan op 20-03-2014 16:05 ]
dump is default, want volgens mij zijn de neighbors altijd hetzelfde...Bolukan schreef op donderdag 20 maart 2014 @ 15:51:
Kips, kun je een link naar de dump erbij zetten? Dan ga ik die vanavond eens proberen.
Klopt, op windows zit je met deze limiet in de console.Kips schreef op donderdag 20 maart 2014 @ 15:39:
ben ook bezig met een C# botje, maar loop bij "setup_map neighbors" tegen de maximale input voor Console.Readline van 256 tekens (bron: http://stackoverflow.com/...nsole-readline-max-length) aan (input is 354 in mijn geval)...
Iemand een idee hoe dit op te lossen? Ik ben begonnen met de starterbot voor C#.
ps. ook op het forum van Conquest geplaatst: http://theaigames.com/dis...max-256-characters/1/show
pps. op stackoverflow wordt wel een oplossing genoemd, maar vroeg me meer af of het niet anders op te lossen was.
Ik debug niet via de console, maar ik paste de log in een textfile en lees deze uit en stuur dan lijn per lijn naar de parser.
Voor de werking op de servers van de wedstrijd is dit geen probleem, want mono op linux kent dit probleem niet:
1
| Console.WriteLine("Your input was: " + Console.ReadLine() + " characters long"); |
1
2
3
| /opt/mono-2.11/bin/mono bReChTbOt.exe setup_map neighbors 1 2,4,30 2 4,3,5 3 5,6,14 4 5,7 5 6,7,8 6 8 7 8,9 8 9 9 10 10 11,12 11 12,13 12 13,21 14 15,16 15 16,18,19 16 17 17 19,20,27,32,36 18 19,20,21 19 20 20 21,22,36 21 22,23,24 22 23,36 23 24,25,26,36 24 25 25 26 27 28,32,33 28 29,31,33,34 29 30,31 30 31,34,35 31 34 32 33,36,37 33 34,37,38 34 35 36 37 37 38 38 39 39 40,41 40 41,42 41 42 Your input was: 354 characters long |
[ Voor 3% gewijzigd door bReChThOu op 20-03-2014 16:25 ]
1
2
3
4
5
| private void Test() { String[] lines = File.ReadAllLines(@"C:\Users\Kips\Documents\test.dump", Encoding.UTF8); foreach (String line in lines) parser.Parse(line); } |
Less = more
https://niels.nu
Vervelend met C++ is dat ze niet de top-level map aan het include-path toevoegen. Oftewel, ik heb al mijn headers in dezelfde map staan, omdat dingen anders niet werken...
Het is iig beter dan met codecup waar je al je code altijd in 1 bestand moet proppen.
[ Voor 14% gewijzigd door Pete op 21-03-2014 09:44 ]
https://niels.nu
Less = more
Ja, ik heb 't al draaien.IWriteCode schreef op vrijdag 21 maart 2014 @ 11:19:
@Hydra ik heb alle mongodb zaken eruit gesloopt... en gewoon naar text files geredirect. Zijn maar paar kleine aanpassingen voor nodig.
Maar heeft iemand antwoord op die vraag? Je kunt alleen een zip uploaden, ik weet zo niet hoe hij er verder mee omgaat. Hij start een bot met "java bot.BotStarter" maar ik kan nergens vinden of dat vast is of dat 'ie dat zelf uit probeert te vogelen en of je het in een .jar kunt stoppen. De engine krijgt dat van buiten op de commandline mee.
[ Voor 38% gewijzigd door Hydra op 21-03-2014 11:41 ]
https://niels.nu
Dat is sowieso niet zo heel standaard. Files includen van je eigen project doe je meestal met quotes ipv angle brackets.Pete schreef op vrijdag 21 maart 2014 @ 09:44:
Vervelend met C++ is dat ze niet de top-level map aan het include-path toevoegen. Oftewel, ik heb al mijn headers in dezelfde map staan, omdat dingen anders niet werken...
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Ik ben niet zo ervaren met c++, dus het kan dat ik het fout heb. Maar bijvoorbeeld, ik heb headers voor mijn wiskundige berekeningen en headers voor mijn strategieën. Ik wil ze in de folders math en strategy plaatsen. Nu is het ok om vanuit een top-level file ze te includen ("#include "math/cdf.h"), maar niet om vanuit de strategy headers de math headers te includen. Wat ik in een normaal project zou doen is de top-level map toevoegen aan het include-path om "#include math/cdf.h" te kunnen doen in andere mappen..oisyn schreef op vrijdag 21 maart 2014 @ 11:44:
[...]
Dat is sowieso niet zo heel standaard. Files includen van je eigen project doe je meestal met quotes ipv angle brackets.
It sucks om over programmeren te schrijven in het Nederlands
https://niels.nu
Enfin, ik heb een redelijk nuttige strategie te pakken, maar er moet nog wel veel getweakt worden. Zijn er al mensen die iets over hun gevoerde strategie willen verklappen?
while (me.Alive) {
me.KickAss();
}
1
| /bin/run_ai: 2: /bin/run_ai: ./java: not found |
Alle java bots vallen als bakstenen in de charts
[ Voor 29% gewijzigd door IWriteCode op 21-03-2014 20:11 ]
Less = more
Bij anderen nog nuttige ontwikkelingen?
while (me.Alive) {
me.KickAss();
}
Ik itereer over alle zichtbare regio's die niet van mij zijn, en bepaal vanaf welke door mij bezette buur/buren ik die regio zou willen aanvallen, met hoeveel legers en waarom (enum). Het aantal legers voor de gewenste aanval hangt af van de kleur van het doel (neutraal / vijandelijk) en de kleur van en (laatst geziene) legers op erachter gelegen regio's en of deze regio's vanaf andere door mij bezette regio's bereikbaar zijn.Corniel schreef op vrijdag 21 maart 2014 @ 20:02:
Zijn er al mensen die iets over hun gevoerde strategie willen verklappen?
Dit gebeurt vóór de place_armies-move al, zodat ik weet welke regio het meest in paniek is, want deze komt het meeste legers tekort om alle gewenste aanvallen uit te voeren.
Daarna itereer ik over alle gewenste aanvallen per superregio die niet in mijn bezit zijn, aflopend op verhouding van mijn bezit, oplopend op aantal regio's binnen de superregio (superregio waarvan 2/4 van de regio's van jou zijn proberen over te nemen is doorgaans makkelijker dan een met 3/6), om te kijken of de aanvallen mogelijk zijn, en zo ja, dan worden die gequeued.
Ik probeer daarna legers te plaatsen per superregio, en plaatsen gebeurt in de verhouding (gevraagde legers / totaal gevraagde legers * plaatsbare legers), behalve wanneer een regio onder zware belegering ligt; dan krijgt 'ie ze gewoon allemaal. Dit laatste zie je helaas bij veel bots, waardoor je 100 beurten lang legers tegenover elkaar aan het stacken bent terwijl de rest van de kaart neutraal blijft.
Uiteindelijk hou ik per regio bij hoeveel legers er nog beschikbaar zijn voor de betreffende beurt, en indien > 0, verplaats ik deze via breadth-first pathfinding richting de dichtstbijzijnde frontlinie (= een van mijn regio's met neutrale of vijandelijke buren). Wanneer voor een gewenste aanval een significant deel van de legers bij de buren niets staat te doen, worden deze richting de aanvallende regio getrokken, hetzij ter verdediging, hetzij om de aanval in de volgende beurt te versterken.
Het geheel werkt met een stel lijsten met in deze beurt mogelijke en gewenste aanvallen, en een lijst met "gewenste aanvallen in de volgende beurt". Indien een aanval vanuit een bepaalde regio in laatstgenoemde lijst staat, laat de logica de legers op die regio met rust.
Verder werkt het een en ander met diverse wegingen, zoals het aantal buren van een land (een neutral met de meeste neighbors heeft de eerste voorkeur om aangevallen te worden), het percentage van de superregio dat in mijn bezit is, het aantal legers dat benodigd is, enzovoorts.
Fixes die ik nog wil toepassen:
• Nóg sterkere focus op superregio's. Ik zie zo nu en dan nog steeds aanvallen naar nieuwe superregio's gedaan worden, terwijl de superregio vanwaar de aanval komt nog niet eens geheel in mijn bezit is.
• Opgeven. Als ik links een superregio dreig te verliezen maar rechts enorm aan het oprukken ben, blijft mijn bot toch aan de linkerkant (bijna) alle legers bijplaatsen, zelfs al zit ik nog maar met 1 leger op 1 region in een verder volledig door de tegenstander bezette superregion.
• Een beter verdeelde frontlinie. De legers concentreren zich nu erg op één regio, zeker wanneer de tegenstander ook op één regio veel legers heeft staan, waardoor ik via mijn buren van die regio (met ieder 1 leger...) nogal gemakkelijk onder de voet gelopen kan worden.
• Terugtrekken. In de top-10 zit een aantal bots dat een aanval uitlokt door al zijn legers terug te trekken van de frontlinie, waardoor jouw bot enkel regio's ziet met 1-3 legers en dus aanvalt. Ik weet niet of dat bewust is gedaan, maar het lijkt regelmatig te werken.
• Neutrals aanvallen vanaf een regio die belegerd wordt indien er dan genoeg legers overblijven om te verdedigen.
• Meerdere "onmogelijke" aanvallen doen vanaf regio's die één of slechts enkele vijandelijke (of neutrale) regio's omringen. Als je 150-200-150 staat, kun je proberen met tweemaal 149 die 200 aan te vallen.
• Inschatten wat de andere bot heeft, krijgt, kan en wil. Hier doe ik nu nog zeer weinig mee. Je weet hoe groot de map is, dus je kunt schatten hoeveel (super)regio's de tegenstander kan hebben en hoeveel legers hij per beurt kan plaatsen. Met de output van opponent_moves kun je verplaatsingen van en aanvallen naar regio's zien die buiten jouw viewrange liggen. Daarnaast kun je met (ver)plaatsingen van legers ongeveer zien waar de aandacht van de tegenstander in ieder geval de vorige ronde naar uitging.
• Bottlenecks (Zuid-Amerika <-> Zuid-Afrika, Nieuw-Zeeland <-> Azië, Groenland <-> IJsland, ...) herkennen en verdedigen, en doodlopende wegen (Zuid-Amerika, Zuid-Afrika, Australië) herkennen en fanatieker de legers laten laten verplaatsen.
Maar ik voorzie nogal wat problemen om deze logica in mijn "lijstensysteem" te integreren, dus dat gaat voor de volgende versie weer op de schop.
Ik heb de Java-starterbot omgebouwd naar C# en er steeds meer uitgesloopt. Het enige dat nog bestaat is de parser, de gamestate en de models ((Super)Region, Map).Corniel schreef op vrijdag 21 maart 2014 @ 20:02:
Ben ik de enige die al snel de start-up kit eruit werkt in z'n codebase?
Ik heb een server die twee bots tegen elkaar laat spelen in code (er komt geen consoleverkeer aan te pas, enkel voor server- en bot-debug-output):

Deze server draait op textfiles, één voor de map (ik gebruik nu nog enkel de standaardmap, maar bij het ontwikkelen was een kleinere map wel prettig) en één voor de eventuele gamestate. Een state bestaat uit de update_map en opponent_moves voorafgaand aan een bepaalde ronde, waardoor ik rare situaties uit replays snel kan nabootsen.
Indien geen state wordt geladen, worden ook de startregio's bemiddeld met de bots.
Stond de map al ergens? Zo nee, bij dezen:

Ik vraag me overigens wel af of we voor de finals nog op dezelfde map spelen, of dat er een of enkele nieuwe maps worden geïntroduceerd. Veel grotere of kleinere maps lijken me wel interessant.
[ Voor 9% gewijzigd door CodeCaster op 22-03-2014 14:01 ]
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
while (me.Alive) {
me.KickAss();
}
Het blijft dezelfde kaart tot en met de finale. Als ze weer een competitie doen met hetzelfde spel dan doen ze mogelijk wel >2 spelers en meerdere kaarten.CodeCaster schreef op zaterdag 22 maart 2014 @ 13:47:Ik vraag me overigens wel af of we voor de finals nog op dezelfde map spelen, of dat er een of enkele nieuwe maps worden geïntroduceerd. Veel grotere of kleinere maps lijken me wel interessant.
Ik heb een eigen implementatie van de server in C#.Corniel schreef op zaterdag 22 maart 2014 @ 17:13:
@CodeCaster: Roep jij Java-code aan, of heb je de server zelf geïnterpreteerd?
De uiteindelijke bot die ik oplever draait in een ConsoleServer, die de console-commands vertaalt naar API-calls op de bot, en vertaalt de responses daarvan weer naar regels om naar de console te schrijven.
Duidelijk, bedankt._js_ schreef op zaterdag 22 maart 2014 @ 17:52:
[...]
Het blijft dezelfde kaart tot en met de finale. Als ze weer een competitie doen met hetzelfde spel dan doen ze mogelijk wel >2 spelers en meerdere kaarten.
[ Voor 12% gewijzigd door CodeCaster op 22-03-2014 18:20 ]
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Enfin, iets wat deze contest mist is een seed setting die je binnen krijgt.
Daar heb ik voor de testbaarheid maar op de volgende manier opmheen gewerkt:
1
2
3
4
5
6
7
8
9
10
11
12
| public void SetRandom(IEnumerable<Int32> ids) { int shift = 0; int step = Math.Max(1, 32 / ids.Count() + 1); foreach (var id in ids) { this.Seed ^= (id << shift); shift += step; } this.Rnd = new Random(this.Seed); } |
Je gebruikt dus de gegeven gebieden om een seed van te maken. Wellicht dat anderen daar hun voordeel mee kunnen doen.
En Shortest path is natuurlijk heel eenvoudig hier. Ik heb een statitische Int[42,42] met de afstand tot de verschillende landen. Je hoeft dus alleen maar naar je buurman toe (ook statisch bekend, map verandert niet) die een kortere afstand heeft volgens de ze matrix.
Ik heb het idee dat het beheersen van regio's die aan aan een andere super regio grenzen vrij belangrijk is. Hopelijk heb ik dat juist. Verder staat mijn code helemaal vol met Linq-expressies.
Om dit makkelijker te maken implementeert zowel de Map, als een SuperRegion bij mij IEnumarable<Region>. Je krijgt dan dit soort code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| /// <summary>Gets the defenders.</summary> public static IEnumerable<Region> GetDefenders(this IEnumerable<Region> regions, bool withStackPotential) { return regions .GetFrontiers() .Where(r => r.IsSuperRegionBorder) .OrderBy(r => Combat.GetWinningChange(r.Neighbors.GetEnermyAttackForce(withStackPotential), r.Armies)); } ... var defenders = this.Map.GetDefenders(true); var defenders2 = this.Map.Europe.GetDefenders(false); var defender3 = regions.GetDefenders(false); ... |
[ Voor 43% gewijzigd door Corniel op 22-03-2014 19:38 ]
while (me.Alive) {
me.KickAss();
}
Omdat mijn server en bot initiëel de gamestate deelden, waar je bot deze op de officiële server uiteraard zelf moet bijhouden, ging er tussen versie 26 en 35 van mijn bot wel het een en ander mis.
Wat de afstanden tussen landen betreft: om je legers te kunnen verplaatsen, moet er wel een pad zijn via landen die van jou zijn, of die dat worden voordat de legers erover moeten. De mogelijke paden kunnen zodoende iedere beurt weer anders zijn.
[ Voor 6% gewijzigd door CodeCaster op 22-03-2014 20:43 ]
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Less = more
2 aangrenzende regio's: 1 van mij met 2 legers, 1 van de vijand (dus niet neutral) met ook 2 legers.
Ik plaats 5 armies op mijn regio, en de vijand plaatst ook 5 armies op zijn regio. Dat laatste krijg ik echter niet van de server terug tot de update_map NA alle stappen van de huidige ronde. Dus als mijn bot de transfer/attack binnen krijgt is het voor hem een 7-2 situatie (zeer gunstig) terwijl het in werkelijk eigenlijk een 7-7 situatie is (zeer ongunstig).
Maar je weet wel ongeveer hoeveel legers de tegenstander mag plaatsen, dus gewoon er van uitgaan dat die allemaal op het land komen dat jij aan wilt vallen, of worst case, dat die allemaal op elk land komen waar je buren mee bent.
[ Voor 6% gewijzigd door Bolukan op 24-03-2014 11:46 ]
Ik ben gisteren opnieuw begonnen trouwens. Was niet heel erg tevreden met wat ik had. Vooral omdat ik in mijn oude opzet geen ruimte had om beter om te gaan met mogelijk gedrag van mijn tegenstander.
Ook lekker trouwens: Een crash en dan in rond 99 alsnog verliezen: http://theaigames.com/com.../533007f84b5ab211edffbd75
[ Voor 17% gewijzigd door Corniel op 24-03-2014 11:28 ]
while (me.Alive) {
me.KickAss();
}
wil je deze beschikbaar stellen?CodeCaster schreef op zaterdag 22 maart 2014 @ 18:18:
Ik heb een eigen implementatie van de server in C#.Die spreekt de bots aan in code, via een interface, dus ik kan gemakkelijk beide bots en de server tegelijk debuggen (al heb ik die laatste al even niet meer aangeraakt
).
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
while (me.Alive) {
me.KickAss();
}
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
dan zien we 'm vanavond wel verschijnenCodeCaster schreef op maandag 24 maart 2014 @ 13:33:
Lekker de concurrentie een handje helpen...Ik moet nog wat dode code verwijderen, een stukje refactoren en iets meer commentaar plaatsen, dan durf ik 'm (inclusief de vanuit Java omgebouwde StarterBot) wel te delen.
Kwam op het forum van warlight.net nog een interessant draadje tegen met een strategy guide. Veel ligt vrij voor de hand, maar misschien toch interessant leesvoer: http://warlight.net/Forum/Thread?ThreadID=34678
[ Voor 45% gewijzigd door IWriteCode op 24-03-2014 15:42 ]
Less = more
Less = more
IWriteCode schreef op maandag 24 maart 2014 @ 21:28:
Geen problemen hiero... wat is de foutmelding?
1
| Parse error: Region id input incorrect ()Parse error: preferred starting regions: Chosen region is not in the given pickable regions list ()settings starting_armies 5 |
ik heb trouwens al een vermoeden waar het mis gaat. Mijn nieuwe bot geeft na elk input een output (ook als deze leeg is), denk dat de server daar over valt... wordt vervolgd!
edit: dat was inderdaad het probleem.......
[ Voor 4% gewijzigd door Kips op 24-03-2014 21:32 ]
Edit: dat was al geëdit.
[ Voor 11% gewijzigd door CodeCaster op 24-03-2014 21:43 ]
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Goed bezig! :-) Mijn is van de 2e plek naar de 15e gezakt... die 'optimalisatie' was toch niet zo'n succes... Nu is m'n bot stuck in de compilation queue.Kips schreef op dinsdag 25 maart 2014 @ 07:57:
oooh, zie mijn bot eens langzaam de rankings beklimmen
Edit: heel de competitie lijkt stil te liggen...
[ Voor 8% gewijzigd door IWriteCode op 25-03-2014 08:18 ]
Less = more
ik krijg nog nieuwe matches in m'n log...IWriteCode schreef op dinsdag 25 maart 2014 @ 08:10:
[...]
Edit: heel de competitie lijkt stil te liggen...
edit: nog steeds down IWriteCode?
Top 50 binnen gekomenKips schreef op dinsdag 25 maart 2014 @ 07:57:
oooh, zie mijn bot eens langzaam de rankings beklimmen
[ Voor 34% gewijzigd door Kips op 25-03-2014 11:25 ]
Het project werkt in ieder geval in Visual Studio Express for Web en Desktop 2012 en 2013.
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
[ Voor 12% gewijzigd door Voutloos op 25-03-2014 23:24 ]
{signature}
[Wedstrijd] Conquest >> [Wedstrijd] Warlight AI Challenge
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
while (me.Alive) {
me.KickAss();
}
[ Voor 10% gewijzigd door CodeCaster op 27-03-2014 17:02 ]
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
while (me.Alive) {
me.KickAss();
}
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Wat ik nog niet gedaan heb is het daadwerkelijk runnen van de twee bots. Ik wil eerst een nieuwe werkende versie van mijn nieuwe aanpak afronden. Wellicht dat jij kan kijken naar hoe dit te laatste te doen? Ik beloof bij deze dat ik de exe's van mijn eerste 13 versies allen beschikbaar stel aan anderen om te testen.
while (me.Alive) {
me.KickAss();
}
while (me.Alive) {
me.KickAss();
}
while (me.Alive) {
me.KickAss();
}
1
2
3
4
5
| Not running yet (write) pick_starting_regions 2000 8 1 11 13 14 16 22 25 36 28 42 39 Timed out Parse error: Region id input incorrect (Timed out) Parse error: preferred starting regions: Chosen region is not in the given pickable regions list (Timed out) |
Verwijderd
Verwijderd
Iemand van Warlight heeft een leuk initiatief genomen om een Warlight AI Challenge livestream te organiseren. De top spelers zijn uitgenodigd om commentaar te geven op hun botjes/wedstrijden en ook wat top "normale" Warlight spelers zullen hun commentaar geven. Zelf zal ik er ook zijn om het een en ander te vertellen. Hieronder zijn bericht.
Deze zondag om half 5 dus. Een week later tijdens de finale zelf is er nog een uitzending. Zeker de moeite waard om te kijken denk ik.I'll be hosting a livestream this coming Sunday, 1st of June.
The plan is to just chat about the ai challenge with different commentators. Analyze some of the more interesting games from the first part of the challenge.
The semi-finals will kick off later that same day, so we can also take a look at the rankings and talk about what bots have a bigger chance of winning.
I'm trying not to clash with the wargamming live stream usual schedule.
Here is the link to the official time of the event:
http://www.timeanddate.co...s%20Kick-Off%20Livestream
Ofcourse hosting this alone would be fucking boring, so i'm asking you folks who usually host/commentate on WGL (Lolowut, Fridge, Latnox, TWM, Pushover) if you want to join me commentating, it would bring in the prespective of the warlight veteran who has no clue how to code the bot, so it would pop some more interesting / relevant questions for folks who don't code and might be watching.
I'm also asking folks who developed a bot (Norman, Trogatog, 125ch209, Garrett, GreenTea, Ikalgo, Muli, Odin, Z-Dog, pedrito) to join in and contribute talking about the strategy behind their bots, so if you're reading and not camera shy, now is the time to clear your schedule and add 'psenough' on your skype contacts.
I would also like to have jim (one of the organizers of the compo) present if he's able. Please let me know if you're available.
And last but not least would be cool if Fizzer could announce the broadcast while we're broadcasting. I'll announce this on a forum thread in the following days ofcourse, but would be nice to have more live viewers.
I'll try to setup twitch.tv to record the whole broadcast so it can be shared later on and such.
This will be a test-run for also covering the final live later in the final weeks of June when it takes place.
Hebben jullie de nieuwe (Beta) Omaha competitie al gezien trouwens?