[Wedstrijd] Warlight AI Challenge Overzicht Volgende deel Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1 2 Laatste
Acties:

Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Afbeeldingslocatie: http://i.imgur.com/E7KSiNL.jpg

Warlight AI Challenge

Warlight is een Risk-achtig spel waar je legers plaatst op een wereldkaart, aanvalt en uiteindelijk de vijand van de kaart speelt.

The AI Games (van Star Apple?) heeft een programmeerwedstrijd uitgeschreven om een programma te schrijven dat het spel speelt, met als hoofdprijs € 1024. Andere prijzen zijn lagere machten van € 2.
Het spel
Voor je zie je een wereldkaart. Om te beginnen kies je je voorkeuren voor je beginlanden, je krijgt overal twee legers op. Op de landen die niet van een van de spelers is komen 2 neutrale legers die alleen verdedigen.

Vanaf nu is het oorlog! De twee spelers krijgen elke beurt 5 legers plus eventuele bonussen voor het bezetten van hele continenten, en geven opdrachten om legers te verplaatsen. Omdat je opdrachten op volgorde worden uitgevoerd, maar willekeurig afgewisseld met de opdrachten van de tegenstander kan het zijn dat een verplaatsing een aanval wordt, of dat de legers die je zou verplaatsen al dood zijn na een aanval. Zodra je de tegenstander helemaal van de kaart hebt gespeeld heb je gewonnen.
Wat je wilt weten:
Moeilijksheidsgraad: makkelijk, 20 regels Java geeft al een basis waarin je alleen nog je eigen strategie hoeft te plaatsen, tot gemiddeld afhankelijk van hoe goed je bot moet worden.
Finales: ergens in april, wel zorgen dat je in de qualifying ronde die al loopt en doorgaat tot de finaleselectie de top 24 haalt (top 48 bij voldoende deelnemers).
Toegestane talen: C, C++ (GCC 4.6.3 zonder flags, dus met -O0), C# in Mono 2.10.8 (~ .Net 4), Java, PHP, Python 2.7.3, Haskell en Go. Er ligt een feature request for Scala, maar die is nog niet geïmplementeerd.
Handige links
Wedstrijdsite
Spelbeschrijving
Gedetailleerde uitleg van de regels met Java voorbeeldcode
Broncode van de server om de precieze regels te zien
Zelf spelen tegen mensen of een AI, de wedstrijd gebruikt de regels ongeveer zoals ze in level 2 zijn

Voorbeeldbot in Java (zip)
Voorbeeldbot in C# (zip)
Voorbeeldbot in Python
Voorbeeldbot in PHP, onofficieel
Tips
• Het spel wordt altijd op dezelfde kaart gespeeld, dus die kun je vooraf analyseren.
• Hoe groter de legers, hoe groter het verschil tussen de legers moet zijn om een aanval te kunnen winnen.

[ Voor 7% gewijzigd door _js_ op 22-03-2014 16:37 . Reden: Meer starterbots, Haskell genoemd, compiler versies, urls bijgewerkt, naam bijgewerkt, python starter veranderd ]


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Ben zelf net begonnen met iets in elkaar te zetten in C#. Voor zover ik kan zien is de tegenstand nog niet heel sterk (of het spel is een stuk moeilijker dan ik denk). Dus er moeten kansen zijn om een deel van dat prijzengeld te pakken.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 06-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Each attacking army has 60% chance to destroy 1 defending army. So if there are 10 attacking armies, they will kill on average 6 defending armies.

For each defending army however, there is a 70% chance that it will destroy 1 attacking army. So that's 7 on average with 10 attacking armies. The defending region has the advantage, so make sure you attack with enough armies!
Euh, hoe kan dit :?

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.


Acties:
  • 0 Henk 'm!

  • spleethoven
  • Registratie: Oktober 2010
  • Laatst online: 24-01-2024
Aanval en verdediging wordt apart berekend?

dus iets van:

* aanvaller - 60% kans verdediger is vernietigd
* verdediger - 70% aanvaller is vernietigd
* aanvaller - 60% kans verdediger is vernietigd
* ...
Anders dan dit zie ik ook niet in hoe het zou werken

[ Voor 11% gewijzigd door spleethoven op 05-03-2014 11:03 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 06-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

En hoe zit dat dan met die kans? Of is er eigenlijk helemaal geen kans en vernietigen 10 aanvallers altijd 6 verdedigers en 10 verdedigers altijd 7 aanvallers? En hoe wordt er dan afgerond?

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.


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Voorbeeld: je valt vanuit land A met 10 aanvallers land B aan waarop 6 verdedigers staan. Een aanvaller heeft 60% kans om te winnen, dus met 10 aanvallers zul je de 6 verdedigers uitschakelen (niet altijd, want random, maar even als voorbeeld). De verdedigers hebben 70% kans om een aanvaller uit te schakelen, dus de 6 verdedigers zullen 4,2 aanvallers uitschakelen.

Na deze ronde heeft A nog 10 - 4,2 = 6 mensen over en B heeft er 6 - 6 = 0. Vervolgens moet A van zijn 6 overlevenden er een aantal verplaatsen naar land B.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 06-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

HuHu schreef op woensdag 05 maart 2014 @ 12:09:
dus met 10 aanvallers zul je de 6 verdedigers uitschakelen (niet altijd, want random
Ok hoe werkt het algoritme dan? 10 draws van 60% en 6 van 70%?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
numAttackers = 10;
numDefenders = 6;

attackersKilled = 0;
defendersKilled = 0;

for (i = 0; i < numAttackers && defendersKilled < numDefenders; i++)
    if (rand() < 0.6)
        defendersKilled++;

for (i = 0; i < numDefenders && attackersKilled < numAttackers; i++)
    if (rand() < 0.7)
        attackersKilled++;


Zoiets?

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.


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
.oisyn schreef op woensdag 05 maart 2014 @ 12:24:
[...]

Ok hoe werkt het algoritme dan? 10 draws van 60% en 6 van 70%?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
numAttackers = 10;
numDefenders = 6;

attackersKilled = 0;
defendersKilled = 0;

for (i = 0; i < numAttackers && defendersKilled < numDefenders; i++)
    if (rand() < 0.6)
        defendersKilled++;

for (i = 0; i < numDefenders && attackersKilled < numAttackers; i++)
    if (rand() < 0.7)
        attackersKilled++;


Zoiets?
Exact zoiets: https://github.com/theaig...ter/main/Engine.java#L369

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 14:37
Ik ben geen java expert ofzo, maar zouden ze die random niet eenmalig moeten aanmaken met een seed? In C# krijg je met dit soort grappen gewoon telkens hetzelfde antwoord als de random statements maar snel genoeg achter elkaar worden aangeroepen.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Caelorum schreef op woensdag 05 maart 2014 @ 12:35:
Ik ben geen java expert ofzo, maar zouden ze die random niet eenmalig moeten aanmaken met een seed? In C# krijg je met dit soort grappen gewoon telkens hetzelfde antwoord als de random statements maar snel genoeg achter elkaar worden aangeroepen.
Nee, dat hoeft niet: http://docs.oracle.com/ja...a/lang/Math.html#random()

De eerste aanroep naar Math.random() maakt een nieuw Random() object aan en opvolgende aanroepen maken daar steeds gebruik van door nextDouble() aan te roepen. Daar hoef je dus niet zelf op te letten.

Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Daar zit nog een gotcha in die .oisyn niet heeft meegenomen, het aantal legers in een regio kan nooit 0 zijn, dus als het aantal aanvallers en verdedigers gelijk is en ze gaan allemaal dood, dan blijft toch een verdediger leven. Dit is vooral relevant bij 1v1 en 2v2.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 06-10 10:20

Janoz

Moderator Devschuur®

!litemod

Nope. Ten eerste staat op regel 385 code die er voor zorgt dat er altijd 1 verdediger overblijft wanneer ze elkaar af maken. Daarnaast is 'attackingArmies' niet gelijk aan het aantal legers op het aanvallende land staat. attackingArmies is het aantal legers dat aan de aanval toegekend is. En daar kun je nooit meer dan "alles -1" van maken (wordt op regel 364 nog even extra gevalideerd).

[ Voor 6% gewijzigd door Janoz op 06-03-2014 14:04 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Janoz schreef op donderdag 06 maart 2014 @ 14:03:
Nope. Ten eerste staat op regel 385 code die er voor zorgt dat er altijd 1 verdediger overblijft wanneer ze elkaar af maken. Daarnaast is 'attackingArmies' niet gelijk aan het aantal legers op het aanvallende land staat. attackingArmies is het aantal legers dat aan de aanval toegekend is. En daar kun je nooit meer dan "alles -1" van maken (wordt op regel 364 nog even extra gevalideerd).
Ik weet niet waarom je "nope" zegt...

AttackingArmies en aanvallers lijkt me equivalent.

Om te zorgen dat zowel alle aanvallers en alle verdedigers doodgaan moet het aantal aanvallers en verdedigers gelijk zijn, want elke verdediger kan 0 of 1 aanvallers doden en omgekeerd. Alle legers in het verdedigende land worden altijd gebruikt. Dus alles dood moet komen van een aanval met evenveel aanvallers als dat er verdedigers zijn. Het aantal legers dat niet meedoet met de aanval is niet relevant, want alleen de overlevende aanvallers bezetten eventueel het verdedigende land. Er blijft toch 1 verdediger leven als er geen bezetting komt omdat de aanvallers allemaal dood zijn en de verdedigers volgens alleen de kansberekeningen ook dood waren. De "gotcha" is dus dat in dat geval de verdediger een betere kans heeft om te overleven. 1 aanvaller (uit een regio met 2 of meer legers) tegen 1 verdediger zou normaal gesproken 60% van de tijd de verdediger doodmaken, en gaat zelf 70% van de tijd dood. Maar omdat bij alles dood de verdediger toch blijft leven is de kans om de verdediger te doden gedaald naar 18%. Bij twee aanvallers is de kans om een eenzame verdediger te doden wel zoals verwacht 100% - (100%-60%)^2= 84%.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 06-10 10:20

Janoz

Moderator Devschuur®

!litemod

Je hebt gelijk, ik las je reactie compleet verkeerd en interpreteerde hem alsof je een bug in de engine gevonden had. My bad.

Wat ik echter niet begrijp is het volgende stuk in de beschrijving:
The amount of armies for the attack/transfer cannot be greater than the amount of armies on the attacking region, so there will always be 1 army standing.
Het eerste deel doet vermoeden dat je nooit met meer legers aan mag vallen dan het aantal verdedigende legers (en nooit meer legers naar een land mag moven dan er al op staan). Maar dat matcht compleet niet met het tweede deel van de zin. Ook zie ik die restrictie verder niet terug.

[ Voor 67% gewijzigd door Janoz op 06-03-2014 15:04 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Janoz schreef op donderdag 06 maart 2014 @ 15:01:
Je hebt gelijk, ik las je reactie compleet verkeerd en interpreteerde hem alsof je een bug in de engine gevonden had. My bad.

Wat ik echter niet begrijp is het volgende stuk in de beschrijving:


[...]

Het eerste deel doet vermoeden dat je nooit met meer legers aan mag vallen dan het aantal verdedigende legers (en nooit meer legers naar een land mag moven dan er al op staan). Maar dat matcht compleet niet met het tweede deel van de zin. Ook zie ik die restrictie verder niet terug.
Volgens mij wordt daarmee bedoelt dat je niet met meer dan n-1 legers kunt aanvallen, waarbij n het aantal legers is op het land dat de aanval uitvoert (en dus niet het aangevallen / verdedigende land). Mocht je dan in de aanval al je legers verliezen, dan hou je er nog 1 over.

Acties:
  • 0 Henk 'm!

  • Xuj
  • Registratie: November 2009
  • Laatst online: 05-06 11:08

Xuj

Hoe bedoel je?
The amount of armies for the attack/transfer cannot be greater than the amount of armies on the attacking region, so there will always be 1 army standing.
Het deel 'attacking region' geeft aan dat het gaat om de aanvallende regio en niet de regio die aangevallen wordt. Anders had er 'on the to-be-attacked region' moeten staan.

Overigens ben ik zelf bezig met een Python bot, zal wanneer die af is een link posten naar een template zodat mensen die ook met Python willen werken een makkelijkere start kunnen maken. :)

Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Janoz schreef op donderdag 06 maart 2014 @ 15:01:
Je hebt gelijk, ik las je reactie compleet verkeerd en interpreteerde hem alsof je een bug in de engine gevonden had. My bad.

Wat ik echter niet begrijp is het volgende stuk in de beschrijving:


[...]

Het eerste deel doet vermoeden dat je nooit met meer legers aan mag vallen dan het aantal verdedigende legers (en nooit meer legers naar een land mag moven dan er al op staan). Maar dat matcht compleet niet met het tweede deel van de zin. Ook zie ik die restrictie verder niet terug.
Attacking = aanvallende, niet de aangevallene. Hoewel de zin niet klopt, want off by one, heeft het niets met de verdediger of doel te maken.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 06-10 10:20

Janoz

Moderator Devschuur®

!litemod

Ik zie het. Ben echt niet scherp vandaag :D.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 28-09 18:33
Ik heb maar eerst een beetje zitten rekenen en met het dubbele aantal legers aanvallen leidt tot 80% succes

Acties:
  • 0 Henk 'm!

Verwijderd

Thanks voor de post _js_!

Ik ben de developer van theaigames.com,
Gelukkig zijn jullie er uit gekomen hoe attacking/defending werkt ;). Het is dus zo dat iedere aanvaller 60% kans heeft om 1 leger te vernietigen, dus als je met 10 legers aan valt is het 10x 60% kans om 1 leger van het verdedigende land te vernietigen. Komt neer op een gemiddelde van 6 legers.
Voor de verdediger hetzelfde verhaal: elk verdedigende leger heeft 70% kans om 1 aanvaller te vernietigen.

En de aanvaller moet inderdaad altijd 1 leger laten staan op zijn land, net als Risk eigenlijk.

Waarschijnlijk worden de spelregels nog wel even wat duidelijker gemaakt binnenkort, maar ze zijn voornamelijk gebaseerd op Warlight, zoals _js_ ook al in zijn post had staan. We werken ook samen met de developer hiervan.

Vragen ben ik altijd bereid om te beantwoorden :). Veel plezier en succes met deze competitie! (Er komen er meer in de toekomst, zoals poker).

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02:18
Leuke wedstrijd! Ik hoop dat er voldoende wedstrijden gespeeld worden in de competitie om de geluksfactor zo veel mogelijk uit te schakelen.

Overigens een klein puntje van kritiek: het lijkt er op dat de server zetten die op zich geldig zijn, maar niet meer uitgevoerd kunnen worden omdat de legers die er in deelnemen inmiddels door een tegenstander zijn uitgeschakeld, als “illegal move” markeert. Dat is jammer, want dat is natuurlijk een ander probleem dan dat een zet nooit geldig was geweest.

Als deelnemer probeer je natuurlijk een speler te schrijven die nooit ongeldige zetten doet (anders is er iets mis met je interpretatie van de spelregels) maar nu kun je niet goed zien of je programma correct functioneert, omdat ook een correcte speler soms zogenaamde “illegal moves” doet.

[ Voor 9% gewijzigd door Soultaker op 07-03-2014 22:28 ]


Acties:
  • 0 Henk 'm!

  • bReChThOu
  • Registratie: Januari 2007
  • Laatst online: 06-10 16:08

bReChThOu

Team Belgium

Leuke contest, en tevens mijn eerste. Ik ga gelijk aan de slag :Y

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 06-10 17:29

Matis

Rubber Rocket

Leuke idee. Ik vind Risk sws een leuk spel om te spelen.

Ik zie dat C++ toegestaan is, maar valt Qt (als Framework) hier ook onder? Dat kan ik nergens vinden.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
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.

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

  • Johnnei
  • Registratie: Augustus 2011
  • Laatst online: 24-08 18:54

Johnnei

Uuhmmm....

Ik doe hier ook aan mee, zeer leuk om eens te kijken of ik een AI kan schrijven die nog enig sinds kan winnen :+
Misschien is het ook wel leuk om met alle deelnemende tweakers in een Institute te gaan?

They blur the lines and lead the way, their way!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 06-10 10:20

Janoz

Moderator Devschuur®

!litemod

Hmm, ik had eigenlijk nog even de hoop dat er ook een mogelijkheid was om lokaal een wedstrijd te draaien zoals bij de mierenwedstrijd ook mogelijk was. Blijkbaar moet ik de servercode uit github ff strippen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Janoz schreef op zondag 09 maart 2014 @ 00:04:
Hmm, ik had eigenlijk nog even de hoop dat er ook een mogelijkheid was om lokaal een wedstrijd te draaien zoals bij de mierenwedstrijd ook mogelijk was. Blijkbaar moet ik de servercode uit github ff strippen.
Omdat er misschien meer mensen zijn die dat willen doen maar even een handleidinkje geschreven. Om java te compilen heb je een jdk nodig.

Er zit helaas geen visualisatie bij.

Je hoeft gelukkig maar 1 bestand aan te passen, RunGame.java.
- org.bson en com.mongodb imports weg;
- DB db; declaratie weg.
- in go() de regel "db = ..." weg en 2x uit new IORobot de string met .sh weg;
- saveGame() leeg, en als je alles wilt weten iets dat getPlayedGame(this.engine.winningPlayer(),"") wegschrijft (lege string vervangen door "player1" of "player2" als je de resultaten vanuit het perspectief van die speler wilt) invoegen, anders bijvoorbeeld iets als:
Java:
1
2
Player winner = this.engine.winningPlayer();
System.out.println(winner == null ? "no winner" : winner.getName());


En de boel met een IDE compilen en uitvoeren. Heb je die niet, dan:

Compilen, nog wel even het pad naar javac toevoegen, uitvoeren vanuit de conquest_engine_master map.
dir /b /s *.java>sources.txt
md classes
javac -d classes @sources.txt
del sources.txt

Uitvoeren, de bots vervangen door je eigen, 2>... en 1>... redirecten stderr en stdout naar bestanden, kun je weghalen als je het gewoon wilt zien.
cd classes
java main.RunGame 0 0 0 "java bot.BotStarter" "java bot.BotStarter" 2>fouten.txt 1>resultaten.txt
cd ..

[ Voor 13% gewijzigd door _js_ op 09-03-2014 02:45 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02:18
Johnnei schreef op zaterdag 08 maart 2014 @ 22:45:
Misschien is het ook wel leuk om met alle deelnemende tweakers in een Institute te gaan?
Vind ik wel een leuk idee. Hoe noemen we die? Gewoon Tweakers?

Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 28-09 18:33
Goed idee:

Tweakers Leaderboard

@Hieronder: he jammer, stond ik toch 2 minuten een keer bovenaan :P

[ Voor 24% gewijzigd door Bolukan op 11-03-2014 10:07 ]


Acties:
  • 0 Henk 'm!

  • TheDevilOnLine
  • Registratie: December 2012
  • Laatst online: 06-06 22:54

Acties:
  • 0 Henk 'm!

Verwijderd

Heb me ook bij de institute aangesloten =)
Het is nu nog een starterbot, maar ben al bezig om een wat intelligenter botje te schrijven =)

Acties:
  • 0 Henk 'm!

Verwijderd

Ben inmiddels al even onderweg, ook maar Tweakers als institute bijgeplaatst. Ik had dankzij dit topic de wedstijd ook gevonden, waarvoor dank.

Acties:
  • 0 Henk 'm!

  • Johnnei
  • Registratie: Augustus 2011
  • Laatst online: 24-08 18:54

Johnnei

Uuhmmm....

Bolukan schreef op dinsdag 11 maart 2014 @ 10:03:
Goed idee:

Tweakers Leaderboard

@Hieronder: he jammer, stond ik toch 2 minuten een keer bovenaan :P
Ik heb mij ook aan gesloten :)
Straks maar weer eens verder puzzelen om mijn AI slimmer te krijgen dan de rest :Y Zal alleen wel lastig worden om 1900 punten te halen voor mij :P

[ Voor 1% gewijzigd door Johnnei op 11-03-2014 14:01 . Reden: typo ]

They blur the lines and lead the way, their way!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 06-10 10:20

Janoz

Moderator Devschuur®

!litemod

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.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • sschalkwijk
  • Registratie: Maart 2013
  • Laatst online: 04-10 21:28
Altijd leuk zoiets ik ga ook eens een poging doen! Alleen hopen dat ik er genoeg tijd voor heb..

Acties:
  • 0 Henk 'm!

  • Chip.
  • Registratie: Mei 2006
  • Niet online
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.
Oh jammer. Het is dus niet toegestaan om gewoon even een optimization toolbox te gebruiken. Bummer.

Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
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.
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.

petersmit.eu


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 06-10 11:28

TheNephilim

Wtfuzzle

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 :+

Acties:
  • 0 Henk 'm!

  • Xuj
  • Registratie: November 2009
  • Laatst online: 05-06 11:08

Xuj

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 :+
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. :P

Acties:
  • 0 Henk 'm!

  • Chip.
  • Registratie: Mei 2006
  • Niet online
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.
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.

Acties:
  • 0 Henk 'm!

Verwijderd

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.
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.

Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
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.
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.

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.

petersmit.eu


Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 28-09 18:33
Het veroveren van regions is geen doel, maar een middel: belangrijkste doel van mijn ai is het her/veroveren van een superregion en daarmee maak je uiteindelijk Other een kopje kleiner. Een region meer of minder levert je verder niets op (basis aantal armies blijft 5). Daarom heb ik niet gekozen voor een graaf-aanpak. (Btw, ik heb er ook aan gedacht.)

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.

Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
Inderdaad zal iedereen een graaf implementeren. En waarschijnlijk zul je ook een shortest-path algoritme nodig hebben om troepen naar het front te verplaatsen.

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 :X

Welke talen gebruiken jullie? Ik heb mijn bot nu in C++ geschreven.

petersmit.eu


Acties:
  • 0 Henk 'm!

  • TheDevilOnLine
  • Registratie: December 2012
  • Laatst online: 06-06 22:54
Laten we proberen beste 'institute' te worden!
After 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.
Ook zijn de regels een stukje veranderd
There 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.
Alle wijzigingen zijn te vinden op http://theaigames.com/dis...4571/major-changes/1/show

P.S. de finales zijn ook een maand vertraagd!

Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 28-09 18:33
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.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02:18
Pff, al dat gezeur over grafen, alsof de observatie dat het speelveld als graaf gemodelleerd kan worden automatisch een zinnige strategie oplevert. 8)7
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 :X
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.

Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
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. 8)7
Inderdaad, precies mijn punt. De standaard optimalizatie-algoritmes voor grafen hebben hier heel weinig nut als strategie.

petersmit.eu


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Bolukan 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.
Oeh, sneaky ons onze beste tactieken proberen te ontfutselen >:) Ik denk niet dat je echt kunt spreken van de beste tactiek voor het veroveren van een continent, omdat je met veel dingen rekening moet houden, ik probeer in mijn bot (die nog af genoeg is om te uploaden :/) rekening te houden met 7 verschillende dingen bij het veroveren van een leeg continent.

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.

Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
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.

petersmit.eu


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02:18
Voor C++ programmeurs is het ook handig dat C++11 (grotendeels) ondersteund wordt:
C++ now compiles with the "c++0x" flag
* Soultaker gaat maar eens z'n codebase herschrijven om daar gebruik van te maken. :9

Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
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.
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.

[ Voor 4% gewijzigd door _js_ op 14-03-2014 23:05 ]


Acties:
  • 0 Henk 'm!

  • IWriteCode
  • Registratie: Juli 2000
  • Laatst online: 18-09 13:34

IWriteCode

Less = more

Sharky (met bot Punisher) in het huis! Sta ik meteen op de 1e plek van Tweakers... jeuj! :-)

Less = more


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02:18
Oh, je bent niet deze Sharky. Verwarrend :+

[ Voor 12% gewijzigd door Soultaker op 15-03-2014 16:17 ]


Acties:
  • 0 Henk 'm!

  • Ceyhan
  • Registratie: November 2009
  • Laatst online: 28-01-2021
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! :-)
Nog 23 punten Sharky..... Thee?Yo 8)7 |:(

Afbeeldingslocatie: http://www.plaatjesdump.nl/upload/f882bc022b142c271fd9f81cec3bb770.png

Acties:
  • 0 Henk 'm!

Verwijderd

Vanaf vanochtend zijn we officieel gaan samenwerken met Warlight.net :D

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 ;) Maar meer users betekent dat wij ook meer kunnen werken aan de website, dus meer competities, grotere prijzen en vooral ook meer fun!

Veel succes met jullie bots jongens!

Acties:
  • 0 Henk 'm!

  • bReChThOu
  • Registratie: Januari 2007
  • Laatst online: 06-10 16:08

bReChThOu

Team Belgium

Ondertussen al 90 deelnemers, zeer nice. Succes allemaal d:)b

[ Voor 4% gewijzigd door bReChThOu op 18-03-2014 22:08 ]


Acties:
  • 0 Henk 'm!

  • shorttracker
  • Registratie: Augustus 2005
  • Laatst online: 01-08-2021
Waar vinden jullie welke modules gebruikt kunnen worden in de code?
zo kan ik bijvoorbeeld de random.py module niet gebruiken.

Is dit gewoon uitproberen, of zijn er ergens hints te vinden?

Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Ze gebruiken vaak iets verouderde versies van compilers en zo, ook van Python. Er staat wat op http://theaigames.com/dis...b45be/report-a-bug/1/show
Waarschijnlijk is het het makkelijkst om zelf een simpele PRNG te maken.
Python 2.7.3
Mono 2.10.8
GCC 4.6.3

Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 10:25
Ik zit al een tijdje te lurken hier. De Ant AI challenge van Google was ook erg leuk....
Maar als ik zie hoeveel tijd ik daar in heb gestoken..

Geen tijd hiervoor atm.. zo jammer :P

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Ik ga maar een poging wagen. Ik kan het gewoon niet laten. :)

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • TheDevilOnLine
  • Registratie: December 2012
  • Laatst online: 06-06 22:54
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! :-)
I will find you... And I will conquer you! ;-)

Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 28-09 18:33
AIJim, kun je tweakers niet bovenaan zetten in de lijst van Institutes: we zijn nog de enige met 5 of meer deelnemers :P
Leaderboard Institutes

[ Voor 32% gewijzigd door Bolukan op 19-03-2014 19:07 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Nice! na te lang onderaan te hebben gestaan is de klimtocht omhoog begonnen, m'n nieuwe bot (v22) heeft nog geen game verloren =)
Ben benieuwd waar de weerstand begint te komen.
Echt slim is m'n bot namelijk nog niet.

Acties:
  • 0 Henk 'm!

  • IWriteCode
  • Registratie: Juli 2000
  • Laatst online: 18-09 13:34

IWriteCode

Less = more

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

Less = more


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Ik ben met mijn bot aanbeland bij versie 36, die gebruikmaakt van breadth-first pathfinding naar de "frontlinie". Ik stuiter al een paar dagen heen en weer tussen positie 10 en 15 in de rankings. Om hoger te komen zal ik mijn wegingen van de frontlinies moeten aanpassen... :P
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...


Acties:
  • 0 Henk 'm!

  • Xuj
  • Registratie: November 2009
  • Laatst online: 05-06 11:08

Xuj

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
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. 8)7

Zodra de engine IO een patch krijgt om hier netjes overweg te gaan, loopt alles weer vlekkeloos.

Acties:
  • 0 Henk 'm!

  • IWriteCode
  • Registratie: Juli 2000
  • Laatst online: 18-09 13:34

IWriteCode

Less = more

Volgens mij hebben ze detectie of iemand zit te kijken naar de game-log... Ik zit al een hele tijd te kijken... maar al 150+ potjes... geen Dominator bot in actie :( Zooo zielig...

Less = more


Acties:
  • 0 Henk 'm!

  • Kips
  • Registratie: Januari 2005
  • Laatst online: 06-10 15:44
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.

[ Voor 29% gewijzigd door Kips op 20-03-2014 15:46 ]


Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 28-09 18:33
Kips, kun je een link naar de dump erbij zetten? Dan ga ik die vanavond eens proberen.

@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 ]


Acties:
  • 0 Henk 'm!

  • Kips
  • Registratie: Januari 2005
  • Laatst online: 06-10 15:44
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.
dump is default, want volgens mij zijn de neighbors altijd hetzelfde...

Acties:
  • 0 Henk 'm!

  • bReChThOu
  • Registratie: Januari 2007
  • Laatst online: 06-10 16:08

bReChThOu

Team Belgium

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.
Klopt, op windows zit je met deze limiet in de console.
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:

C#:
1
 Console.WriteLine("Your input was: " + Console.ReadLine() + " characters long");


C#:
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 ]


Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 28-09 18:33
Dit werkt bij mij:
C#:
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);
}

Acties:
  • 0 Henk 'm!

  • IWriteCode
  • Registratie: Juli 2000
  • Laatst online: 18-09 13:34

IWriteCode

Less = more

The site lijkt down... :(

Less = more


Acties:
  • 0 Henk 'm!

  • Xuj
  • Registratie: November 2009
  • Laatst online: 05-06 11:08

Xuj

En weer up

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
FF een simpel vraagje: kan je je bot in een willekeurige package stoppen, en zoekt 'ie gewoon de eerste main() ofzo? Dat kan ik zo niet op de site vinden. Of moet de bot 'bot.Bot' heten?

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
Het ligt aan de taal. Voor C++ heb ik gemerkt dat er een toplevel file moet zijn met een main(). Voor php zeggen ze "include __main__ in your main PHP file, so our compiler can recognize it". De naam haalt denk ik nooit uit.

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 ]

petersmit.eu


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Ik ben bezig in Java (op dit moment alleen maar met de engine om ook wat output te krijgen waar ik wat mee kan).

https://niels.nu


Acties:
  • 0 Henk 'm!

  • IWriteCode
  • Registratie: Juli 2000
  • Laatst online: 18-09 13:34

IWriteCode

Less = more

@Hydra ik heb alle mongodb zaken eruit gesloopt... en gewoon naar text files geredirect. Zijn maar paar kleine aanpassingen voor nodig.

Less = more


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
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.
Ja, ik heb 't al draaien.

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


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 06-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

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...
Dat is sowieso niet zo heel standaard. Files includen van je eigen project doe je meestal met quotes ipv angle brackets.

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.


Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
.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.
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.

offtopic:
It sucks om over programmeren te schrijven in het Nederlands

petersmit.eu


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Eerste (standaard starter) bot gedeployed. Heb alles behalve bot.BotStarter naar m'n eigen sourcedir verplaatst, een zip gemaakt en deze geupload, dus dat werkt. Mijn v0 versie is al lekker aan 't dalen in de stats :D

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Ben ik de enige die al snel de start-up kit eruit werkt in z'n codebase? Het was nuttig om een beeld te krijgen van hoe dingen (ongeveer) zouden moeten werken, en met een set unittests kan je wat veiliger bouwen, maar verder? Ik bedoel: de opzet van de parser van C#-starterbot was niet heel erg best imho.

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();
}


Acties:
  • 0 Henk 'm!

  • IWriteCode
  • Registratie: Juli 2000
  • Laatst online: 18-09 13:34

IWriteCode

Less = more

Java doet het niet meer:
code:
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


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Het was even puzzelen, maar ik heb toch nog wat gehad aan numerieke wiskunde. Ik heb nu eindelijk een goede schatting van mijn win - en verlieskansen. Om wille van de snelheid het resultaat ook maar gecached. Met cache, testrun 4 seconde, zonder cache 19 seconde.

Bij anderen nog nuttige ontwikkelingen?

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Corniel schreef op vrijdag 21 maart 2014 @ 20:02:
Zijn er al mensen die iets over hun gevoerde strategie willen verklappen?
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.

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.

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 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).

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):

AIGames.Conquest console server

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:
AIGames.Conquest map + superregions

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...


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

@CodeCaster: Roep jij Java-code aan, of heb je de server zelf geïnterpreteerd?

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
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.
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.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Corniel schreef op zaterdag 22 maart 2014 @ 17:13:
@CodeCaster: Roep jij Java-code aan, of heb je de server zelf geïnterpreteerd?
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 :P).

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. :P
_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.
Duidelijk, bedankt. :)

[ 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...


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

@CodeCaster: zoiets was ik zelf ook bijna gaan schrijven, maar voor je het weet heeft je server een andere implementatie dan de echte server, en dan optimaliseer je onhandig.

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:
C#:
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:

C#:
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();
}


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Hoe de server zich gedraagt is aardig gedocumenteerd, dus dat heb ik gewoon nagebouwd tot ik lokaal hetzelfde kon naspelen als op hun server gebeurt. Ik gebruik mijn server voornamelijk om bepaalde situaties na te spelen die zich op de officiële server hebben voorgedaan, om te kijken waarom mijn bot bepaalde beslissingen neemt. Daarnaast test ik regelmatig met een lege map, om te zien hoe en in hoeveel beurten alle regio's worden overgenomen.

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. O-) Tip: noteer welke versie van je bot het beste presteerde, en upload deze versie als een nieuwere versie zich misdraagt.

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...


Acties:
  • 0 Henk 'm!

  • IWriteCode
  • Registratie: Juli 2000
  • Laatst online: 18-09 13:34

IWriteCode

Less = more

Hmm... weer wat nieuwe bots die goed presteren... dan toch nog maar wat tijd in optimalisatie(s) steken... :-)

Less = more


Acties:
  • 0 Henk 'm!

  • bReChThOu
  • Registratie: Januari 2007
  • Laatst online: 06-10 16:08

bReChThOu

Team Belgium

Hoe gaan jullie om met het feit dat je niet weet waar de vijand zijn legers plaatst tot de volgende? Ik ben een aantal van mijn losses aan het analyseren samen met de output en ik kom tot de volgende statering (uitgelegd met een concreet voorbeeld):
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).

Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Ja, die stappen zijn gelijktijdig, dus je weet inderdaad niet wat er in de beurt gebeurt totdat het is gebeurd.

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.

Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 28-09 18:33
Worse case is me te defensief, dan verlies je ook. Een ding waar ik aan heb gedacht is om de plaatsingen van de afgelopen 2 beurten te gebruiken als voorspelling van de taktiek van de "other" en dat wel als voorspelling mee te nemen

Acties:
  • 0 Henk 'm!

  • bReChThOu
  • Registratie: Januari 2007
  • Laatst online: 06-10 16:08

bReChThOu

Team Belgium

Verderop in het spel, wanneer je allebei veel regio's hebt wordt het mogelijk nog riskanter. Jij kan een regio met 1 leger hebben, en er 7 legers bijzetten. Je vijand heeft een aangrenzende regio met 2 legers waar hij 12 legers opzet. Je bot denkt dan 8 - 2, terwijl het in feite 8 - 14 wordt. Als je elk 10+ regio's hebt wordt het moeilijk om te voorspellen waar de legers bijkomen, en van een worst case scenario uitgaan op elke aangrenzende regio blokkeert je gewoon.

Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 28-09 18:33
Een keer mis hebben, is niet erg. Maar als je beide gaat opzetten kun je beter de andere als eerste laten aanvallen
spoiler:
en jouw eventuele move/attack aan het einde van de queue plaatsen

[ Voor 6% gewijzigd door Bolukan op 24-03-2014 11:46 ]


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Als je alles worst case benaderd heb je natuurlijk wel een probleem: dan blijf je verdedigen (en komt dan niet meer aanvallen toe) of je geeft alle regio's op.

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();
}


Acties:
  • 0 Henk 'm!

  • Kips
  • Registratie: Januari 2005
  • Laatst online: 06-10 15:44
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 :P).
wil je deze beschikbaar stellen? 8)
Pagina: 1 2 Laatste