Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / Schach III (Mephisto III S Glasgow) und Schach 5 (MM V) erschienen
- - By Thomas Plaschke Date 2026-07-30 21:44 Upvotes 3
Frank Brenner hat's wieder getan!

Im Schachcomputer.info-Forum kann man alles weitere lesen.

Das hat Folgen! 

Schachfreund Egbert ist erst mal beschäftigt und Thorsten Czub erklärt Mephisto III S Glasgow auf PC zu den Brute Force Stellungsfressern - vorbei die Zeit, als ihm 7-8 Knoten/s ein Indiz für ein intelligentes Programm waren. 

Superlative sind dafür schon genug geäussert - ich sag einfach: Danke, Frank!

Viele Grüße
Thomas Plaschke
Parent - By Thorsten Czub Date 2026-07-31 06:18
Mephisto III S Glasgow ist alles andere als ein brute force Geschöpf.
Parent - - By Peter Martan Date 2026-07-31 07:49
Suppi!
Die Release- Site von Schach III hat aber nur den Code zum Runterladen. Ich warte noch ein bisschen, ob sich das noch ändert, sonst kompilier' ich's mit Claude's Hilfe selbst (drohte er sich selbst und der Ökonomie und der Ökologie)
Parent - - By Thomas Plaschke Date 2026-07-31 08:03
Wenn Du auf der Github-Seite von Tags auf Releases umschaltest (Schalter oben links unter der Menüzeile), bekommst Du auch eine Windows-Exe angeboten.
VG Thomas Pl.
Parent - - By Peter Martan Date 2026-07-31 08:17 Edited 2026-07-31 08:19
Ah, got it.
Was mich irren ließ: der Link im Schachcomputer.info- Forum führt ja ausdrücklich zu releases..., dann aber gleich weiter zu den Sourcen und einer Überschrift mit Enhance Readme, während der vom Schach 5 zu Compiles und Sourcen führt.

So bei Schach III direkt zum Compile:

https://github.com/Admiralatlantis/SchachIII-UCI/releases/

Danke und natürlich besonders danke an Frank.
Parent - - By Stefan Pohl Date 2026-07-31 09:53
Mal doof gefragt: Wenn man die selektive Suche schon verändert hat, könnte man nicht auch die KI zwingen, Hashtables hinzufufügen? Das sollte gerade bei einem immer noch sehr langsam laufenden Programm (bei mir so 30.000 nps auf einem auf 3 GHz gelockten Arebitesnotebook, das ist im Vergleich zu anderen UCI Engines ja immer noch sehr, sehr wenig) doch einen echten Quantensprung in der Spielstärke bringen?!
Parent - By Thorsten Czub Date 2026-07-31 10:03
Klar kann man das Programm in Absprache mit dem Rechteinhaber bestimmt
verbessern.
Parent - - By Jörg Oster Date 2026-07-31 10:45
Leider keine Sourcen.
Die hätte ich mir gerne mal angeschaut und mit heutigen Algorithmen verglichen.
Parent - - By Frank Brenner Date 2026-07-31 11:08
Hallo Jörg,

der von der KI erstellte Code lässt sich nicht flüssig lesen. Hier ist ein vereinfachtes Beispiel:

Grüße Frank

Code:

## 1. Didaktisches Alpha-Beta wie aus einem Lehrbuch

```c
static int negamax(Position *position, int depth, int alpha, int beta)
{
    MoveList moves = generate_legal_moves(position);

    if (moves.count == 0)
        return matt_oder_patt(position);

    if (depth == 0)
        return evaluate(position);

    int best = -INF;

    for (size_t i = 0; i < moves.count; ++i) {
        Undo undo;
        make_move(position, moves, &undo);

        int score = -negamax(position, depth - 1,
                             -beta, -alpha);

        unmake_move(position, moves, &undo);

        if (score > best)
            best = score;

        if (score > alpha)
            alpha = score;

        if (alpha >= beta)
            break;                 /* Beta-Cutoff */
    }

    return best;
}
```

Die Hauptschleife ist leicht erkennbar:

1. nächsten legalen Zug nehmen,
2. Zug ausführen,
3. rekursiv suchen,
4. Zug zurücknehmen,
5. besten Wert und `alpha` aktualisieren,
6. bei `alpha >= beta` die übrigen Züge abschneiden.

Das Minuszeichen vor dem rekursiven Aufruf entsteht durch Negamax: Nach
jedem Zug wechselt die Seite, aus deren Sicht die Bewertung gelesen wird.

## 2. Entsprechender Kern der Glasgow-Suche

Die wirkliche Portierung befindet sich in
`rom_search_run_fixed_node()` in `engine/src/rom_search.c`. Der folgende
Ausschnitt ist gekürzt, behält aber die Struktur und die Namen der echten
Hilfsfunktionen bei:

```c
/* Ersten priorisierten Kandidaten erzeugen und ausführen. */
glasgow_rom_search_prepare_first_descend(..., &first);
child_position            = first.child_position;
child_local_2             = first.descend.recurse_local_2;
child_frame_0             = first.descend.recurse_d6;
child_source              = first.descend.move.source;
child_encoded_destination = first.descend.move.encoded_destination;

/* Das ist die eigentliche Hauptschleife über die Kandidaten. */
for (; {
    uint16_t recursive_d0;
    uint16_t recursive_a0;

    ++runtime->result->edges;

    /* Entspricht dem rekursiven negamax()-Aufruf. */
    rom_search_run_fixed_node(runtime,
                              &child_position,
                              child_local_2,
                              child_frame_0,
                              &recursive_d0,
                              &recursive_a0);

    /*
     * Zug zurücknehmen, Seite zurückdrehen, Rückgabewert negieren,
     * mit dem bisherigen Wert vergleichen und gegebenenfalls PV ändern.
     */
    glasgow_rom_search_finish_child_return(
        &(GlasgowRomSearchChildReturnContext) {
            .ram             = runtime->context->ram,
            .recursive_d0    = recursive_d0,
            .recursive_a0    = recursive_a0,
            .parent_local_12 = parent_local_12,
            .parent_local_24 = parent_local_24,
            .parent_d6       = parent_d6,
        },
        &child_return);

    if (child_return.score.retry_generation) {
        /* Glasgow kann die selektive Zugerzeugung erneut anstoßen. */
        rom_search_retry_root_candidate(..., &next);
        child_position = next.child_position;
        continue;
    }

    if (child_return.finish.outcome ==
        GLASGOW_ROM_SEARCH_CANDIDATE_FINISH_LEAF) {
        /* Dieser Knoten ist abgeschlossen: Wert an den Vater zurückgeben. */
        *d0 = child_return.finish.local_4;
        *a0 = child_return.finish.local_6;
        return true;
    }

    /* Nächsten zugelassenen und priorisierten Zug holen und ausführen. */
    glasgow_rom_search_prepare_next_descend(..., &next);

    if (!next.child_ready) {
        *d0 = next.pop.local_4;
        *a0 = next.pop.local_6;
        return true;
    }

    child_position            = next.child_position;
    child_local_2             = next.descend.recurse_local_2;
    child_frame_0             = next.descend.recurse_d6;
    child_source              = next.descend.move.source;
    child_encoded_destination = next.descend.move.encoded_destination;
}
```

Der entscheidende Wertvergleich steckt in
`glasgow_rom_search_score_return()`:

```c
existing_score =
    ((uint16_t)ram[f076] << 5) + ram[f076 + 1];

candidate_score =
    ((uint16_t)(uint8_t)d3 << 5) + (uint8_t)d4;

if (existing_score >= candidate_score) {
    /* Der neue Zug verbessert die bisherige Schranke nicht. */
    cleanup_required = true;
} else {
    /* Neuer Bestwert; außerdem wird die Hauptvariante aktualisiert. */
    ram[f076]     = (uint8_t)d3;
    ram[f076 + 1] = (uint8_t)d4;
    update_principal_variation();
}
```
Parent - - By Jörg Oster Date 2026-07-31 14:43
Hallo Frank,

heißt das jetzt, dass du den Code speziell aufbereitet hast?
Weil der sieht so ja sehr strukturiert und gut verfolgbar aus.

Die Negamax-Funktion ist ja wirklich nur das äußerste Minimum.
Alles andere ist ohne Zusammenhang nicht wirklich aufschlussreich.

Wirst du den Code noch auf der entsprechenden Github-Seite reinstellen,
oder darfst du das nicht?
Falls nicht, auch nicht weiter tragisch. 

Gruß, Jörg.
Parent - - By Frank Brenner Date 2026-07-31 17:32
Keine Sourcen vorhanden Peter. Nur ein kurzes readme.
Parent - By Peter Martan Date 2026-07-31 17:57
Ach so, hab"s nicht runtergeladen.
Parent - - By Frank Brenner Date 2026-07-31 17:30 Upvotes 1
Hallo Jörg,

die erste Funktion negamax ist nicht aus dem Schachcomputer, sondern ein Lehrbuch-Beispiel von der KI. Das ist normaler Code und den kann jeder lesen wie einen Zeitungsartikel.

Weiter unten das ist ein vereinfachter und gekürzter Abschnitt  aus dem C Progamm für den Schach III, ein Teil vom negamax.

Insgesamt sind das hier auch wieder 20.000 Zeilen Code.

Der Code ist schwer zu verstehen, weil er nicht in eine anschauliche, schachlich erzählende C-Struktur übertragen wurde.
Teilweise wurde der Code semantisch von der 68000-Maschine gelöst. Die äußere Engine-Infrastruktur ist modernes C, während der Kern der Suche absichtlich noch eng an Register, RAM-Zustände und Kontrollfluss des ROMs angelehnt ist, damit seine exakte Funktionsweise überprüfbar bleibt.

Dieses Projekt ist tatsächlich ein sehr anspruchsvoller Benchmark für zukünftige KI-Systeme. Vielleicht schafft die KI das in 2 oder in 3 Jahren adhoc sofort in didaktisches C umzuwandeln, so ähnlcih wie da oben negamax.

Was die Veröffentlichung angeht, möchte ich es erst einmal minimalistisch halten.

Viele Grüße
Frank
Parent - By Jörg Oster Date 2026-07-31 18:21
Alles klar.
Danke für deine Erklärungen.

Gruß, Jörg.
Up Topic Hauptforen / CSS-Forum / Schach III (Mephisto III S Glasgow) und Schach 5 (MM V) erschienen

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill