Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Skripts fuer KI Spieler
#31
Die 'alten' KIs sind in c++ programmiert. Ausserdem cheaten die: die bauen keine Depots.
Zitieren
#32
Das ist schon klar.

Die Script-KI greift doch auch per API auf den Simutrans-Code zu oder nicht?
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#33
(04-04-2020, Saturday-21:39:04 )Andarix schrieb: Es scheint so, als gerät die Convoyvalidierung in eine Endlosschleife, wenn die Gesamtlänge über 16 hinaus geht.

sqai_rail_0002.zip

prototyper.nut Zeile 174

angehängt ist die Version mit der Dauerschleife ( Ausgabe InGame im Meldungsfenster )

wird max_length durch 16 oder CARUNITS_PER_TILE ( entspricht 16 ) ersetzt, dann funktioniert es

mmh, ich glaube ich weis woran das liegt.

Es wird schlicht jede Kombination getestet. Das bedeutet, das bei erlaubten 32 Fahrzeugen 30/31 ( je nach dem ob mit extra Tender oder nicht ) Züge pro Lok getestet werden.

  1. Lok +1 Wagen
  2. Lok + 2 Wagen
  3. Lok + 3 Wagen
  4. Lok + 4 Wagen
  5. ...

Bei 8 verfügbaren Loks sind das dann rund 240 - 250 Kombinationen die getestet werden. Mit jeder Lok kommen dann nochmal 30/31 Convoys dazu.

Bei der Zuglänge müsste schon mal beim unterschreiten der maximalen Geschwindigkeit ( beladen ) abgebrochen werden. Weil mehr Wagen dann kaum Sinn machen.
Auch kürzere Züge sollten nicht geprüft werden.

Durch das ausfiltern veralteter und elektrischer Fahrzeuge funktioniert jetzt eine Länge von 32 und 48.
Bei Länge 48 ergab das 40 Tests für einen Zug mit Lok und 3 Wagen.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#34
prototyper.nut

Warum ist max_speed in der Ausgabe negativ?

Zitat:planned_convoy.length 8
wt 3
plan station
evaluate this candidate: 1153046759
valuate: (function : 0x0B985C60)
... length = 8
... max_speed = -727379968
... min_top_speed = 10817536
convoy length: 8
... length = 19
... max_speed = -727379968
... min_top_speed = 2926049
convoy length: 19
... length = 8
... max_speed = -727379968
... min_top_speed = 5354425
convoy length: 8
vehicle found: Seeschiff_Fracht_1882
vehicle found: Schubeinheit
vehicle found: Schlepper
max_length: 24
CARUNITS_PER_TILE: 16

Code:
...
//             print("Test[" + ind + "] = " + test.get_name())
            // append
            cnv[ind] = cnv[ind-1].append(test, freight)
            local c = cnv[ind]

//             local ccc = ["weight","power","min_top_speed","max_speed","length","missing_freight","capacity","maintenance","price","running_cost"]
//             foreach(key in ccc) print(" ... " + key + " = " + c[key] )

            // check constraints
            // .. length
            local l = (ind > 1 ?  cnv[ind-1].length : 0) + max( CARUNITS_PER_TILE/2, test.get_length());
            //gui.add_message_at(our_player, "convoy length max: " + max( CARUNITS_PER_TILE/2, test.get_length()), test)
            //max_vehicles  
      if ( wt == wt_water ) {
        a = 16 * 4
      }
      else if ( wt == wt_rail ) {
        a = 16 * 3
      }
      else {
        a = 16
      }
            if (l > a ) { //) {  max_length   CARUNITS_PER_TILE
                continue;
            }
            // .. more ??
            gui.add_message_at(our_player, "convoy length: " + l, world.get_time())
            local ccc = ["min_top_speed","max_speed","length"]
            foreach(key in ccc) gui.add_message_at(our_player," ... " + key + " = " + c[key], world.get_time())

            // check if convoy finished
            if (test.can_be_last() &&  !c.missing_freight  &&  c.min_top_speed >= min_speed) {
                // evaluate this candidate
                    gui.add_message_at(our_player, "valuate: " + valuate, world.get_time())
                if (valuate) {
                    local value = valuate.call(getroottable(), c)
//                     print(" === " + value)
                    gui.add_message_at(our_player, "evaluate this candidate: " + value, world.get_time())
                    if (best==null  ||  value > best_value) {
                        best = c
                        best_value = value  
                    }
                }
....
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#35
langsam geht es vorwärts

zu max_speed

Das scheint ein Überlauf zu sein. Nimmt man bei der Definition von max_speed am Anfang der prototyper.nut 3 Nullen vom Wert weg, dann bekommt man die realen Werte der Geschwindigkeit.

zur Validierung

Kann es sein, das die Kapazität höher gewichtet ist bei der Bewertung als die Geschwindigkeit?

Weil ein Pferdegespann mit 4 Ladung und 18 km/h wird besser bewertet als ein Traktorgespann mit 45 km/h und 2 Ladung.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#36
Das wird an den Kosten liegen Es wird wahrscheinlich billiger sein mit Pferdegespann als mit Traktor.
Zitieren
#37
Zumindest die Betriebskosten sind beim Traktorgespann niedriger.

Aber bei der Validierung muss ich wohl auch nochmal drüber schauen. Aktuell ist es so, das ab 4 Feldern für die Eisenbahn nur noch Eisenbahnen genutzt werden.

aktueller Zwischenstand mit 3 Feldern für die Eisenbahn
sqai_rail_0003.zip

Eisenbahnstationen müssen von Hand verlängert werden.
Und ggf zusätzliche Züge wieder gelöscht oder eben die Strecke ausgebaut werden für mehrere Züge.

Muss mich wohl erst mal dem Stationsplaner/-bauer widmen.

Auch beim Brückenbauer gibt es Probleme, wenn die Bauweite von Brücken zu kurz ist.

(08-04-2020, Wednesday-19:02:48 )Andarix schrieb: ...
aktueller Zwischenstand mit 3 Feldern für die Eisenbahn
sqai_rail_0003.zip

....

inkl Fehler, hab aber noch keinen Schimmer was schief ging

[Bild: script_err_railki.png]
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#38
Der sucht ein Depot an einer Stelle, wo keines (mehr ?) ist.
Zitieren
#39
(09-04-2020, Thursday-17:11:35 )Dwachs2 schrieb: Der sucht ein Depot an einer Stelle, wo keines (mehr ?) ist.

kann sein, hab ein Depot wegen Änderung der Stationslänge versetzt
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#40
Das Skript versucht einen neuen Convoi in dem Depot zu erstellen, wo ein anderer der Linie erstellt wurde. Da koennte man noch eine Suche nach einem Depot einbauen...
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 5 Gast/Gäste