Reg. datum: 24 juni 2007
Reg. datum: 24 juni 2007
Reg. datum: 24 juni 2007
• hoe tijd gemeten wordt, en hoeveel tijd je mag gebruiken;
• hoeveel geheugen je mag gebruiken, en
• of multiprocessing toegestaan is, dan wel zin heeft (meerdere cpu's/cores beschikbaar)?
En zijn er criteria voor remise? (Bijvoorbeeld als het spel eindigt met elke speler exact 1 zaad in zijn meest linker kuiltje, dan blijf je oneindig gedwongen zetten.) En als er zo ook een eind aan het spel komt, is het dan remise of wint dan degene met de meeste zaden? Of worden de overgebleven zaden eerst nog verdeeld?
Verder zag ik een Resign methode; geef je daarmee het spel op, of alleen de overgebleven zaden? Zodra ik 25 van de 48 zaden heb, heb ik gegarandeerd gewonnen, en zou ik best het spel willen beëindigen, maar natuurlijk niet als ik daarmee de wedstrijd opgeef.
Soultaker wijzigde dit bericht 04-07-2007 00:59 (10%)
Reg. datum: 24 juni 2007
Ik neem aan dat onder identieke positie wordt verstaan dat er in elk vakje evenveel zaadjes zitten én dat dezelfde speler aan zet is.quote:Sjaaky schreef op donderdag 21 juni 2007 @ 09:31:
Het spel is afgelopen wanneer een van beide spelers niet meer kan zaaien. Als de andere speler nog zaden op zijn zijde heeft, worden deze aan zijn totaal van gegeten zaden toegevoegd.
Wanneer een identieke positie zich voor de tweede keer voordoet wordt het spel beëindigd. De zaden die zich dan nog op het bord bevinden worden buiten beschouwing gelaten.
edit: Dus in jouw situatie wint degene met de meeste zaadjes zonder die 2 zaadjes op het bord mee te rekenen.
mstassen wijzigde dit bericht 05-07-2007 17:00 (7%)
Reg. datum: 26 oktober 2005
Ik ben ook wel benieuwd wanneer de test server online komt...quote:Soultaker schreef op woensdag 04 juli 2007 @ 00:58:
Is er trouwens iets bekend over:
• hoe tijd gemeten wordt, en hoeveel tijd je mag gebruiken;
• hoeveel geheugen je mag gebruiken, en
• of multiprocessing toegestaan is, dan wel zin heeft (meerdere cpu's/cores beschikbaar)?
Met nog maar een tweetal maanden te gaan: ben inmiddels wel erg benieuwd naar de testserver...
I worry about my child and the Internet all the time, even though shes too young to have logged on. Here's what I worry about: 10 or 15 years from now, she´ll say to me: Daddy, where were you when they took freedom of the press on the Internet?
http://test.tjipchallenge.com/awale/GameTestServer.asmx
Je speelt tegen een randomengine, of te wel een engine die willekeurige zetten doet. We hebben gemerkt dat er nog wel een paar bugs in zitten. Zo zijn nog niet alle regels geïmplementeerd. Daar wordt aan gewerkt. Er is in ieder geval iets om het protocol goed tegen te testen.
One of the major reasons for the downfall of the Roman Empire was, lacking zero, they had no way to indicate termination of their C strings.
• Je kunt altijd GetMove doen en dan krijg je een zet terug, ook als het eigenlijk je eigen beurt is. Is dat de bedoeling? Of doet de AI momenteel gewoon een random (geldige?) zet als daarom gevraagd wordt, simpelweg om te testen?
• Als ik Resign krijg ik altijd een HTTP 500 Internal Server Error. Doe ik iets fout, of is dit niet geïmplementeerd?
• Puur nieuwsgierigheid: krijgen jullie niet een heleboel dode sessies van mensen die een spel beginnen en dan afsluiten, of gooien jullie die na een periode van in activiteit weg?
Verder zag ik nergens documentatie van hoe de interface hoort te werken (op een hoger nivo dan de WSDL specificeert). Klopt dat, of heb ik wat gemist? (Ik ga er nu maar vanuit dat je met een random naam mag inloggen, en de teruggestuurde identifier als playerId moet gebruiken.)
Het is niet de bedoeling dat je een nieuwe move terugkrijgt. Ik zal kijken wat er mis gaat.quote:Soultaker schreef:
Ik heb al wat zitten proberen met de SOAP interfaces, maar ik zag een aantal rare dingen:
Je kunt altijd GetMove doen en dan krijg je een zet terug (..) Of doet de AI momenteel gewoon een random (geldige?) zet als daarom gevraagd wordt, simpelweg om te testen?
Ik denk dat dat idd niet geimplementeerd is op de test server.quote:Als ik Resign (..)
Heel veel is er tot op heden niet getest. Daarnaast: SOAP sessions zijn standaard 120 seconden als ik het wel heb. Wel wordt er per nieuw spel een XML bestand aangemaakt en weggeschreven op de server. Dus daar ruim ik af en toe wat in op.quote:Krijgen jullie niet een heleboel dode sessies van mensen die een spel beginnen en dan afsluiten, of gooien jullie die na een periode van in activiteit weg?
Volgens mij staat er in een eerder bericht van mij in deze draad een Interface met commentaar. Daar staat duidelijk in wat er verwacht wordt. Als er vragen zijn wil ik die natuurlijk best beantwoorden.quote:Verder zag ik nergens documentatie van hoe de interface hoort te werken (..)
En even voor de duidelijkheid: deze testserver werkt iets anders dan de echte server: Normaal gesproken moet er een toernooi worden aangemaakt en paringen, voordat een toernooi kan starten . Deze testserver maakt als iemand inlogt direct een toernooi aan met één ronde tegen de random engine. Deze opzet maakt het ook mogelijk dat er meerdere tests tegelijk gehouden worden.
Maar meld fouten gerust, dan zal ik - of sjaakie - die verwerken.
while (me.Alive) {
me.KickAss();
}
Ah, stom van me; ik had allleen naar de link in de topicstart gekeken. De versie met commentaar maakt alles duidelijk.quote:Corniel schreef op donderdag 16 augustus 2007 @ 10:07:
Volgens mij staat er in een eerder bericht van mij in deze draad een Interface met commentaar. Daar staat duidelijk in wat er verwacht wordt. Als er vragen zijn wil ik die natuurlijk best beantwoorden.
Reg. datum: 26 oktober 2005
Heb je inmiddels al gevonden waar het mis gaat? Volgens mij worden er nog steeds zetten teruggeven elke keer. Verder viel het me ook op dat er elke keer na 1 of 2 zetten al een winnaar 'Won' gegeven wordt.quote:Corniel schreef op donderdag 16 augustus 2007 @ 10:07:
[...]
Het is niet de bedoeling dat je een nieuwe move terugkrijgt. Ik zal kijken wat er mis gaat.
Gebeurt dit alsnog?quote:[...]
Ik denk dat dat idd niet geimplementeerd is op de test server.
Dit is uiteraard wel zo handig. Ik denk echter wel dat het belangrijk is dat de testserver de echte server zo dicht mogelijk benaderd. Dit om problemen tijdens de wedstrijd te voorkomen. Is het misschien een idee om een java file te kunnen uploaden, waarna deze automatisch gecompiled wordt en tegen zichzelf gaat spelen? Of om de deelnemers een account te geven op de (gekopieerde?) game omgeving, zodat ze zelf in de 'echte' omgeving kunnen testen?quote:En even voor de duidelijkheid: deze testserver werkt iets anders dan de echte server: Normaal gesproken moet er een toernooi worden aangemaakt en paringen, voordat een toernooi kan starten . Deze testserver maakt als iemand inlogt direct een toernooi aan met één ronde tegen de random engine. Deze opzet maakt het ook mogelijk dat er meerdere tests tegelijk gehouden worden.
Er zijn nogal wat vragen binnengekomen waarom niet exact dezelfde implentatie is gekozen voor de testserver en de wedstrijdserver. Er zijn twee belangrijke redenen:
- Iemand die direct inlogt moet direct kunnen spelen, bij de wedstrijdserver worden paringen rondens en spelers beheerd, dat management gedeelte is ongewenste/onnodige overhead in het test geval.
- We kunnen niet afdwingen dat maar een deelnemer tegelijk test, er moest dus iets geregeld worden waarmee je kan garanderen dat spelers geen last hebben van elkaar.
Door deze verschillende implementaties zijn er een aantal verschillen:
- De testserver is altijd in playing modus. Bij inloggen wordt direct een toernooi gemaakt met een ronde, en een ronde tegen random engine. Deze partij wordt ook direct gestart.
- Je krijgt bij het vragen om een zet altijd een nieuwe zet terug. Het is nogal veel werk om dat af te vangen voor iets wat een goed programmeur nooit zou doen. In de wedstrijd situatie krijg je nogmaals je laatste zet terug.
- Speel tempo is 200 minuten ipv van 2.
- De random speler let niet op, of hij moet feeden. Als hij verzaakt, verliest hij.
Op http://test.tjipchallenge.com/awale/log kan je de xml log vinden van de gespeelde partijen. Dit is een geserialiseerde representatie van het toernooi dat je speelt. Hier zou in iedergeval genoeg informatie moeten staan om te annalyseren wat er mis gaat.
Hopelijk zijn nu alle problemen en onduidelijkheden weggenomen. O ja, er was nog een vraag over de WSDL:
Dit is een klein 'conflict' tussen de Java en MS wereld. De '?WSDL' heeft MS toegevoegd om de exacte gegenereerde WSDL te laten zien. In de Java wereld is dit niet gebruikelijk. Sowieso - zie reglement - moeten de applicaties door middel van een parameter kunnen worden opgestart die de server-URL bevat, dus je code moet er zo uitzien dat je dit adres kan overschrijven.quote:Als ik met behulp van WSDL2Java de WSDL http://test.tjipchallenge.com/awale/GameTestServer.asmx?WSDL omzet naar java files, dan wordt het webadres verkeerd omgezet. Dit wordt in de java files namelijk http://test.tjipchallenge.com/awale/GameTestServer.asmx in plaats van http://test.tjipchallenge.com/awale/GameTestServer.asmx?WSDL.
while (me.Alive) {
me.KickAss();
}
Server was unable to process request.The process cannot access the file 'C:\AwaleData\test.blaat.xml' because it is being used by another process.
W4rlock wijzigde dit bericht 30-08-2007 20:08 (6%)
Reg. datum: 12 mei 2003
Hoe staat het met deze eventuele extra methodes?quote:Corniel schreef op maandag 25 juni 2007 @ 16:24:
[..] Merk op dat er (waarschijnlijk) nog twee webmethods gaan komen: GetTime() (of als outparam bij Move) en Move(string playerId, int field, string log). Ik heb contact overgehad met de persoon die de gameserver maakt. Defintieve bevestiging hierover zal ik ook hier melden.
Daarnaast heb ik nog een lijst met vragen, waarvan sommige al eerder gesteld zijn:
- Op wat voor soort machine wordt de applicatie uitgevoerd? Bijvoorbeeld: welke CPU, hoeveel cores, hyperthreading, hoeveel geheugen, snelheid geheugen, grootte L1 + L2 cache, operating system, java server vm of java client vm.
- Vraag al eerder gesteld: Hoe wordt de tijd gemeten?
- Bij welke situatie geeft de StartMatch methode de waarde 'Finished' terug?
- Bij welke situatie geeft de Move methode de waarde 'Waiting' of 'None' terug? Moet de Move method call dan opnieuw worden uitgevoerd?
- Wacht de Move methode op de zet van de tegenstander voordat deze een waarde retourneert? (aangezien Move ook Won/Draw/Lost kan teruggeven)
- Wacht de GetMove methode op de zet van de tegenstander voordat deze een waarde retourneert? Of moet je regelmatig pollen?
- Welke waarde moet je meegeven als 'login' parameter bij het Logon request? Of wordt dit op de dag van de challenge gespecificeerd?
- Is het uitvoeren van een Move method call na een gefinished spel een reden om de partij direct verloren te verklaren? (zie spelregels: 3.1.3)
- Als op de testserver direct een match wordt gestart, wie is dan als eerste aan de beurt? Dit wordt namelijk teruggegeven bij de StartMatch method call, en er is geen manier om dat op te vragen.
- Java gebruikt standaard maar 25% van het beschikbare systeemgeheugen. Naar ik aanneem heeft .Net deze limitatie niet. Voor Java zijn command-line opties beschikbaar om deze limiet te verhogen. Is het mogelijk een batch-file mee te leveren die de Java applicatie start met de juiste opties voor geheugen, client/server VM en performance-optimalisatie?
- Vraag al eerder gesteld: Wordt onder 'identieke positie' verstaan dat er in elk vakje evenveel zaadjes zitten én dat dezelfde speler aan zet is? Of dat alleen in elk vakje evenveel zaadjes zitten?
- Vraag al eerder gesteld: Is de te winnen reis voor 1 of voor 2 personen?
@ Sjaaky of Corniel: Als jullie op een aantal vragen al antwoord hebben, post dat aub zo snel mogelijk. Het duurt nog slechts 4 weken... m.a.w. de antwoorden hoeven niet verzameld te worden voordat ze gepost worden.
_Daan_ wijzigde dit bericht 01-09-2007 21:52 (4%)
http://www.stuq.nl
Reg. datum: 12 mei 2003
Als de laatste move van de random engine ongeldig is (niet feeden als dit wel moet), wordt deze move niet opgeslagen in het XML bestand. Zie: http://test.tjipchallenge...243d79f1881c5087ef9e9.xml
Ook wordt de laatste winnende move niet opgeslagen als gewonnen wordt:
http://test.tjipchallenge...74c9e96818afdca203122.xml
Hier doet mijn engine nog de move 3, deze is niet in het XML-bestand terug te vinden. Zonder deze move heeft mijn engine nog niet gewonnen, omdat de score nog 24 is.
Als de laatste zet ongeldig is komt er iets raars in het XML bestand terecht.
Onderin staat de laatste zet, positie 0. De FinishReason bovenin het bestand is echter: The player 'login' executed a move on field '5', the move is invalid. Maar, positie 5 is niet gezet, maar positie 0!
Zie: http://test.tjipchallenge...24993a3592b3c9f31ec42.xml
http://www.stuq.nl
Reg. datum: 05 januari 2001
Mijn eerste bericht hier. Ik heb ondertussen de nodige tijd (10+ uur) gestoken in mijn Awale client en ben sinds enkele uurtjes in staat om wat te testen
De logs zijn gesorteerd op bestandsnaam. Totdat ik dat ontdekte was ik telkens aan het zoeken een bestand met de juiste datum/tijd ... erg tijdrovend.quote:Corniel schreef op donderdag 30 augustus 2007 @ 10:33:
Logging
Op http://test.tjipchallenge.com/awale/log kan je de xml log vinden van de gespeelde partijen. Dit is een geserialiseerde representatie van het toernooi dat je speelt. Hier zou in iedergeval genoeg informatie moeten staan om te annalyseren wat er mis gaat.
Tip: gebruik de 'player id' die je ontvangt na succesvol inloggen om je bijbehorende logfile voor de partij te vinden.
Reg. datum: 05 januari 2001
Tijdens het testen kwam ik een situatie tegen die ik niet snapte
Veronderstel deze spelsituatie:
/// ==opponent==
/// -------------------------------------
/// | (5) | (4) | (3) | (2) | (1) | (0) | == field
/// | 0 | 4 | 4 | 4 | 4 | 6 | == grains
/// |------------------------------------
/// | 5 | 0 | 2 | 7 | 6 | 6 | == grains
/// | (0) | (1) | (2) | (3) | (4) | (5) | == field
/// -------------------------------------
/// ==player==
De tegenstander is aan de beurt en zaait vanuit veld 1. Kan de tegenstander (na het zaaien) oogsten en zo ja wat wordt de nieuwe spelsituatie??
Ik verwacht dat de tegenstander na het zaaien twee granen uit veld 2 kan oogsten.
De volgende situatie zou dan ontstaan:
XML:
1 | <Move User="1" Field="1" Position="5|0|0|7|6|6|0|1|5|5|5|0|6|2"/> |
Ik neem aan dat ik het bij het verkeerde eind heb want vind in de logfile (4e zet):
XML:
1 | <Move User="1" Field="1" Position="5|0|2|7|6|6|0|1|5|5|5|0|6|0"/> |
Kan iemand mij vertellen of ik een denkfout maak?
1. Op wat voor soort machine wordt de applicatie uitgevoerd?
De wedstrijden worden gespeeld op een core2duo E6400 met 2GB geheugen. Alleen weten we nog niet of je de cpu en geheugen helemaal voor jezelf krijgt. Dat is uiteraard wel zo eerlijk en daar streven we ook naar. Maar bij veel inschrijvingen zullen we toch het aantal gelijktijdige partijen op
moeten schroeven om totale wedstrijdduur binnen de perken te houden.
Ik snap dat dit voor jullie op dit moment geen handig antwoord is, want het nut van meerdere berekeningthreads staat hiermee ook nog niet vast.
Als ik er meer over weet, dan horen jullie het.
2. Hoe wordt de tijd gemeten?
Dit is de wallclock time op de server. Als een speler Move() aanroept gaat de tijd van de tegenstander lopen.
3. Bij welke situatie geeft de StartMatch methode de waarde 'Finished' terug?
StartMatch geeft terug wie de eerste zet moet zetten. Als de partij afgelopen is geeft deze aanroep Finished terug.
4. Bij welke situatie geeft de Move methode de waarde 'Waiting' of 'None' terug? Moet de Move method call dan opnieuw worden uitgevoerd?
Move geeft alleen Lost, Won, Draw en Playing terug.
5. Wacht de Move methode op de zet van de tegenstander voordat deze een waarde retourneert? (aangezien Move ook Won/Draw/Lost kan teruggeven)
Nee, hiervoor zul je GetMove aan moeten roepen.
6. Wacht de GetMove methode op de zet van de tegenstander voordat deze een waarde retourneert? Of moet je regelmatig pollen?
Je moet pollen zolang GetMove -1 teruggeeft. Zie ook Corniel in "Awalé Programmeerwedstrijd". Dit mag niet te vaak, we denken aan max 10x/sec.
7. Welke waarde moet je meegeven als 'login' parameter bij het Logon request? Of wordt dit op de dag van de challenge gespecificeerd?
Hierin staat je naam of een alias en geef je door aan de wedstrijdleiding bij het inschrijven. Verzin wel iets unieks en praktisch, bijvoorbeeld je alias op GoT. We verwachten geen clashes en anders moet een van de partijen de code maar even aanpassen.
8. Is het uitvoeren van een Move method call na een gefinished spel een reden om de partij direct verloren te verklaren? (zie spelregels: 3.1.3)
Deze regel heeft betrekking op welk veld met zaden je oppakt. Dus als je een Move(1) aanroept terwijl daar 0 zaden inliggen. Of dat je
niet voert als dat verplicht is. Als je Move aanroept terwijl het niet je beurt is, of de wedstrijd al afgelopen is, zul je een exception terug krijgen.
9. Als op de testserver direct een match wordt gestart, wie is dan als eerste aan de beurt? Dit wordt namelijk teruggegeven bij de StartMatch method call, en er is geen manier om dat op te vragen.
Dat kan met de methode StartMatch(), deze geeft een MatchStart enum terug waarin de speler staat die begint.
10. Java gebruikt standaard maar 25% van het beschikbare systeemgeheugen. Naar ik aanneem heeft .Net deze limitatie niet. Voor Java zijn command-line opties beschikbaar om deze limiet te verhogen.
Is het mogelijk een batch-file mee te leveren die de Java applicatie start met de juiste opties voor geheugen, client/server VM en performance-optimalisatie?
Dat ga ik navragen.
11. Vraag al eerder gesteld: Wordt onder 'identieke positie' verstaan dat er in elk vakje evenveel zaadjes zitten én dat dezelfde speler aan zet is? Of dat alleen in elk vakje evenveel zaadjes zitten?
De zaden in het bord en de speler aan zet moeten beide hetzelfde zijn.
12. Vraag al eerder gesteld: Is de te winnen reis voor 1 of voor 2 personen?
Voor 1 persoon.
Naar je bugreport hierboven gaan we kijken.
@mathijs
Zie de reply van Soultaker. Als de tegenstander zaait vanuit veld 1 komt hij tijdens het uitzaaien niet eens aan de andere kant van het speelveld, dus mag hij sowieso niet eten.
One of the major reasons for the downfall of the Roman Empire was, lacking zero, they had no way to indicate termination of their C strings.
Reg. datum: 05 januari 2001
quote:Soultaker schreef op maandag 03 september 2007 @ 04:30:
Ik denk het wel; je had begrepen dat je alleen oogst uit het veld waarin je eindigt met zaaien? Om uit veld 2 (van player) te oogsten moet je dus veld 4 (van opponent) spelen.
Aha, dat maakt een heleboel duidelijk.quote:Sjaaky schreef op maandag 03 september 2007 @ 15:54:
@mathijs
... Als de tegenstander zaait vanuit veld 1 komt hij tijdens het uitzaaien niet eens aan de andere kant van het speelveld, dus mag hij sowieso niet eten.
Het was gisteren al laat en ik dacht: laat ik er mijn hoofd nu maar niet over breken
Thanks!!
Reg. datum: 12 mei 2003
Misschien is het mogelijk om vier identieke computers neer te zetten? Als er twee computers bezig zijn met de wedstrijd kunnen op de andere twee computers de volgende programma's worden gebouwd en klaargezet. Ze draaien dan niet gelijktijdig (wat mogelijk de gameserver zou beinvloeden), maar dit geeft wel een betere doorlooptijd.quote:Sjaaky schreef op maandag 03 september 2007 @ 15:54:
@_Daan_
1. Op wat voor soort machine wordt de applicatie uitgevoerd?
De wedstrijden worden gespeeld op een core2duo E6400 met 2GB geheugen. Alleen weten we nog niet of je de cpu en geheugen helemaal voor jezelf krijgt. Dat is uiteraard wel zo eerlijk en daar streven we ook naar. Maar bij veel inschrijvingen zullen we toch het aantal gelijktijdige partijen op
moeten schroeven om totale wedstrijdduur binnen de perken te houden.
Ik snap dat dit voor jullie op dit moment geen handig antwoord is, want het nut van meerdere berekeningthreads staat hiermee ook nog niet vast.
Als ik er meer over weet, dan horen jullie het.
http://www.stuq.nl
Je kunt ook met dit programma oefenen; de demoversie speelt niet echt sterk, maar volgt wel exact de regels van deze contest, dus het is handig om een idee te krijgen van hoe het spel werkt.quote:mathijs van altvorst schreef op maandag 03 september 2007 @ 17:51:
Aha, dat maakt een heleboel duidelijk.
Het was gisteren al laat en ik dacht: laat ik er mijn hoofd nu maar niet over breken
Daarnaast is nog niet iedereen bekend met het verschil tussen een WSDL en een webservice. Een WSDL is niets meer, en ook niets minder dan een contract wat je afspreekt op basis waarvan een webservice communiceert. Deze url’s zijn niet noodzakelijk hetzelfde (Bij MS zelfs per definitie niet).
Onze WSDL is op te vragen via :
http://test.tjipchallenge.com/awale/GameTestServer.asmx?WSDL
De service via:
http://test.tjipchallenge.com/awale/GameTestServer.asmx
Als je een tool gebruikt om code te generen gooi je daar dus het contract in, als je daadwerkelijk wilt communiceren, vertel je wat het adres is van de service. Voor hen die daar tot op heden moeite mee hadden, veel succes.
while (me.Alive) {
me.KickAss();
}
Reg. datum: 12 mei 2003
Weten jullie al meer over deze methodes?quote:Corniel schreef op maandag 25 juni 2007 @ 16:24:
[..] Merk op dat er (waarschijnlijk) nog twee webmethods gaan komen: GetTime() (of als outparam bij Move) en Move(string playerId, int field, string log). Ik heb contact overgehad met de persoon die de gameserver maakt. Defintieve bevestiging hierover zal ik ook hier melden.
Is er al een antwoord bekend?quote:Sjaaky schreef op maandag 03 september 2007 @ 15:54:
@_Daan_
[..]
10. Java gebruikt standaard maar 25% van het beschikbare systeemgeheugen. Naar ik aanneem heeft .Net deze limitatie niet. Voor Java zijn command-line opties beschikbaar om deze limiet te verhogen.
Is het mogelijk een batch-file mee te leveren die de Java applicatie start met de juiste opties voor geheugen, client/server VM en performance-optimalisatie?
Dat ga ik navragen.
[..]
Nog een vraag: is het toegestaan om JNI (Java) of een vergelijkbaar iets voor .Net te gebruiken? In de spelregels wordt het niet expliciet uitgesloten.
_Daan_ wijzigde dit bericht 13-09-2007 21:29 (7%)
http://www.stuq.nl