lean-path: Angefangenes liegt auf dem Pfad (SPEC §9, D61)
Eine Zugabe (`+`) fällt aus dem günstigsten Pfad — außer sie ist realisiert und noch nicht erledigt (`[~]`/`[/]`). Angefangene Arbeit ist die offene Front, und seit D46 zeigt der Pfad genau die; bisher führte der Von-Station-zu-Station-Knopf nie dorthin, wo gearbeitet wird. Erledigte Zugaben bleiben draußen: dort ist nichts mehr zu tun, und was darunter offen blieb, ist mit ihnen zusammen entbehrlich (§3). Dabei die fehlende Hälfte von D46 gefunden: SPEC §9 sagt seit jeher „eine bereits realisierte Alternative gewinnt", umgesetzt war das aber nur über die Kosten — und die sind allein bei `[x]`/`[^]` null. Ein `[~]`-Zweig verlor damit gegen eine unangetastete billigere, obwohl die XOR-Regel gerade ihn als die realisierte Alternative ausweist. `chosenPool()` schränkt die Wahlmenge auf die realisierten ein; unter mehreren entscheiden wieder die Kosten. Nebengewinn: eine entschiedene Gruppe ist keine freie Variable mehr und verkleinert die Suche (D42). 10 neue Tests; Gegenprobe geführt (jede Regel einzeln herausgenommen lässt genau die nach ihr benannten Zusicherungen fallen). Der mitgelieferte Plan ändert sich nicht — er hat keine angefangene Zugabe. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3018db9f61
commit
36b78efa53
@@ -80,10 +80,22 @@ describe('Auswahl — die getroffene Wahl gewinnt', () => {
|
||||
| [ ] Billig (XS)`)).toEqual(['Gemacht', 'Wahl']);
|
||||
});
|
||||
|
||||
it('eine erst angefangene Alternative gewinnt dadurch NICHT', () => {
|
||||
/* Bis D61 gewann hier „Billig": Die Wahl lief allein über die Kosten, und
|
||||
die sind nur bei `[x]`/`[^]` null. Angefangenes kostet voll und verlor
|
||||
damit — obwohl SPEC §9 die Regel schon so formuliert hatte. */
|
||||
it('gilt auch für eine erst angefangene Alternative', () => {
|
||||
expect(cheapLabels(`[ ] Wahl (XS)
|
||||
| [~] Angefangen (L)
|
||||
| [ ] Billig (XS)`)).toEqual(['Billig', 'Wahl']);
|
||||
| [ ] Billig (XS)`)).toEqual(['Angefangen', 'Wahl']);
|
||||
});
|
||||
|
||||
/* Die unangetastete ist hier die billigste von allen — gewählt wird
|
||||
trotzdem unter den realisierten, und dort entscheiden die Kosten. */
|
||||
it('lässt unter mehreren realisierten wieder die Kosten entscheiden', () => {
|
||||
expect(cheapLabels(`[ ] Wahl (XS)
|
||||
| [~] Teuer (L)
|
||||
| [/] Günstig (S)
|
||||
| [ ] Unangetastet (XS)`)).toEqual(['Günstig', 'Wahl']);
|
||||
});
|
||||
|
||||
it('gilt auch in einer XOR-Gruppe', () => {
|
||||
|
||||
Reference in New Issue
Block a user