[Wedstrijd] AI Block Battle Vorige deel Overzicht Volgende deel Laatste deel

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

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

Corniel

De wereld is gek!

Topicstarter
Afbeeldingslocatie: http://theaigames.com/img/logo-blockbattle.png
Het spel

Warlight AI Block Battle is al weer de vijfde AI Challenge van theaigames.com. Dit spel is gebaseerd de twee spelersvariant van de game klassieker Tetris. Hier laat je je bot strijden!
Wat je wilt weten
Het spel is nog even in beta, maar dat merk je niet. Wel is daardoor de einddatum van de competitie nog niet bepaald.
Handige links
Wedstrijdsite
Top ranking Tweakers
Regels en introductie
Voorbeeld en definities
Vorige competitie wedstrijdsite
Topic vorige competitie

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


Acties:
  • 0 Henk 'm!

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

Corniel

De wereld is gek!

Topicstarter
Nu deze wedstrijd uit beta is, en de regels dus definitief zijn, wellicht tijd voor een mooie update van de ranglijst van alle tweakers actieven:

PosBotVersieNaamElo
1Kubisme 48 Corniel 2254
2SithistarBot 103 Sithistar 1995
3kevin_Block 61 kevin 1719
4Thmz_Block 135 Thmz 1550
5BlockBuster 1 Sharky 0940
6Hydra_Block 1 Hydra 0628
7RandBlockRust 12 Pete 0474


Er doen in totaal nu zo'n 180 bots mee, en ik hoop dat dit aantal nog een beetje verder op kan/zal lopen.

Mijn bot doet het vrij goed. Sinds het begin sta ik eigenlijk voortdurend in de top-10, en de laatste tijd steady op plek 4-8. Ik heb nog wel wat mooie verbeteringen in gedachte, dus wellicht kan ik nog wat stijgen ook.

Iemand anders die iets over zijn huidige bot kwijt wil, of die e.a. nog wil oppakken? De finales zijn niet binnen twee maanden te verwachten, dus er is nog tijd zat. :)

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


Acties:
  • 0 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

Leuk, ik ga eens kijken of ik mee kan doen...

Acties:
  • 0 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

Corniel schreef op vrijdag 06 november 2015 @ 18:15:
Iemand anders die iets over zijn huidige bot kwijt wil, of die e.a. nog wil oppakken? De finales zijn niet binnen twee maanden te verwachten, dus er is nog tijd zat. :)
Ik heb net mijn bot gemaakt, het zal geen kampioen worden maar het is erg leuk om te maken, ik zal hem later nog wat gaan finetunen.

Hoe kan ik lid worden van de Tweakers groep?

Acties:
  • 0 Henk 'm!

  • rty
  • Registratie: November 2011
  • Niet online

rty

Ik ga ook een poging wagen, beetje het idee van de ants AI challenge. :)
Na een snelle blik, de wedstrijd is nog niet uit beta, of wel?
emnich schreef op dinsdag 10 november 2015 @ 14:00:
[...]
Hoe kan ik lid worden van de Tweakers groep?
Hier kan je onder 'Institutes' Tweakers toevoegen.
http://theaigames.com/profile/edit

[ Voor 48% gewijzigd door rty op 11-11-2015 17:09 ]


Acties:
  • 0 Henk 'm!

  • Thmz159
  • Registratie: Januari 2010
  • Laatst online: 25-09 23:58
Bij mij staat er ook nog altijd 'in beta'. Had mijn bot begin september wat ontwikkeld maar ben gestopt omdat er geen mogelijkheden waren (?) om lokaal te testen (omdat de contest nog 'in beta' was). Was het een beetje beu om altijd te moeten uploaden/wachten om bugs te zoeken en te optimaliseren. Hopelijk loopt de wedstrijd nog in juli, dan heb ik nog eens tijd om er wat verder aan te werken :)

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:56

Onbekend

...

Interessant om zo'n botje te maken.
Handig dat er al starter bots beschikbaar zijn, zodat je je volledig op de tactiek kunt concentreren.
Aangezien het dus nog minimaal 2 maanden duurt is het misschien een leuk project voor tijdens de kerstvakantie. :)

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

Thmz159 schreef op woensdag 11 november 2015 @ 18:09:
Bij mij staat er ook nog altijd 'in beta'. Had mijn bot begin september wat ontwikkeld maar ben gestopt omdat er geen mogelijkheden waren (?) om lokaal te testen (omdat de contest nog 'in beta' was). Was het een beetje beu om altijd te moeten uploaden/wachten om bugs te zoeken en te optimaliseren. Hopelijk loopt de wedstrijd nog in juli, dan heb ik nog eens tijd om er wat verder aan te werken :)
Je kan de resultaten van een match gebruiken als input voor je bot, op die manier kan je al vrij veel testen.

Acties:
  • 0 Henk 'm!

  • rty
  • Registratie: November 2011
  • Niet online

rty

emnich schreef op woensdag 11 november 2015 @ 20:08:
[...]


Je kan de resultaten van een match gebruiken als input voor je bot, op die manier kan je al vrij veel testen.
Hoe kan je dat doen of kan je dat alleen doen bij je eigen matches? (in dat geval zal ik binnenkort een bot uploaden, al doet ie niet erg veel }:O )

Edit:Gevonden

Acties:
  • 0 Henk 'm!

  • Amanush
  • Registratie: Mei 2012
  • Laatst online: 18-06 09:30

Amanush

Saai persoon.

I'm in.

Ga tot de luiaard, gij mier! Zie haar wegen en wordt wijs.


Acties:
  • 0 Henk 'm!

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 22:14
Gisteren ook even het testproject gedownload, maar het is mij niet echt duidelijk wat er nu verwacht word. Zou wel fijn zijn om de boel eerst lokaal een beetje op gang te kunnen krijgen voor je online gaat uploaden.

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

Je kan de uitkomsten van je eigen match gebruiken om een beetje te testen (althans dat heb ik in het begin gedaan). Je zou ook een (simpele) engine kunnen maken waar je tegen kan praten, dan heb je nog steeds geen tegenstander maar voor het begin kan het zeker helpen om je algoritmes te verbeteren.

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

Corniel

De wereld is gek!

Topicstarter
Voor deze challenge test ik voortdurend mijn eigen bot tegen mijn eigen bot. ;) Dat lijkt me in dit geval de beste aanpak.

Met een genetisch algoritme probeer ik zo steeds betere parameters te vinden. Ik draai parallel (4 cores) en kom dan op 30 potjes per seconde, die gemiddeld zo'n 68 rondes duren en waarbij bijna 0,6 punten per blok worden gescoord. Dat is dus gemiddeld 1,5 punt per rij.

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


Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 28-09 18:33
Corniel; is dit beetje de aanpak die jij hebt gedaan? Omdat je het over genetisch algoritme hebt.

Acties:
  • 0 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

In de basis is dat ongeveer wat ik doe. De parameters zijn wat anders en mijn genetische algoritme is wat anders maar verder is het redelijk vergelijkbaar.

Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Leuk item, nog meer mensen problemen met de c# sample bot? Er is geen project file aanwezig in de zip...

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:56

Onbekend

...

Ik had er ook inderdaad problemen mee.
Download deze van Github:
https://github.com/LithiumToast/AIBlockBattleBot

Je moet in MatchSettings.cs wel nog een case voor "timebank" toevoegen.

Succes. :)

Speel ook Balls Connect en Repeat


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

Corniel

De wereld is gek!

Topicstarter
Bolukan schreef op zaterdag 14 november 2015 @ 11:58:
Corniel; is dit beetje de aanpak die jij hebt gedaan? Omdat je het over genetisch algoritme hebt.
Ik heb geloof ik een iets ander stukje gelezen (van gelijke strekking) en dat in mijn initiële analyse meegenomen. Vervolgens wat eigenschappen hier en daar uit de evaluatie gegooid, en anderen weer toegevoegd.

Snelheid is volgens mij belangrijk. Zowel om parameters te bepalen (met veel, heel veel simulaties) als om ook wat onbekende/random blocks mee te nemen op 3 ply en dieper, ontkom je volgens mij niet aan een binaire representatie van het speelveld.

Verder heb ik gekozen om alle 7 blokken (en hun rotaties) als singletons beschikbaar te hebben. Allerlei block-specifieke logica (paden, masks, ect.) stop je daar mooi weg.

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


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Onbekend schreef op woensdag 18 november 2015 @ 11:01:
Ik had er ook inderdaad problemen mee.
Download deze van Github:
https://github.com/LithiumToast/AIBlockBattleBot

Je moet in MatchSettings.cs wel nog een case voor "timebank" toevoegen.

Succes. :)
Ik had hem inderdaad zelf al werkend gekregen door alles zelf even in een lege console application te zetten ;)

Overigens weet ik nog niet of ik mee ga doen, mijn ervaring is dat dit soort dingen me meer tijd kosten dan ik vooraf gehoopt had ;)

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:56

Onbekend

...

Inmiddels heb ik de eerste versie die zonder foutmeldingen de blokjes kan bewegen op active gezet en heb meteen een ELO van 1400 gekregen terwijl het programma er nog nauwelijks bij na denkt. :)
Bepaalt die site bij het uploaden en de input test al welke ELO het spel krijgt?

Kan ik eigenlijk met mijn huidige versie op die site meerdere tests doen ?

Edit:
Ik zie dat de score wordt aangepast en er op de achtergrond andere spellen tegen anderen worden gespeeld.
De score waarop je binnenkomt is waarschijnlijk 1400.

[ Voor 19% gewijzigd door Onbekend op 22-11-2015 10:23 ]

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

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

Corniel

De wereld is gek!

Topicstarter
@Onbekend: 1400 is gewoon de initiële waarde. Elke nieuwe versie gaat verder met de rating die je had.

Als je de versie actief maakt (gaat niet automatisch) kan je anderen uitdagen. Verder zijn er automatische paringen

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


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:56

Onbekend

...

AI Block Battle is inmiddels geen beta meer.
Helaas heb ik relatief weinig tijd om aan mijn botje te werken :( maar hoop toch straks op een leuke plaats te eindigen. :)

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

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

Corniel

De wereld is gek!

Topicstarter
@Onbekend: Je moet toch nog een beetje werken aan je clearance-strategie denk ik:

http://theaigames.com/com.../565ff6661c687b17ba2cce72

Die rechter colomn wordt niet echt effectief gebruikt.

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


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:56

Onbekend

...

Klopt. :)
Ik heb wat aanpassingen doorgevoerd en gisteravond na wat testjes online gezet, maar ik heb vandaag pas (alweer) twee foutjes in de code ontdekt. :(
Vanavond deze bugjes maar fixen....

[ Voor 16% gewijzigd door Onbekend op 03-12-2015 09:23 ]

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:56

Onbekend

...

Ik heb de bot verbetert, dus nu zou hij het een stuk beter moeten doen. :P

De volgende keer als ik weer wat tijd heb zal ik de "Next piece" ook gaan gebruiken om de positie van het huidige blokje te bepalen. :)

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:56

Onbekend

...

Ik heb een aantal aanpassingen waardoor de bot beter presteert. :)
Helaas crasht mijn bot nu altijd in Ronde 34 en Ronde 35 waarna de game het opgeeft.

code:
1
Unhandled Exception: System.IndexOutOfRangeException: Array index is out of range.

Bij mij lokaal krijg ik het niet voor elkaar om mijn bot te laten crashen, zelfs met exacte de zelfde input als dat de website geeft, maar op de website crasht hij altijd in Ronde 34 en Ronde 35 waardoor ik geen enkel spel meer win. :(

Hebben jullie nog een idee waar ik naar kan kijken?

Edit:
Ik heb de oorzaak al gevonden. Ik resette een variabele niet die de het aantal solid lines bijhoudt.
Tussen Ronde 15 en Ronde 30 werd elke keer een solid line bij geteld waarna de teller op 15 solid lines stond.... Een paar rondes verder stond deze dus hoger dan het aantal regels (20) in het spel. (Ik had er geen try-catch omheen staan omdat deze waarde nooit boven de 20 uit zou mogen komen. :) )
En in mijn eigen simulator voegde ik geen solid lines toe waardoor ik dit probleem niet was tegengekomen. :)

Als deze versie foutloos blijft werken, kan ik eindelijk beginnen om de next-piece ook te gebruiken om de plaats van het huidige stukje te bepalen. :P

[ Voor 38% gewijzigd door Onbekend op 14-12-2015 17:38 ]

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

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

Corniel

De wereld is gek!

Topicstarter
@Onbekend: Wat voor interne representatie heb jij eigenlijk van het bord/veld? Zelf heb ik een ushort[] representatie. Als je meer dan 2 ply diep wilt kijken (en volgens mij wil je dat) is dat wel noodzakelijk.

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


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:56

Onbekend

...

Corniel schreef op dinsdag 05 januari 2016 @ 15:32:
@Onbekend: Wat voor interne representatie heb jij eigenlijk van het bord/veld? Zelf heb ik een ushort[] representatie. Als je meer dan 2 ply diep wilt kijken (en volgens mij wil je dat) is dat wel noodzakelijk.
Ik zie nu pas jouw reactie.

Ik werk met verschillende type array's.
De eerste array is gewoon van het FieldCellType (byte dus), waarmee ik gewoon het hele speelveld heb zoals die is aangeleverd, maar het type Piece vertaal ik meteen naar Empty bij de start. Mijn array's van de pieces zijn ook van het type FieldCellType.

Een andere array om mijn veld te definiëren is ook van het type byte, en die gebruik ik voor mijn pathfinder om onbereikbare posities voor de pieces te markeren. De pathfinder zelf gebruikt alleen bool[] met de breedte van het veld, en dat is voldoende. :)


Overigens heb ik aan alle kanten van het speelveld een rand van 3 breed gedefinieerd (type Solid) waarmee eigenlijk het interne speelveld 16x26 is. Hierdoor hoef ik nergens een controle te doen om een IndexOutOfRangeException te voorkomen omdat die niet meer voor kan komen. (Als die wel voorkomt, dan is het een foutje in mijn code zelf. :P )


Tot nu toe heb ik een brute-force oplossing geschreven om de "current piece" en "next piece" in het speelveld te laten vallen, en dat alles valt ruim binnen de 500ms. :)
Om een derde (onbekende) stukje in het speelveld gebruiken ben ik nog niet aan toe gekomen, en daarvoor moet ik zelfs nog een tactiek voor bepalen. De laatste weken is er nauwelijks is van programmeren terecht gekomen, maar verwacht vanaf de komende weken wel meer tijd er voor te hebben. :)

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

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

Corniel

De wereld is gek!

Topicstarter
@Onbekend: Dank voor je antwoord. Ik zelf kom tot iets andere waarden:

Current: J, Next: L
..........
..........
..........
..........
..........
..........
.XXX..XX..
.XXXXXXX..
XXXXXXXX..

01/01. 0.47 0.034s (0.0kN, 1.0kN/s): {left,left,left,turnright,left,drop}
01/02. 0.78 0.039s (0.8kN, 21.6kN/s): {left,left,left,turnright,left,drop}
01/03. 0.66 0.108s (35.8kN, 331.6kN/s): {left,left,left,turnright,left,drop}
01/04. 0.28 0.217s (163.6kN, 752.8kN/s): {left,left,left,turnright,left,drop}
01/05. 0.19 0.500s (402.3kN, 804.6kN/s): {left,left,left,turnright,left,drop}


Ik bekijk voor mijn tegenstander 3 ply. Voor mijn kant tot 3 ply alles (nu ja, ik skip wat kansloze opties) en daarna een paar varianten.

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


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:56

Onbekend

...

Zelf kijk ik (nog) niet naar het spel van de tegenstander. Helaas nog geen tijd voor gehad, maar ik wilde het eenvoudig houden door alleen hoeveel regels de tegenstander mogelijk kan wegspelen voordat ik de top bereik.

Nu is het voor jouw voorbeeld duidelijk dat de J-piece helemaal links moet komen, maar hoe bepaal jij eigenlijk wat een kansloze optie is t.o. opties die mogelijk nog kans maken?

Mij zegt de eenheid kN/s eigenlijk niks. Is dat het aantal mogelijkheden wat je per seconde berekent o.i.d.?

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

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

Corniel

De wereld is gek!

Topicstarter
Als ik veel gaten creëer zal ik de optie veel minder diep bekijken, dan als dat niet het geval is. Behalve als ik dat T-spin potentieel oplevert natuurlijk. En kN staat voor 1000 Nodes. Dus ik haal zo'n 800 duizend posities/boarden per seconde die ik analyseer.

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


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:56

Onbekend

...

Ik heb in de afgelopen weken mijn botje gereviseerd. :P
Ik zag namelijk dat hij te traag was om nog een level dieper na te kunnen denken, dus heb ik hem flink geoptimaliseerd. Nu bereken ik alles nog steeds maar 2 zetten diep, maar wel alles binnen 50 ms. Dit weekend zal ik eens gaan kijken of ik het botje een derde zet diep kan laten zoeken.

Mij viel wel op dat er een aantal mensen zijn afgehaakt?

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:56

Onbekend

...

Vanaf zondag 15 mei begint de finale.

Zelf denk ik niet dat ik nog veel aan mijn botje zal veranderen. Hij denkt nog steeds maar 2 zetten diep na, en ik ben al zeer tevreden met de huidige rating. :)


Gaat er iemand anders nog actief wat aanpassen voor 15 mei?

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

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

Corniel

De wereld is gek!

Topicstarter
Nu aan het kijken of ik hem nog wat kan verbeteren. Ik sta nu negende maar de nummers 7-10 staan zo dicht bij elkaar dat die bots wel redelijk uitwisselbaar zijn qua positie. Om verder te stijgen zal ik zo'n 60 Elo-punten bij elkaar moeten harken, en ik weet nog niet zo goed hoe. :(

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

Pagina: 1