Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Script_KI - Fahrzeuge
#1
(09-04-2020, Thursday-18:11:30 )Dwachs2 schrieb: 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...

Wenn ich es richtig sehe wird dabei nur ein vorhandener kopiert und nicht komplett neu ermittelt.

industry_manager.nut
Code:
....
if (gain_per_m > 0) {
  // directly append
  // TODO put into report
  local proto = cnv_proto_t.from_convoy(cnv, lf)
....

prototyper.nut
Code:
static function from_convoy(cnv, freight)
  {
    local p = cnv_proto_t()
    local list = cnv.get_vehicles()
    foreach(v in list) {
       p = p.append(v, freight)
   }
   return p
}

local list = cnv.get_vehicles() kopiert die Fahrzeugreihung eines vorhandenen Konvoys.

Hier müsste aber der Fahrzeugsuche/-prüfung angestoßen werden um zu ermitteln ob es inzwischen etwas besseres gibt.
Script-KI für Simutrans r9112+
Zitieren
#2
Das wird in upgrade_link_line() versucht, wenn veraltete Fahrzeuge benutzt werden.
Zitieren
#3
(29-04-2020, Wednesday-10:29:44 )Dwachs2 schrieb: Das wird in upgrade_link_line() versucht, wenn veraltete Fahrzeuge benutzt werden.

Nur veralten Fahrzeuge teilweise erst sehr spät oder gar nicht.
Script-KI für Simutrans r9112+
Zitieren
#4
Und bei Deiner Implementierung wird bei der Fahrzeugauswahl nicht auf veraltet getestet.

Ich verstehe upgrade_link_line() nicht so ganz.
Script-KI für Simutrans r9112+
Zitieren
#5
(29-04-2020, Wednesday-17:23:43 )Andarix schrieb: ...
Ich verstehe upgrade_link_line() nicht so ganz.

da steht folgendes drin, was aber nicht zu funktionieren scheint

Code:
    // plan convoy prototype
    local prototyper = prototyper_t(cnv.get_waytype(), link.freight.get_name())

    // iterate through schedule to estimate distance
    local dist = 0
    {
      local entries = cnv.get_schedule().entries
      local i = 0

      while(i < entries.len()) {
        local entry = entries[i]
        // stations on schedule
        if (entry.get_halt(our_player) == null) {
          continue
        }

        // next station on schedule
        local nexthalt = null
        i++
        while(i < entries.len()) {
          if (nexthalt = entries[i].get_halt(our_player)) break
          i++
        }
        if (nexthalt == null) {
          i = 0
        }
        local diff = abs(entry.x - entries[i].x) + abs(entry.y - entries[i].y)
        if (diff > dist)  {
          dist = diff
        }
      }
    }
Script-KI für Simutrans r9112+
Zitieren
#6
Stimmt. Die Schleife bricht nie ab, oder?

Edit: Tatsaechlich, das ist jetzt langsam peinlich. Habe auf github gepusht, jetzt sollte die KI wenigstens obsolete Fahrzeuge modernisieren.
Zitieren
#7
(30-04-2020, Thursday-16:03:40 )Dwachs2 schrieb: Stimmt. Die Schleife bricht nie ab, oder?
...

Na ja, ich hab diesen Teil weiter oben beim hinzufügen von Fahrzeugen bei den Linien verwendet und da ist dann nichts passiert.

Auskommentiert und es ging wieder. Hab da nicht weiter nachgeforscht. Hab dann einfach Station[0] und Station[1] direkt genommen.

Man hat halt immer mal wieder Denkfehler wo man sich später fragt warum man das gemacht hat.
Script-KI für Simutrans r9112+
Zitieren
#8
zur Validierung von Konvoys


prototyper.nut - valuate_monthly_transport
Zitat:...
// monthly costs and revenue
local value = ncnv*( (frev*cnv.capacity+1500)/3000*tpm - cnv.running_cost*tpm - cnv.maintenance) - distance * way_maintenance
....

Für was stehen die 1500 bei Frachtpreis*Kapazität und die 3000 durch die dann geteilt wird?

Ich hab nämlich nach wie vor das Problem, das Züge genommen werden die minus machen von Haus aus.

Und in wie weit wird die Einstellung von pay_for_total_distance berücksichtigt?
Script-KI für Simutrans r9112+
Zitieren
#9
mal eine Frage

Wird eigentlich bei der Validierung berücksichtigt, das in den good-Dateien der 3-Fache Betrag für den Warenpreis steht?

Wenn nicht, würde das erklären, warum Konvoys gewählt werden die potenziell Minus einfahren. Weil nämlich die 3-fachen Einnahmen angenommen werden als die tatsächlich erzielten.
Script-KI für Simutrans r9112+
Zitieren
#10
In freight.calc_revenue(...) ist noch der Speedbonus drin (Basiswert = 1000). Der muss wieder abdividiert werden, ausserdem der Faktor 3, den du erwaehnt hast.

Bei ganzzahliger Division werden alle Nachkommastellen 'vergessen'. D.h. dort ist 4/5 = 0. In der Rechnung (a + 1500)/3000 ist 1500 da, damit das Ergebnis gerundet wird: Ist a = 1600, dann ist a/3000 = 0 aber (a+1500)/3000 = 1, was naeher am wahren Wert 1600/3000 = 0.5333.. ist.

pay_for_total_distance wird nicht beruecksichtigt. Das kann zur Zeit nicht mal abgefragt werden. Brauchst du das?
Zitieren


Gehe zu:


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