misschien is het ook wel leuk om de beste AI tegen mensen te spelen.
Verwijderd
*abandonware bestaat legaal niet, dus ondanks dat er een toezegging schijnt te zijn dat je het spel op minder legale wijze mag verkrijgen voor deze contest hoef je niet naar een site met illegale content te linken*
[ Voor 32% gewijzigd door Creepy op 19-05-2008 16:47 ]
Oh sorry, ik dacht dat er een mail naar jou verstuurd was. Aannames, aannames...
Mensen die zich bij ons aanmelden krijgen de gewraakte files van ons. Dat lijkt mij de meest legale wijze.Verwijderd schreef op maandag 19 mei 2008 @ 16:44:
Abandonware bestaat legaal niet, dus ondanks dat er een toezegging schijnt te zijn dat je het spel op minder legale wijze mag verkrijgen (..)
while (me.Alive) {
me.KickAss();
}
edit: nvm, kreeg net (2 minuten geleden) een mail met alles wat ik maar mogelijkerwijs zou kunnen willen weten for now, inclusief een link naar de originele bestanden. Netjes geregeld moet ik zeggen
[ Voor 22% gewijzigd door Horeamus op 21-05-2008 11:54 ]
De originele TTD kunnen worden gedownload via http://webserver.tjip.com...008/ttd_original_data.zip.
Leuk dat je meedoet. Hoe ver was je met je engine? Mijn collega en ik moeten nogsteeds beginnen met proggen.
while (me.Alive) {
me.KickAss();
}
Zaterdag 7 juni a.s. om 13:00 wordt in Delft de kick-off van de OpenTTD Challenge 2008 gehouden. Zie Routebeschrijving Delft.Horeamus schreef op woensdag 04 juni 2008 @ 20:02:
Die kick-off meet is verplaatst naar 7 juni (zaterdag aanstaande) maar hoelaat ed? (..)
Er zal wat worden verteld over Transport Tycoon. Daarnaast wordt e.a. uitgelegd over OpenTTD, en hoe een AI te schrijven voor OpenTTD.
Daarna is LAN-en geblazen. De aanwezigen mogen de multiplayer mode van OpenTTD tot het uiterste testen. Dus neem je laptop mee.
@Horeamus, mocht je nog geen uitnodiging ontvangen hebben, voel je dan bij deze uitgenodigd!
while (me.Alive) {
me.KickAss();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
| /** * This class will take care of all pathfinding features. */ class RoadPathFinding { road = null; // We'll use AIRoad to manage building / managing roads map = null; // The map we're currently playing constructor(map, road) { this.map = map; this.road = road; } /** * We need functions to calibrate penalties and stuff. We want functions * to build the *fastest*, *cheapest*, *optimal throughput*, etc. We aren't * allowed to write C++ so we need to script this information :). */ function CreateRoad(roadList); // Create the best road from start to end function GetCostForRoad(roadList); // Give the cost for the best road from start to end function FindFastestRoad(start, end, allowenceSavings, excludeList, ai); } /** * Store important info about a path we found! :) */ class PathInfo { roadList = null; // List of all road tiles the road needs to follow travelDistance = null; // The total number of squares of road (multipy by 429 to get km) speedModifier = null; // The 'cost' of the road (taking into account all the slopes, etc) // <-- The average velocity can be calculated by multiplying this value with // the speed of the vehicle... roadCost = null; // The cost to create this road constructor(roadList, travelDistance, speedModifier, roadCost) { this.roadList = roadList; this.travelDistance = travelDistance; this.speedModifier = speedModifier; this.roadCost = roadCost; } } /** * Create the fastest road from start to end, without altering * the landscape. We use the A* pathfinding algorithm. * * The allowenceSavings is used to specify how much longer a road * may be if it saves on the costs of building roads. The value * must be between [0..1], 0 meaning NO detour may be made to * lower the costs, 1 means that any means must be exploited to * lower the cost as much as possible (existing roads are * considered to be free). */ function RoadPathFinding::CreateRoad(roadList, ai) { if(roadList == null || roadList.len() < 2) return false; // Build the entire tile list! :) local i = roadList[0]; local j = roadList[1]; // Check the initial direction local currentDirection = j - i; // We want to build entire segments at once. So if our road goes North // 5 times we want to build it with one command, instead of calling // BuildRoad 5 times (saves time! :)). So we keep track of the direction. local direction = null; local lastChecked = null; /** * We use an iterating process. We monitor if each sequential tile * heads in the same direction as the previous tile, if not we * construct the road found so far and continue the process in * the new direction. */ // Skip list till we find a tile with an other direction for(local a = 2; a < roadList.len(); a++) { lastChecked = j; j = roadList[a]; // If the road changes direction, create that part of the road // and change the direction we're heading if(j != lastChecked + currentDirection) { local result = road.BuildRoad(i, lastChecked); // You may want to do some fixing if the road couldn't be build. // Update new direction information for the next // iteration currentDirection = j - lastChecked; i = lastChecked; } } // Build the last part (if any)! if(i && j) road.BuildRoad(i, j); return true; } /** * Plan and check how much it cost to create the fastest route * from start to end. */ function RoadPathFinding::GetCostForRoad(roadList, ai) { local test = AITestMode(); // Switch to test mode... local accounting = AIAccounting(); // Start counting costs this.CreateRoad(roadList, ai); // Fake the construction return accounting.GetCosts(); // Automatic memory management will kill accounting and testmode! :) } /** * A* pathfinder to find the fastest path from start to end. The allowenceSavings * is used to specify how much longer a road may be if it saves on the costs of * building roads. The value must be between [0..1], 1 meaning NO detour may be * made to lower the costs, 0 mean that any means must be exploited to lower the * cost as much as possible (existing roads are considered to be free). * Update X and Y values! :) * start and end are always an AIAbstractList. * The excludeList contain tiles that mustn't be evaluated during pathfinding. */ function RoadPathFinding::FindFastestRoad(start, end, allowenceSavings, excludeList, ai) { // Now, for the interresting part... :) // Road can only be build from North to South and from West to East, we // use the Manhattan distance as heuristic (faster and as good as squared // distance) for our algorithm. Every tile is stored in a priority queue. local pq = null; local expectedEnd = null; // Calculate the central point of the end array local x = 0; local y = 0; for(local i = end.Begin(); end.HasNext(); i = end.Next()) { x += AIMap.GetTileX(i); y += AIMap.GetTileY(i); } expectedEnd = AIMap.GetTileIndex(x / end.Count(), y / end.Count()); print("Found: " + expectedEnd); // We must also keep track of all tiles we've already processed, we use // a table for that purpose. local closedList = {}; // We keep a seperate list for start tiles local startList = {}; if(excludeList) foreach(val in excludeList) closedList[val] <- val; // Start by constructing a priority queue and by adding all start // nodes to it. pq = PriorityQueue(start.Count() * 2); for(local i = start.Begin(); start.HasNext(); i = start.Next()) { // Check if we can actually start here! if(!Tile.IsBuildable(i)) continue; AISign.BuildSign(i, "START"); local annotatedTile = AnnotatedTile(i, null, 0, AIMap.DistanceManhattan(i, expectedEnd), null); pq.insert(annotatedTile); closedList[i] <- i; startList[i] <- i; AISign.BuildSign(i, "Start"); } // Now with the open and closed list we're ready to do some grinding!!! while(pq.nrElements != 0) { local at = pq.remove(); // Why is this needed!? Don't know but for some reason tiles are put in the priority queue without // me wanting it. May want to refactor this code.... if(closedList.rawin(at.tile) && !startList.rawin(at.tile)) continue; // Check if this is the end already!! if(end.HasItem(at.tile)) { // Check we can actually end here... if(!Tile.IsBuildable(at.tile)) continue; // determine size... local tmp = at; local tmp_size = 1; while(tmp.parentTile != null) { tmp = tmp.parentTile; tmp_size++; } // Create the result list local resultList = array(tmp_size); resultList[0] = at.tile; // We want to return a PathInfo object, we need it for later // assesments! :) local avg_speed = 0; local lastDirection = at.direction; tmp_size = 1; // Construct result list! :) while(at.parentTile != null) { at = at.parentTile; resultList[tmp_size] = at.tile; tmp_size++; // Check speed, // TODO: FIX SLOPES! if(lastDirection == at.direction) avg_speed += 1; else avg_speed += 0.5; } return PathInfo(resultList, tmp_size, avg_speed / tmp_size, null); } // Get all possible tiles from this annotated tile (North, South, West, // East) and check if we're already at the end or if new roads are possible // from those tiles. local directions = Tile.GetTilesAround(at.tile, false, null); // Squirrel doesn't support inline functions? :( // Check if we can access those directions and add them to the list! :) for(local i = 0; i < directions.len(); i++) { // Check if we can actually build here and if we haven't checked this // tile already. If we've already checked it, we know there is a already // faster route to this tile (else it wouldn't have come first). if(closedList.rawin(directions[i])) { // Don't include tiles we can't build on anyways. if(!AITile.IsBuildable(directions[i])) { closedList[directions[i]] <- directions[i]; } continue; } // Try to build it, slopes or other obstacles may prevent this... // TODO: Need NoAI extention to catch WHY a road couldn't be // build. (ie. because of vehicles, wrong slopes?) if(!AIRoad.AreRoadTilesConnected(at.tile, directions[i])) { local testAI = AITestMode(); if(!AIRoad.BuildRoadFull(at.tile, directions[i]) || !AIRoad.BuildRoadFull(directions[i], at.tile)) continue; } // Calculate the cost for building this road /** * We want to build roads as straight as possible, because bends slow * verhicles down 50%. So they are 2 times as 'expensive' for the * heuristic function. * TODO: Take slopes into account */ local roadCostFromStart = 0; // No direction choosen or we're traveling in the same direction if(at.direction == i || at.direction == null) roadCostFromStart = 1; // We're heading in an other direction so make the cost twice as expensive else roadCostFromStart = 2; // If it's a road, we might add a discount! :) if(!road.IsRoadTile(directions[i])) roadCostFromStart *= 1 + (1 - allowenceSavings); roadCostFromStart += at.distanceFromStart; // Add the tile to the queue! (remove the * 2 later when we've completed regions! :) pq.insert(AnnotatedTile(directions[i], at, roadCostFromStart, AIMap.DistanceManhattan(directions[i], expectedEnd), i)); } // Done! Don't forget to put at into the closed list closedList[at.tile] <- at.tile; } // Oh oh... No result found :( print("No path found!"); return null; } /** * Util class to hold a tile and the heuristic value for * pathfinding. */ class AnnotatedTile { tile = null; // Instance of AITile parentTile = null; // Needed for backtracking! distanceToEnd = null; // Distance from this tile to the end tile distanceFromStart = null; // Distance already travelled from start tile direction = null; // Which way is this road going to? // A Tile is 429km on a side :) constructor(tile, parentTile, distanceFromStart, distanceToEnd, direction) { this.tile = tile; this.parentTile = parentTile; this.distanceFromStart = distanceFromStart; this.distanceToEnd = distanceToEnd; this.direction = direction; } function getHeuristic() { return distanceToEnd + distanceFromStart; } } |
Hij heeft e.a. ook toegelicht op devs.openttd.org. Let wel, er wordt geen rekening gehouden met heuvels/hellingen.
Ik probeer deze week ook nog een geschreven samenvatting te geven van m'n verhaaltje van afgelopen zaterdag. Maar eerst moet er weer gewerkt worden.
while (me.Alive) {
me.KickAss();
}
Verwijderd
ik ga ook meedoen en op het moment dat ik besloot mee te doen nog net student in Utrecht (nu afgestudeerd), telt dat ook?Horeamus schreef op zondag 08 juni 2008 @ 10:03:
(..)
Viel me wel op dat wij de enige studenten waren van een andere uni dan Delft.
weet iemand hoe je in het noai framework iets kunt wegschrijven naar/uitlezen van een bestand? Ik kon het nergens vinden, en evenmin in squirrel zelf.
Wellicht dat je het hier kan vinden: Squirrel Library: 2. The Input/Output library.Verwijderd schreef op maandag 09 juni 2008 @ 16:50:
weet iemand hoe je in het noai framework iets kunt wegschrijven naar/uitlezen van een bestand?
while (me.Alive) {
me.KickAss();
}
Verwijderd
had ik al naar gekeken, maar ik kwam er niet echt uit. Volgens iemand op het ottd forum heeft het NOAI framework geen file io. (zie hier)Corniel schreef op dinsdag 10 juni 2008 @ 10:30:
[...]
Wellicht dat je het hier kan vinden: Squirrel Library: 2. The Input/Output library.
wat ik me afvroeg, is of 10 spel-jaren niet wat kort is? Met zo'n korte periode hoef je je bv. niet druk te maken over vervanging van voertuigen.
[ Voor 13% gewijzigd door Verwijderd op 10-06-2008 14:11 ]
Wat ik mij eigenlijk afvraag is of je wel naar bestanden mag schrijven/lezen volgens de regels van de challenge. Valt dat (het lezen iig) dan niet onder het gebruik maken van externe resources?
En ja, wat mij betreft telt dat ook als UU. Jeuj
[ Voor 13% gewijzigd door Horeamus op 12-06-2008 11:35 ]
Verwijderd
ja, dat bedacht ik me later ook..scheelt een hoop werk. (Nu maar hopen dat de leiding niet ineens op verkeerde gedachten gebracht is :-) )Horeamus schreef op donderdag 12 juni 2008 @ 11:33:
Dat was volgens mij juist een van de redenen om er voor te kiezen om een spel 10 jaar te laten duren :-)
ik heb het niet nodig tijdens de challenge, maar voor die tijd, om het ontwikkelen te vergemakkelijken. Tijdens de challenge kan ik alles wat ik nodig heb gewoon in m'n AI source code zetten. Zo kan je bv. een look-up tabel eerst genereren en dan copy-pasten naar je code, om maar een voorbeeld te noemen.Wat ik mij eigenlijk afvraag is of je wel naar bestanden mag schrijven/lezen volgens de regels van de challenge. Valt dat (het lezen iig) dan niet onder het gebruik maken van externe resources?
mooi, ik zie uit naar de overwinningEn ja, wat mij betreft telt dat ook als UU. JeujKijken of we delft kunnen verslaan
(ik laat tactisch in het midden wiens overwinning)
als jullie ook studenten zijn uit Utrecht, dan ken ik jullie wellicht. Wat studeren jullie, en waar?
[ Voor 8% gewijzigd door Verwijderd op 12-06-2008 15:46 ]
Verwijderd
nee, inderdaad niet. Ik ben net afgestudeerd CKI'erHoreamus schreef op donderdag 12 juni 2008 @ 21:41:
Beiden informatica aan de UU. Ook beiden eerstejaars dus denk eerlijk gezegd dat je ons niet kent ;-)
Verwijderd
Het is niet mogelijk om in het bestaande framework van NoAI library functies aan te roepen van Squirrel. Want om dit te kunnen doen moeten deze libraries in de VM geladen worden en dat gebeurd momenteel niet. De functie waar het om gaat is 'sqstd_register_iolib', maar gezien dit een open source project is en jullie uitstekende programmeurs kunnen jullie dit natuurlijk zelf inbouwen als jullie deze functionaliteit nodig hebben tijdens de ontwikkelfase (vergeet deze echter niet eruit te slopen, het is een beetje jammer als je AI in de eerst 10 seconden zelfmoord pleegtVerwijderd schreef op dinsdag 10 juni 2008 @ 14:08:
[...]
had ik al naar gekeken, maar ik kwam er niet echt uit. Volgens iemand op het ottd forum heeft het NOAI framework geen file io. (zie hier)
Succes!
- Bram
Verwijderd
ik ben niet zo'n C-held en zie het ook niet zo zitten om helemaal in de noai code te duiken, maar ik heb al een andere --zeer cratieve-- omweg gevonden m.b.v. Java.Verwijderd schreef op zondag 15 juni 2008 @ 11:40:
[...]
Het is niet mogelijk om in het bestaande framework van NoAI library functies aan te roepen van Squirrel. Want om dit te kunnen doen moeten deze libraries in de VM geladen worden en dat gebeurd momenteel niet. De functie waar het om gaat is 'sqstd_register_iolib', maar gezien dit een open source project is en jullie uitstekende programmeurs kunnen jullie dit natuurlijk zelf inbouwen als jullie deze functionaliteit nodig hebben tijdens de ontwikkelfase
Maar nu loop ik tegen het maffe probleem aan, dat elke willekeurige AI (bv. de standaard "wrightai") crasht als ik "reload AI" indruk. Op het openttd forum zijn ze er nog niet helemaal over uit waar het nu precies door komt, helaas (http://www.tt-forums.net/viewtopic.php?f=65&t=37947). En het gekste is, dat juist de binaries die gemaakt waren om het probleem te onderzoeken, nu juist net niet de crash opleveren.
If I'm going out, I'm going out with style(vergeet deze echter niet eruit te slopen, het is een beetje jammer als je AI in de eerst 10 seconden zelfmoord pleegt).
een heel andere vraag: er komt steeds meer voorbeeldmateriaal beschikbaar (zoals Convoy en wrightai en de recent toegevoegde libraries). Hoe zit het met het gebruiken van die code? Gelden Convoy en WrightAI als materiaal dat je gewoon kan gebruiken in de tjip-wedstrijd?
Verwijderd
Hmmz... klinkt interessant, hoe heb je dat opgelost dan als ik vragen mag?Verwijderd schreef op zondag 15 juni 2008 @ 12:18:
[...]
ik ben niet zo'n C-held en zie het ook niet zo zitten om helemaal in de noai code te duiken, maar ik heb al een andere --zeer cratieve-- omweg gevonden m.b.v. Java.
Geen idee wat hier gaande is, ik ben momenteel op vakantie dus ben bang dat ik volgende week pas weer up-to-date ben met de laatste gang van zaken.Maar nu loop ik tegen het maffe probleem aan, dat elke willekeurige AI (bv. de standaard "wrightai") crasht als ik "reload AI" indruk. Op het openttd forum zijn ze er nog niet helemaal over uit waar het nu precies door komt, helaas (http://www.tt-forums.net/viewtopic.php?f=65&t=37947). En het gekste is, dat juist de binaries die gemaakt waren om het probleem te onderzoeken, nu juist net niet de crash opleveren.
Waarom niet? Al deze code valt onder de GPL licentie dus wie zijn wij om dat te verbieden?een heel andere vraag: er komt steeds meer voorbeeldmateriaal beschikbaar (zoals Convoy en wrightai en de recent toegevoegde libraries). Hoe zit het met het gebruiken van die code? Gelden Convoy en WrightAI als materiaal dat je gewoon kan gebruiken in de tjip-wedstrijd?
Verwijderd
na de wedstrijd vertel ik je al de geheimen van mijn codeVerwijderd schreef op donderdag 19 juni 2008 @ 11:09:
[...]
Hmmz... klinkt interessant, hoe heb je dat opgelost dan als ik vragen mag?
da's mooi.[...]
Waarom niet? Al deze code valt onder de GPL licentie dus wie zijn wij om dat te verbieden?
Verder belooft een kort verslagje van mijn bevindingen tijden de kick-off. Ik vond het gezellig! het was idd leuk dat er twee OpenTTD (NoAI) developers waren.
Zelf hield ik een presentatie:
De liefhebbers kan ik de daadwerkelijke PP wel doen toekomen. Moraal van het verhaal: Zorg dat je een goede PathFinder gebruikt. Ga niet het wiel opnieuw zitten uitvinden, er zijn genoeg goede implementaties. De crux zit hem in het waarderen van de mogelijkheden en het kiezen welke daarvan uitgevoerd dienen te worden. Sommige combinaties leveren 'extra' op, andere juist minder.
- OpenTTD, olé, olé
- Clone van Transport Tycoon Deluxe
- Grotere kaarten
- Multiplayer mode (LAN & internet)
- Betere/krachtigere pathfinding
- Betere gameplay
- Extra graphics
- Het NoAI-Framework
- Transport Tycoon for Dummies
- Een zeer beknopte introductie (..)
- Slimme jongens, die computers - Sterke & zwakke punten
- Rekenkracht (+)
- Consequent (+)
- Perfect geheugen (+)
- Onbenullig (-)
- Voorspelbaar (-)
- Leercurve (-)
- Van A naar B(eter)
- A*
- Dijkstra’s algorithme e.a.
- Penalties
- Aanleg
- Reistijd
- Big brother is watching you
- Wat is er gaande
- Resources
- Opponenten
- Subsidies
- Routes
- Voertuigen
- Cashflow
- Regeren is vooruitzien
- Wat doe je wel en wat niet
- Onderhoud voertuigen
- Tegenstanders blocken
- Nieuwe routes
- Aflossen schuld
Volgende week ga ik zelf ook maar eens aan de implemantatie van NoCab werken.
while (me.Alive) {
me.KickAss();
}
Verwijderd
Mogen trams wel of niet meedoen bij de TJIP wedstrijd?
Zit ook niet standaard in OpenTTD. Mensen kunnen eigen dingen maken op het NewGRF systeem ofzo en daar zijn trams voor gemaakt.Verwijderd schreef op vrijdag 20 juni 2008 @ 18:16:
ik zag op het openTTD forum iemand spreken over trams. Ik wist niet dat die in openTTD zaten, en heb eigenlijk ook geen idee hoe je die tevoorschijn tovert.
Mogen trams wel of niet meedoen bij de TJIP wedstrijd?
Vanaf 0.6 wel. Je kan trams bouwen (mits de server dat toestaat) door de wegenbouw knop ingedrukt te houden. Net als je dat doet bij rail, lectrified, monorail en maglev.Zit ook niet standaard in OpenTTD. Mensen kunnen eigen dingen maken op het NewGRF systeem ofzo en daar zijn trams voor gemaakt.
Note dat trams allemaal een ro-ro (roll on, roll off) station nodig hebben, en niet kunnen werken met 'eindstations'. Dat kan bij bussen en treinen wel.
[ Voor 20% gewijzigd door Ruudjah op 20-06-2008 20:34 ]
Verwijderd
In dat geval is het even de vraag of ze wel of niet meedoen in de wedstrijd?Ruudjah schreef op vrijdag 20 juni 2008 @ 20:33:
[...]
Vanaf 0.6 wel. Je kan trams bouwen (mits de server dat toestaat) door de wegenbouw knop ingedrukt te houden. Net als je dat doet bij rail, lectrified, monorail en maglev.
Verwijderd
Verwijderd schreef op zaterdag 21 juni 2008 @ 13:55:
[...]
In dat geval is het even de vraag of ze wel of niet meedoen in de wedstrijd?
Er mogen uitsluitend wegen gebouwd worden. Gebruik van (tram)rails en boeien is niet toegestaan.
while (me.Alive) {
me.KickAss();
}
Verwijderd
NoAI ondersteund gewoon trams. Treinen worden nog niet ondersteund, maar zullen wel worden toegevoegd in de toekomst.Corniel schreef op maandag 23 juni 2008 @ 14:40:
Los van of het zou mogen, kan het niet. NoAI ondersteund geen treinen, laat staan trams.
En de reden dat we nu alleen oto's doen is omdat schepen en vliegtuigen te 'makkelijk' zijn, en veel meer winst genereren.
En die fimpjes, dat lag wel in de bedoeling.
[ Voor 22% gewijzigd door Corniel op 23-06-2008 15:25 ]
while (me.Alive) {
me.KickAss();
}
Verwijderd
Voor hen die nog wel behoefte hebben aan IO functionaliteit in Squirrel: kijk niet verder dan op deze pagina:Verwijderd schreef op vrijdag 20 juni 2008 @ 13:05:
[...]
na de wedstrijd vertel ik je al de geheimen van mijn code![]()
[...]
da's mooi.
http://devs.openttd.org/~noai/morloth/samples/squirrel_io/
Ik heb er ook een voorbeeld bij geschreven dat 5 integers in een bestand zet en vervolgens weer uit leest.
Note: Nogmaals, wees er zeker van dat er geen IO code achterblijft in je uiteindelijke oplossing!
Succes!
Verwijderd
bedankt, maar nu heb ik al een omweg via Java gevondenVerwijderd schreef op vrijdag 27 juni 2008 @ 11:04:
[...]
Voor hen die nog wel behoefte hebben aan IO functionaliteit in Squirrel: kijk niet verder dan op deze pagina:
http://devs.openttd.org/~noai/morloth/samples/squirrel_io/
Ik heb er ook een voorbeeld bij geschreven dat 5 integers in een bestand zet en vervolgens weer uit leest.
Note: Nogmaals, wees er zeker van dat er geen IO code achterblijft in je uiteindelijke oplossing!
Succes!
Maar ik kan me voorstellen dat er meer mensen zijn die hier wat aan hebben. Misschien wordt de IO wel aan de noai branch toegevoegd?
Er bestaat een webcomponent die een google-maps style representatie van een game weergeeft in een browser. Dat kan live gekoppeld worden aan een game. Als ik me niet vergis bestaat er een uitbreiding voor waarbij je dus een lijstje met savegames laad. Die savegames zijn dan allemaal van één game, die bijvoorbeeld om de maand gesaved is. Zo kan je de ontwikkeling over tijd zien van de hele map.En die fimpjes, dat lag wel in de bedoeling.
Ik heb het zelf een keer geschreven, maar die code is oud en werkt niet meer met de huidige versie. Iemand van OpenTTDCoop heeft het idee toen verder uitgewerkt, en heeft me ook een paar demo's laten zien. Zag er erg aardig uit, moet ik zeggen.
Misschien een idee om op die manier de wedstrijd online te zetten
Verwijderd
Dat lijkt volgens mij op het tournooi systeem dat TrueLight ontwikkeld heeft, zie hierRuudjah schreef op vrijdag 27 juni 2008 @ 18:37:
[...]
Er bestaat een webcomponent die een google-maps style representatie van een game weergeeft in een browser. Dat kan live gekoppeld worden aan een game. Als ik me niet vergis bestaat er een uitbreiding voor waarbij je dus een lijstje met savegames laad. Die savegames zijn dan allemaal van één game, die bijvoorbeeld om de maand gesaved is. Zo kan je de ontwikkeling over tijd zien van de hele map.
Ik heb het zelf een keer geschreven, maar die code is oud en werkt niet meer met de huidige versie. Iemand van OpenTTDCoop heeft het idee toen verder uitgewerkt, en heeft me ook een paar demo's laten zien. Zag er erg aardig uit, moet ik zeggen.
Misschien een idee om op die manier de wedstrijd online te zetten.
Ik moet zeggen dat die nieuwere versie er impressive uitziet.
Verwijderd
http://dev.myottd.net/
Geloof dat Bjarni dat ontwikkeld heeft
edit: SpComb uit finland waar blijkt het te zijn
[ Voor 27% gewijzigd door Verwijderd op 28-06-2008 21:46 ]
Verwijderd
Betekent dat dat we delen van de code van wrightAI en Convoy in onze code mogen hebben? Dit lijkt in tegenspraak met het reglement, waarin staat: "De engine is zelf geschreven (door de organisatie aangeleverde voorbeeld code mag hergebruikt worden)."Verwijderd schreef op donderdag 19 juni 2008 @ 11:09:
[...]
Waarom niet? Al deze code valt onder de GPL licentie dus wie zijn wij om dat te verbieden?
En voor zo ver ik weet zijn wrightAI en Convoy niet door de organisatie aangeleverd. (En misschien zijn er nog wel meer AI-codes te vinden.)
Merk op dat in WrightAI niet heel veel staat wat je kan gebruiken. Vliegtuigen mogen immers niet.
while (me.Alive) {
me.KickAss();
}
Verwijderd
Ik zou wel mee willen doen, vrees dat ik (te) weinig tijd heb helaas. Gisteren nog wel even een bus-lijn-bouw unit gemaakt die winstgevende busverbindingen maakt
Misschien dat ik stiekem toch mee doe, maar dan moet ik nog wel een paar dagen erin kunnen steken..
Hoe doen jullie het tot nu toe?
Verwijderd
en ik zag ook dat het maximum aantal wegvoertuigen op 500 ofzo staat. Dat is uiteraard veel te laag.
[ Voor 14% gewijzigd door Verwijderd op 28-07-2008 14:33 ]
Verwijderd
Verwijderd
in 10 jaar kan mijn AI best meer dan 500 bouwen. Dat ontdekte ik omdat ie na een jaar of 6-7 crashte op 500. Nu was het niet de meest effectieve AI en werden er 200 bussen op één route gegooid (foutje van het managementVerwijderd schreef op maandag 28 juli 2008 @ 18:57:
"uiteraard."Wat vind jij dan een goed maximum? De computer moet ook nog 8*max_aantal_bussen aankunnen naast de AI's laten rekenen. Ik heb nog geen idee wat een goed aantal is, misschien moet ik eens een AI gaan bouwen.
while (me.Alive) {
me.KickAss();
}
Verwijderd
die grens staat gewoon ergens in de config file (openttd.cfg) en kan dus makkelijk verhoogd worden. De vraag is, of er voor de wedstrijd een bepaald maximum wordt gekozen en hoe hoog dat dan wordt.Corniel schreef op dinsdag 29 juli 2008 @ 14:42:
Tja, wij hebben de grens van 500 niet bedacht. Dust tot nader orde zal je het er mee moeten doen.Zal wel eens informeren of deze grens kan worden opgerekt.
while (me.Alive) {
me.KickAss();
}
Verwijderd
Er is nu zelfs een complete pathfinder library http://wiki.openttd.org/index.php/AI:Pathfinder , nog geen idee hoe goed deze is, maar een goede pathfinder bouwen vond ik altijd een van de grootste uitdagingen in de challenge. Nu lijk je deze dus kant en klaar te kunnen aan roepen. Wel of niet toegestaan?
Ja dat mag. Wat niet weg neemt dat je natuurlijk ook een eigen pathfinder implementatie mag schrijven.Verwijderd schreef op woensdag 06 augustus 2008 @ 09:31:
Zie nu voor het eerst de libraries. Is het toegestaan deze te gebruiken bij de Tjip Challenge?
while (me.Alive) {
me.KickAss();
}
Verwijderd
Zou Squirrel niet in NAIL moeten worden veranderd, als ik deze thread juist interpreteer?
while (me.Alive) {
me.KickAss();
}
Verwijderd
Verwijderd
Ik kan echter nergens vinden in welke versie we het tegen elkaar moeten opnemen, ik ga ervanuit dat het nog niet op de site staat. Zou de versie zo spoedig mogelijk bekend gemaakt kunnen worden? Dat komt de duidelijkheid ten goede. Het is al zo'n complex spel.
Wat ook belangrijk is voor de duidelijkheid is dat alle opties, maar dan ook alle, gespecificeerd worden vooraf. Tot nu toe was het "default, met de volgende aanpassingen:...", maar aangezien ik wel eens een optie heb veranderd, en dat bij het laden van een nieuwe versie niet alles op default wordt gezet, of de default misschien per versie kan verschillen, lijkt het me een goede zaak om alle opties in de configuratie te vermelden. Maak desnoods een aantal screenshots van de instellingen zoals ze bij de finale worden gebruikt, overtikken is misschien wat veel werk. Ik telde in de gauwigheid zo'n 136 opties.
Nog een vraagje: Wordt de wedstrijd in het Engels of in het Nederlands gespeeld?
::Build
NoAI v14329
::Patch
http://webserver.tjip.com/challenge2008/finale_patch.zip
::Speloties
Valuta: Euro
Voertuigen: Rechtsrijden
Automatisch opslaan:Uit
Schermresolutie:1680x1050
Voertuignamen:standaard
Meeteenheden: metrisch
Plaatsnamen: Nederlands
Taal: Nederlands
Screenshotformaat:PNG
::Moeilijkheid
Maximaal aantal tegenstanders: variabel
Starttijd tegenstanders:meteen
Aantal steden: normaal
Aantal industrieën: normaal
Maximale lening: Euro 200.000
Startrente: 4%
Brandstofkosten: hoog
Bouwsnelheid tegenstanders: erg hoog
Inteligentie van tegenstanders: hoog
Voertuigdefecten: uit
Vermenigingsvuldigingsfactor subsidies: 2x
Bouwkosten: hoog
Tereinsoort: plat
Hoveelheid zee/meren: laag
Economie: stabiel
Treinen draaien om: aan het einde van het spoort, en in stations
Rampen: uit
Houding van gemeente mbt landschapsaanpassingen: tollerant
::Patches-Economie
Infaltie: uit
Omkopen van de gemeente toegestaan: aan
Kopen van exclusieve transportrechten toegestaan: uit
Geld geven aan andere bedrijven toegestaan:uit
Stop spel in: 2008
Vloeiende economie inschakelen: uit
::Patches-Tegenstanders
Treinen voor de computer uitschakelen: aan
Wegvoertuigen voor de computer uitschakelen: uit
Vliegtuigen voor de computer uitschakelen: aan
Schepen voor de computer uitschakelen: aan
::Nieuw spel
“Normaal landschap”
Mapgrootte: 512x512
Aantal steden: normaal
Aantal industrieën: normaal
Datum: 1 janunari 1998
Landgenerator: TeraGenesis
Bos algoritme: verbeterd
Tereintype: plat
Zeeniveau: laag
Gladheid: vlak
[ Voor 0% gewijzigd door Corniel op 15-09-2008 16:00 . Reden: linkje werkte niet ]
while (me.Alive) {
me.KickAss();
}
Verwijderd
Ik weet overigens niet hoe ik aan NoAI v14329 kan komen. Volgens deze pagina is de laatste nightly build (nu) r14325 en de laatste release is r14222.
Ander probleem is dat de link naar de patch op de tjip-server het niet doet. (Ook niet als ik challege in challenge verander.) Wat staat er eigenlijk in zo'n patch?
Ik mis trouwens nog de opties voor ::Patches-Constructie, ::Patches-Voertuigen en ::Patches-Stations. Daar staan volgens mij ook een aantal opties die van belang zijn voor de wedstrijd.
edit: Aha, ik zie dat de link naar de patch net is aangepast
[ Voor 4% gewijzigd door Verwijderd op 15-09-2008 16:19 ]
Verwijderd
Deze opties zijn nutteloos in de NoAI branch, ze worden nergens gebruikt. Om dit effect te bereiken moet je onder patches-Voertuigen de opties "Maximaal aantal treinen/wegvoertuigen/vliegtuigen/schepen per speler" instellen.::Patches-Tegenstanders
Treinen voor de computer uitschakelen: aan
Wegvoertuigen voor de computer uitschakelen: uit
Vliegtuigen voor de computer uitschakelen: aan
Schepen voor de computer uitschakelen: aan
Helaas kan ik er zaterdag niet bij zijn, maar veel plezier iedereen die er wel is. Ik ben erg benieuw hoe alle AIs het doen en hoop dat alle deelnemers hun AI publiceren na afloop.
Verwijderd
is dit default? Ik dacht dat default een wat moeilijker terein was. Op deze manier is pathfinding (veel te) makkelijk, lijkt mij.Corniel schreef op maandag 15 september 2008 @ 15:00:
Bij deze hopelijk een compleet overzicht van alle settings die er gebruikt worden.
(..)
Tereintype: plat
Zeeniveau: laag
Gladheid: vlak
p.s. ik weet niet zeker of ik mee kan doen. Door drukte en medische omstandigheden ben ik niet echt aan openttd toegekomen de laatste maand
Ik hoop wel dat je nog meedoet Wilco. Als ie ook maar iets doet, is het al goed wat mij betreft.
while (me.Alive) {
me.KickAss();
}
Verwijderd
dat is wel een leuk idee!Corniel schreef op dinsdag 16 september 2008 @ 10:13:
Wat betreft het terein: het kan op alle punten makkelijker. Wellicht dat we in overleg met de deelnemers gedurende de volgende ronden het terein moeilijker maken.
ik hoop het ook! Ik ga een paar dagen rust nemen (retraite in Limbug, nou ja, bij familie langsIk hoop wel dat je nog meedoet Wilco. Als ie ook maar iets doet, is het al goed wat mij betreft.
en uiteraard is het goed als het "iets" doet, zeker als jij één van de tegenstanders bent
Verwijderd
Het is belangrijker dan ik dacht om echt alle opties te specificeren. Dus daarom herhaal ik mijn vraag aan de organisatie om dat ook te doen voor ::Patches-Constructie, ::Patches-Voertuigen en ::Patches-Stations.
En weet iemand hoe je een bepaalde nightly build moet opvragen? Ik denk dat een paar revisies meer of minder niet zo heel veel uitmaken, maar toch.
Hoeveel deelnemers zijn er (ongeveer) en hoe zijn de ronden van de wedstrijd eigenlijk opgezet?Corniel schreef op dinsdag 16 september 2008 @ 10:13:
Wat betreft het terein: het kan op alle punten makkelijker. Wellicht dat we in overleg met de deelnemers gedurende de volgende ronden het terein moeilijker maken.
Ik ben overigens niet zo een groot voorstander van moeilijk terrein, tenzij je elke wedstrijd één keer op makkelijk en één keer op moeilijk terrein speelt.
O ja, dat nog wel vergeten: 5000 voertuigen is de max.
while (me.Alive) {
me.KickAss();
}
Helaas niet meer voor deze wedstrijd, maar zelfs dan is het nog leuk (lijkt me).
Worden de AI's die aan de hand van deze wedstrijd gemaakt worden overigens ook toegevoegd aan de AI's die nu bij OpenTTD zijn, danwel op de wiki geplaatst? Zou misschien een leuke boost voor de TTD community zijn.
Onder linux (met svn geinstalleerd) "svn co -r 14329 svn://svn.openttd.org/branches/noai /naar/de/goeie/map"Verwijderd schreef op dinsdag 16 september 2008 @ 12:06:
... En weet iemand hoe je een bepaalde nightly build moet opvragen?
Onder windows, download een programma zoals toirtoisesvn en gebruik als source van de repository svn://svn.openttd.org/branches/noai (heb zelf geen ervaring met tortoise, of welk anders windows programma op dat terrein. Weet alleen dat de uni dat gebruikt)
Je moet dan nog wel zelf compileren, dus is niet echt een bepaalde nightly build :-) Maar dit is het dichtste bij wat ik kan komen.
Verwijderd
5000 voertuigen?
(Volgens mij gaat trouwens alleen ::Patches-Interface over de GUI.)
@yopy,
Aha, OTTD-AI programmeren voor studiepunten, klinkt goed.
Ik weet niet of het een hele grote boost zal geven aan de OTTD community. De meeste AI's zijn natuurlijk specifiek voor deze wedstrijd geschreven. (En misschien in het Nederlands.) En het doel is ook niet om leuk tegenspel te bieden voor mensen, maar ik denk dat ze er toch wat aan zullen hebben. Veel deelnemers hebben al toegezegd dat ze hun code na de wedstrijd zullen openbaren.
@Horeamus,
Bedankt. Ik zal eens kijken of het lukt.
@yopy: de deelnemers zijn zelf eigenaar van de code. Het is aan hen of ze het wel of niet delen.
Hier is de config die ik nu gebruik. Tenzij mensen goede argumenten hebben waarom e.a. niet klopt, zal dit de config van de finale zijn.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
| [misc] display_opt = SHOW_TOWN_NAMES|SHOW_STATION_NAMES|SHOW_SIGNS|FULL_ANIMATION|FULL_DETAIL|WAYPOINTS news_ticker_sound = true fullscreen = false language = dutch.lng resolution = 1680,1028 screenshot_format = savegame_format = rightclick_emulate = false small_font = medium_font = large_font = small_size = 6 medium_size = 10 large_size = 16 small_aa = false medium_aa = false large_aa = false sprite_cache_size = 4 player_face = 0 transparency_options = 0 transparency_locks = 0 invisibility_options = 0 keyboard = keyboard_caps = [music] playlist = 0 music_vol = 0 effect_vol = 0 custom_1 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 custom_2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 playing = false shuffle = false extmidi = timidity [win32] display_hz = 0 force_full_redraw = false fullscreen_bpp = 8 window_maximize = false [difficulty] max_no_competitors = 7 competitor_start_time = 0 number_towns = 2 number_industries = 3 max_loan = 100000 initial_interest = 4 vehicle_costs = 2 competitor_speed = 4 competitor_intelligence = 2 vehicle_breakdowns = 0 subsidy_multiplier = 1 construction_cost = 2 terrain_type = 1 quantity_sea_lakes = 1 economy = 0 line_reverse_mode = 0 disasters = 0 town_council_tolerance = 0 diff_level = 3 [game_creation] town_name = dutch landscape = temperate snow_line = 56 snow_line_height = 7 starting_year = 1998 land_generator = 1 oil_refinery_limit = 32 tgen_smoothness = 1 generation_seed = 4160062532 tree_placer = 2 heightmap_rotation = 0 se_flat_world_height = 0 map_x = 9 map_y = 9 [vehicle] road_side = right realistic_acceleration = false mammoth_trains = true never_expire_vehicles = false max_trains = 500 max_roadveh = 5000 max_aircraft = 500 max_ships = 500 servint_ispercent = false servint_trains = 150 servint_roadveh = 150 servint_ships = 360 servint_aircraft = 100 wagon_speed_limits = true disable_elrails = false freight_trains = 1 plane_speed = 4 dynamic_engines = false extend_vehicle_life = 0 [construction] build_on_slopes = true autoslope = true extra_dynamite = false longbridges = true signal_side = true road_stop_on_town_road = true raw_industry_construction = 0 [station] always_small_airport = false join_stations = true nonuniform_stations = true station_spread = 12 modified_catchment = true adjacent_stations = true [economy] town_layout = 1 station_noise_level = false inflation = false multiple_industry_per_town = false same_industry_close = false bribe = true exclusive_rights = false give_money = false smooth_economy = true allow_shares = false town_growth_rate = 2 larger_towns = 4 initial_city_size = 2 mod_road_rebuild = false dist_local_authority = 20 town_noise_population = 800,2000,4000 [pf] forbid_90_deg = false roadveh_queue = true pathfinder_for_trains = 2 pathfinder_for_roadvehs = 2 pathfinder_for_ships = 0 wait_oneway_signal = 15 wait_twoway_signal = 41 wait_for_pbs_path = 30 reserve_paths = false path_backoff_interval = 20 opf.pf_maxlength = 4096 opf.pf_maxdepth = 48 npf.npf_max_search_nodes = 10000 npf.npf_rail_firstred_penalty = 1000 npf.npf_rail_firstred_exit_penalty = 10000 npf.npf_rail_lastred_penalty = 1000 npf.npf_rail_station_penalty = 100 npf.npf_rail_slope_penalty = 100 npf.npf_rail_curve_penalty = 1 npf.npf_rail_depot_reverse_penalty = 5000 npf.npf_rail_pbs_cross_penalty = 300 npf.npf_rail_pbs_signal_back_penalty = 1500 npf.npf_buoy_penalty = 200 npf.npf_water_curve_penalty = 25 npf.npf_road_curve_penalty = 1 npf.npf_crossing_penalty = 300 npf.npf_road_drive_through_penalty = 800 yapf.disable_node_optimization = false yapf.max_search_nodes = 10000 yapf.rail_firstred_twoway_eol = true yapf.rail_firstred_penalty = 1000 yapf.rail_firstred_exit_penalty = 10000 yapf.rail_lastred_penalty = 1000 yapf.rail_lastred_exit_penalty = 10000 yapf.rail_station_penalty = 1000 yapf.rail_slope_penalty = 200 yapf.rail_curve45_penalty = 300 yapf.rail_curve90_penalty = 600 yapf.rail_depot_reverse_penalty = 5000 yapf.rail_crossing_penalty = 300 yapf.rail_look_ahead_max_signals = 10 yapf.rail_look_ahead_signal_p0 = 500 yapf.rail_look_ahead_signal_p1 = -100 yapf.rail_look_ahead_signal_p2 = 5 yapf.rail_pbs_cross_penalty = 300 yapf.rail_pbs_station_penalty = 800 yapf.rail_pbs_signal_back_penalty = 1500 yapf.rail_doubleslip_penalty = 100 yapf.rail_longer_platform_penalty = 800 yapf.rail_longer_platform_per_tile_penalty = 0 yapf.rail_shorter_platform_penalty = 4000 yapf.rail_shorter_platform_per_tile_penalty = 0 yapf.road_slope_penalty = 200 yapf.road_curve_penalty = 100 yapf.road_crossing_penalty = 300 yapf.road_stop_penalty = 800 [order] gotodepot = true no_servicing_if_no_breakdowns = false timetabling = true improved_load = true selectgoods = true serviceathelipad = true gradual_loading = true [gui] colored_news_year = 1980 ending_year = 2008 autosave = off vehicle_speed = true status_long_date = true show_finances = false autoscroll = false reverse_scroll = false smooth_scroll = false measure_tooltip = false errmsg_duration = 5 toolbar_pos = 0 window_snap_radius = 10 population_in_label = true link_terraform_toolbar = false liveries = 2 prefer_teamchat = false scrollwheel_scrolling = 0 scrollwheel_multiplier = 5 pause_on_newgame = false advanced_vehicle_list = 1 timetable_in_ticks = false loading_indicators = 1 default_rail_type = 4 enable_signal_gui = false drag_signals_density = 4 semaphore_build_before = 1975 train_income_warn = true order_review_system = 2 lost_train_warn = true autorenew = false autorenew_months = 6 autorenew_money = 100000 always_build_infrastructure = false new_nonstop = false keep_all_autosave = false autosave_on_exit = false max_num_autosaves = 16 bridge_pillars = true auto_euro = true news_message_timeout = 2 show_track_reservation = false default_signal_type = 0 cycle_signal_types = 0 console_backlog_timeout = 100 console_backlog_length = 100 network_chat_box_width = 700 network_chat_box_height = 25 [ai] ai_in_multiplayer = true ai_disable_veh_train = true ai_disable_veh_roadveh = false ai_disable_veh_aircraft = true ai_disable_veh_ship = true [locale] currency = EUR units = metric [network] max_join_time = 500 pause_on_join = true server_bind_ip = 0.0.0.0 server_port = 3979 server_advertise = false lan_internet = 0 player_name = server_password = rcon_password = default_company_pass = server_name = connect_to_ip = network_id = e3522299d690ada9e85af747505a09df autoclean_companies = false autoclean_unprotected = 12 autoclean_protected = 36 max_companies = 8 max_clients = 10 max_spectators = 10 restart_game_year = 0 min_players = 0 server_lang = ANY reload_cfg = false last_host = 0.0.0.0 last_port = 0 [currency] rate = 1 separator = "." to_euro = 0 prefix = "" suffix = " credits" [news_display] arrival_player = full arrival_other = full accident = full company_info = full open = full close = full economy = full production_player = full production_other = full production_nobody = full advice = full new_vehicles = full acceptance = full subsidies = full general = full [version] version_string = r14288M-noai version_number = 070037D0 |
while (me.Alive) {
me.KickAss();
}
Verwijderd
Ik vroeg me af wat ik zou doen als ik de 500 wagentjes zou halen. Maar met 5000 hoef ik me niet al te veel zorgen te maken denk ik.
edit: misschien nuttig voor anderen: In de OpenTTD-map (waar meestal ook de map met save-games in zitten, in my documents) bevindt zich de file openttd.cfg. Stuk van Corniel even copy-pasten en alle wedstrijdinstellingen zijn overgenomen.
[ Voor 32% gewijzigd door Verwijderd op 16-09-2008 16:30 ]
while (me.Alive) {
me.KickAss();
}
Verwijderd
Ik ben niet echt voorstander van toestaan, maar als het wordt toegestaan zal ik waarschijnlijk wel nog tussendoor willen sleutelen.
Ik heb de patch (finale_patch.zip) ook aangepast:
- fix voor AIRoad.CanBuildConnectedRoadPartsHere
- fix voor multithreading onder Windows
- logging finale score
[ Voor 58% gewijzigd door Corniel op 19-09-2008 10:31 . Reden: toezeggingen ingelost ]
while (me.Alive) {
me.KickAss();
}
Verwijderd
Verwijderd
en als de wedstrijd maar uit één of twee rondes bestaat, zal het ook niet zo zinvol zijn.Martao schreef op vrijdag 19 september 2008 @ 14:01:
Zoals het er nu naar uit ziet zal sleutelen op zich toegestaan worden, al is het maar de vraag in hoeverre daar tijd voor is.
Maar ik ga dat morgen verder uitleggen. Nu zelf even zorgen dat onze engine morgen niet failliet gaat... (Want dat levert strafpunten op!)
while (me.Alive) {
me.KickAss();
}
Verwijderd
En nog een vraagje over als iemand failliet gaat: In mijn AI komt er dan een plaatsje vrij die dan wordt ingenomen door een willekeurige AI. Hoe is dat te voorkomen? Soms wil ik die AI's helemaal niet.
Trouwens jammer dat OTTD-site net nu gehackt is...
Verwijderd
Verwijderd
Ik heb de afgelopen maanden allerlei leuke dingetjes bedacht, maar had helaas te weinig tijd (vrijgemaakt) om die dingen te implementeren. Toen ik vrijdag nog even snel een routebouwer in elkaar wilde zetten, merkte ik hoe moeilijk dat al was. Respect daarom voor iedereen die het wel deed tijdens de challenge.
Grappig dat onze NAAI uiteindelijk nog 4de was geeindigd. We schaamden ons bijna om hem in te sturen, maar het was beter dan niets. En blijkbaar had niet iedereen op de eigenlijke doelfunctie geoptimaliseerd.
Maar ik vroeg me af of er nog leuke beelden en dergelijke van de finale zijn ofzo, zodat het ook voor buitenstaanders mogelijk is om er een beetje van te proeven. Als supporter, zeg maar
Het lijkt me wel interessant om replays te zien ofzo.
"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron
Maarja zelfde vraag als sjaak
Misschien dat wat van de deelnemers een stukje code willen posten. Vind ik zelf altijd lekker leerzaamRoom42 schreef op maandag 22 september 2008 @ 00:30:
Ik lees deze thread nu voor het eerst, maar dat geeft niet omdat ik sowieso niet geschikt zou zijn hiervoor.
Maar ik vroeg me af of er nog leuke beelden en dergelijke van de finale zijn ofzo, zodat het ook voor buitenstaanders mogelijk is om er een beetje van te proeven. Als supporter, zeg maar
Het lijkt me wel interessant om replays te zien ofzo.
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
Verwijderd
Het was in ieder geval een leuke dag en loads of fun ook om zo'n AI te maken
----
edit: de test AI's zijn gepost, zie thread
[ Voor 5% gewijzigd door Verwijderd op 22-09-2008 18:01 ]
Verwijderd
btw die jammer routine en het commentaar erop, meesterlijk, all is fair in love and war!
"Then there was the man who drowned crossing a stream with an average depth of six inches."
In de finale veranderde er niets meer aan de pikorde: ‘Shadows Inc.’ bleef ondanks een bankroet en een magere score van 300 duizend tijdens de finale, ‘NAAI’ voor. Buiten mededinging draaide Convoy mee in de voorronden. Convoy scoorde gemiddeld £5.346.034, en zou hiermee tweede zijn geworden.
Ranglijst
1. | Rondje rond de kerk | £15.671.342 |
2. | Ottari | £3.487.225 |
3. | Shadows Inc. | £2.798.447 |
4. | NAAI | £876.351 |
5. | YATTAI | £760.638 |
6. | SubsidyAI | £512.639 |
7. | NoCAB | £73.984 |
8. | GoingForGold | £17.380 |
9. | Appelmoes Intelligentie | £-38.291 |
Rondje rond de kerk
Zoals gezegd: indrukwekkend wat deze engine presteerde. De vier ontwikkelaars die hierachter zaten hebben er dan ook werk van gemaakt. Na eigen zeggen 480 uur spendeerden ze aan de ontwikkeling. Naast ‘Rondje’ bouwende zij drie testengines waarvan de beste – OtviAI - in een een-op-een situatie Convoy versloeg.
Verder maakten ze optimaal gebruik van de mazen in het spel: voortuigen werden bijvoorbeeld direct na aflevering verkocht omdat dat goedkoper is dan terugrijden en nieuwe vracht ophalen. Ook bouwden ze zelf geen weg, maar parasiteerden zijn op de wegen die door anderen werden gebouwd. Engines die geen passagiers vervoerden (o.a. NoCAB en GoingForGold) gingen hierdoor tijdens de wedstrijden waarin ‘Rondje’ opereerde, keihard failliet.
Ottari
De ontwikkelaars waren zelf niet aanwezig, maar stuurden de winnaar van vorig jaar om hun engine te begeleiden. Veel van hun strategie weet ik derhalve niet. Wel dat ‘Ottari’ de stations zo bouwde dat ‘Rondje’ niet in staat was ze te herkennen. In een parallel gedraaide een-op-een-match er wonnen ze hierdoor overtuigend.
Shadows Inc.
Een zeer interessante aanpak werd gekozen door Shadows Inc. Eerst werd al het beschikbare geld geïnvesteerd in één zo optimaal mogelijk lijntje. Daarna ging ‘Shadows Inc.’ aan de slag om een een optimale lijn met optimale lengte (tussen de 150 en 200 tiles lang). Zodra er geld genoeg gevonden was om deze te bouwen, werden de eerste lijn opgedoekt. Dit geeft een enorme boost aan de groei. Probleem bleek dat in de helft van de gevallen de nieuwe lijn net niet gebouwd kon worden (te weinig geld) en dat vertraagde de groei aanzienlijk. Ook had de ontwikkelaar voorbereidingen getroffen om e.a. te testen via een neuraal netwerk, maar door ziekte was het daar nog niet van gekomen. Wellicht dat hij er later nog wat mee ging doen.
NAAI
De meest verrassende engine was wellicht ‘NAAI’. Een engine die zich tot enkel doel had gesteld om de tegenstanders te zieken. Door hun korte ontwikkeltijd (een dag!) hadden ze nog niet alles kunnen implementeren, en besloten ze te gaan voor het enige doel: overleven met een zo groot mogelijke company value. Tegen het einde van de wedstrijd bouwde ‘NAAI’ van al het resterende geld road stations om zo met een company value van zo’n 800 duizend pond. Deze strategie werd overigens ook door ‘Rondje’ toegepast. Vrij succesvol, aangezien de company value van een station 10 maal hoger ligt dan de aanschafkosten.
SubsidyAI
Mijn persoonlijke favoriet. Niet alleen omdat hij niet voor de winst ging, maar ‘gewoon’ een leuke engine wilde bouwen, maar ook door zijn doelstelling:: bouw een engine die opereert als de overheid. Niet noodzakelijk doelmatig, of efficiënt, ja, soms zelfs verkwistend. Hij begon alleen met nieuwe lijnen als er subsidie werd aangeboden. Zelf moest ik erg denken aan een foto die nu in de [url http://www.kunsthal.nl/22-377-Bureaucratica.html ]kunsthal[/url] hangt:

Burocraticia zou een leukere naam zijn denk ik.
NoCAB
Tja, de engine van Morloth en mij deed het niet zo best. Deels omdat we nog niet toe waren gekomen aan het implementeren van personenvervoer, deels omdat er nog wat kleine bugjes inzaten waardoor we lijnen hadden die niet optimaal waren qua winstgevendheid. Wel waren we de beste Tjippers, en dat was ook wat waard.
Ook de overige deelnemers hadden hun leuke verhalen. Appelmoes Inteligentie had wat mij betreft de meest lachwekkende (en wellicht leukste) naam, terwijl GoingForGold (mijn collega en dus directe concurent) vrijdag nog hard bezig was, en ik zijn projectleider aan m’n bureau kreeg met vragen over in te bouwen features om hem een extra zetje in de goede richting te geven.
De deelnemers hebben interessante input geleverd voor het NoAI-framework. Zowel qua engines als qua gevonden bugs/features e.d. Ook bleek dat de lol die mensen uit een computergame halen niet noodzakelijk door fancy graphics, maar door gameplay worden veroorzaakt. Anders kan ik het niet verklaren dat zoveel mensen vol enthousiasme met een 8-bit graphics spel uit 1992 aan de gang zijn gegaan anno 2008.
Al met vond ik het een zeer leuk evenement. Zowel deelnemer als organisator zijnde vond ik het een succes. Nog leuker dan vorig jaar.
while (me.Alive) {
me.KickAss();
}
Respect voor alle deelnemers die in een inzending hebben weten af te ronden. Dat was met het leren van wat voor velen een nieuw platform zal zijn geweest niet eenvoudig.
Ben wel nieuwsgierig naar de pic's en filmpjes ingame er van
Verwijderd
Rondje om de kerk
Geweldig stuk, manVerwijderd schreef op vrijdag 26 september 2008 @ 15:50:
As promised: we hebben inmiddels de code en bijbehorende uitleg/filosofie gepost op het openttd forum:
Rondje om de kerk
"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron
overigens is NoAI nu ook in de main release uitgekomen, dus je hoeft geen eigen ottd te compilen..