Ultima

Discussion of chess software programming and technical issues.

Moderator: Ras

User avatar
hgm
Posts: 28405
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Ultima

Post by hgm »

I wanted to start a new thread for the Ultima stuff, as it doesn't really have to do anything with Grand Chess.

I tried to have Nebiyu self-play KPPPPK, but I get very pathological behavior. Mate scores pop up all the time, and then disappear in the next iteration, usually to be replaced by a 0 score. The side with the bare King tends to think excessively long, (like 30 sec for one move in 40/1) and still hardly reaches any depth (about 8). Sometimes the depth even drops to 3, when time pressure forces it to hurry up.

Often it cannot find the mate, and it ends in a rep-draw. When I tried KPPPK (deleting g1), it even sacrficed a Pincer for no reason. I could mate it easily by hand, though, as it voluntarily hurries its King into the corner. It surely looks like something is very badly wrong there.

[d]4k3/8/8/8/8/8/8/2PPKPP1 w

Example:

Code: Select all

[Event "Computer Chess Game"]
[Site "CHESS_LAPTOP"]
[Date "2011.03.21"]
[Round "-"]
[White "hgm"]
[Black "NebiyuAlien_1.2"]
[Result "1-0"]
[TimeControl "40/60"]
[Variant "alien"]
[FEN "4k3/8/8/8/8/8/8/2PPKPP1 w - - 0 1"]
[SetUp "1"]

{--------------
. . . . k . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . P P K P P .
white to play
--------------}
1. Ke2 Kf7 {-299.83/8 29} 2. Ke3 Kg8 {+0.00/7 0.9} 3. Ke4 Kh7 {+0.00/7 0.9}
4. Kf5 Kg8 {+0.00/8 10} 5. Kf6 Kh7 {-299.89/7 9} 6. Pc8 Kg8 {+0.00/7 1.1}
7. Ph1 Kh8 {-299.93/7 0.3} 8. Ph6 Kg8 9. Pe1 Kf8 {-299.93/7 0.5} 10. Pe7
Ke8 {-299.91/8 0.3} 11. Pg1 Kf8 12. Pg2 Ke8 {-299.93/6 0.3} 13. Pg8
{White wins} 1-0
It doesn't see the (stale)mate in one coming.
Daniel Shawul
Posts: 4186
Joined: Tue Mar 14, 2006 11:34 am
Location: Ethiopia

Re: Ultima

Post by Daniel Shawul »

I suspect it is due to either Null moving whenever Or not generating all moves in qsearch. I rembeber now I do not check to see if there are some pieces for the moving side before doing null move. I am far from my code right now so I will look into it this evening to see if that is the case.
Daniel Shawul
Posts: 4186
Joined: Tue Mar 14, 2006 11:34 am
Location: Ethiopia

Re: Ultima

Post by Daniel Shawul »

It was actually none of them. It was a simple mistake I made while migrating chess specific stuff for the alien version. In qsearch if we don't have any move it was considering it as a loss even if we are not in check !
I hope this bugs are not interrupting your research too much.

Here https://sites.google.com/site/dshawul/N ... ects=0&d=1

Code: Select all

force
setboard 4k3/8/8/8/8/8/8/2PPKPP1 w - - 0 1
d

            a b c d e f g h
            * * * * * * * * * * * * * * * * * * * * * * * *
            * * * * * * * * * * * * * * * * * * * * * * * *
            * * * * * * * * * * * * * * * * * * * * * * * *
            * * * * * * * * * * * * * * * * * * * * * * * *
          8 . . . . k . . . * * * * * * * * * * * * * * * * 8
          7 . . . . . . . . * * * * * * * * * * * * * * * * 7
          6 . . . . . . . . * * * * * * * * * * * * * * * * 6
          5 . . . . . . . . * * * * * * * * * * * * * * * * 5
          4 . . . . . . . . * * * * * * * * * * * * * * * * 4
          3 . . . . . . . . * * * * * * * * * * * * * * * * 3
          2 . . . . . . . . * * * * * * * * * * * * * * * * 2
          1 . . P P K P P . * * * * * * * * * * * * * * * * 1
            * * * * * * * * * * * * * * * * * * * * * * * *
            * * * * * * * * * * * * * * * * * * * * * * * *
            * * * * * * * * * * * * * * * * * * * * * * * *
            * * * * * * * * * * * * * * * * * * * * * * * *
            a b c d e f g h

        4k3/8/8/8/8/8/8/2PPKPP1 w - - 0 1

analyze
2 570 0 179  g1g4 e8d7
3 595 1 335  g1g4 e8d7 d1d4
4 590 1 1119  g1g4 e8d7 d1d4 d7e6
5 590 1 2315  g1g4 e8e7 c1c5 e7d6 c5c4
5 590 1 3563  g1g4 e8e7 c1c5 e7d6 c5c4
6 610 1 5130  g1g4 e8f7 d1d4 f7e6 c1c4 e6e5
6 610 3 9104  g1g4 e8f7 d1d4 f7e6 c1c4 e6e5
7 610 3 10562  g1g4 e8f7 d1d4 f7e6 c1c2 e6d5 g4e4
7 610 4 14504  g1g4 e8f7 d1d4 f7e6 c1c2 e6d5 g4e4
8 610 4 16729  g1g4 e8f7 d1d4 f7e6 c1c2 e6d5 g4e4 d5e5
8 615 7 28437  c1c3 e8d7 g1g4 d7d6 d1d4 d6d5 g4e4 d5e5
8 615 9 36038  c1c3 e8d7 g1g4 d7d6 d1d4 d6d5 g4e4 d5e5
9 630 9 44644  c1c3 e8d7 g1g4 d7d6 d1d4 d6e6 f1f2 e6d5 g4e4
9 630 14 75499  c1c3 e8d7 g1g4 d7d6 d1d4 d6e6 f1f2 e6d5 g4e4
10 630 15 84439  c1c3 e8d7 g1g4 d7d6 d1d4 d6e6 f1f2 e6d5 g4e4 d5e5
10 630 25 150863  c1c3 e8d7 g1g4 d7d6 d1d4 d6e6 f1f2 e6d5 g4e4 d5e5
11 635 28 171730  c1c3 e8d7 g1g4 d7d6 d1d4 d6e6 f1f2 e6d6 f2f4 d6d5 f4e4
11 635 46 301635  c1c3 e8d7 g1g4 d7d6 d1d4 d6e6 f1f2 e6d6 f2f4 d6d5 f4e4
12 645 64 417053  c1c3 e8d7 g1g4 d7d6 d1d4 d6e6 f1f2 e6d6 g4e4 d6c5 e1d2 c5d5
12 645 114 709433  c1c3 e8d7 g1g4 d7d6 d1d4 d6e6 f1f2 e6d6 g4e4 d6c5 e1d2 c5d5
13 650 131 819090  c1c3 e8d7 g1g4 d7d6 d1d4 d6d7 g4e4 d7e6 f1f4 e6e5 f4f2 e5d6 e
1d2
13 650 220 1433683  c1c3 e8d7 g1g4 d7d6 d1d4 d6d7 g4e4 d7e6 f1f4 e6e5 f4f2 e5d6
e1d2
14 650 265 1714722  c1c3 e8d7 g1g4 d7d6 d1d4 d6d5 g4e4 d5d6 e1d2 d6e5 f1f2 e5f4
c3c4 f4e5
14 650 476 3117543  c1c3 e8d7 g1g4 d7d6 d1d4 d6d5 g4e4 d5d6 e1d2 d6e5 f1f2 e5f4
c3c4 f4e5
exit
nodes = 3289407 <27 qnodes> time = 5953ms nps = 552562
splits = 0 badsplits = 0
Daniel Shawul
Posts: 4186
Joined: Tue Mar 14, 2006 11:34 am
Location: Ethiopia

Re: Ultima

Post by Daniel Shawul »

Hmm .. Is KppppK a draw ?

Also how is the fifty move rule applied to Ultima ? It seems the pawns can make simple moves to zero the fifty move counters, and also to avoid
repetitions.
You can also see in the game it manages to center all its pawns and king, after that it felt it has achived everything there is. That is also what it does for Orthodox KRK but since that game is easy to finish off , it can see mates while the king is at its center.

Code: Select all

[Event "Computer Chess Game"]
[Site "CEE-3624-AB52"]
[Date "2011.03.21"]
[Round "-"]
[White "NebiyuAlien_1.2"]
[Black "NebiyuAlien_1.2"]
[Result "1/2-1/2"]
[TimeControl "40/120"]
[Variant "alien"]
[FEN "4k3/8/8/8/8/8/8/2PPKPP1 w - - 0 1"]
[SetUp "1"]

{--------------
. . . . k . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . P P K P P .
white to play
--------------}
1. Pc3 {+6.55/13} Kf7 {-6.60/15 2.4} 2. Pg4 {+6.55/13 2.8} Kf6
{-6.65/14 2.8} 3. Pdd4 {+6.60/13 2.7} Ke5 {-6.65/16 2.1} 4. Pe4
{+6.65/14 2.4} Kd5 {-6.65/15 2.9} 5. Kd2 {+6.70/14 2.5} Kd6 {-6.70/15 2.9}
6. Pf4 {+6.70/13 2.9} Ke5 {-6.70/16 3} 7. Ke3 {+6.70/15 2.9} Ke6
{-6.70/15 2.9} 8. Pc6 {+6.70/14 3} Kd7 {-6.70/16 2.9} 9. Pc4 {+6.70/14 2.2}
Kd6 {-6.70/16 2.4} 10. Pf6 {+6.70/14 3} Ke7 {-6.75/16 2.7} 11. Pff5
{+6.75/14 2.5} Ke6 {-6.75/17 2.4} 12. Kf4 {+6.80/15 3} Kd5 {-6.75/16 2.9}
13. Pc3 {+6.80/15 3} Kc5 {-6.80/16 2.4} 14. Ke5 {+6.80/14 2.9} Kc4
{-6.80/16 3} 15. Pf3 {+6.80/14 2.7} Kd3 {-6.80/15 3} 16. Pdd5 {+6.80/14 3}
Kc4 {-6.80/15 3} 17. Pd4 {+6.80/13 3} Kd3 {-6.80/15 3} 18. Pf2 {+6.80/14 3}
Kc4 {-6.80/15 2.6} 19. Pf4 {+6.80/13 3} Kd3 {-6.80/15 2.4} 20. Pe4
{+6.80/13 2.5} Kc4 {-6.80/15 3} 21. Pf4 {+6.80/13 2.4} Kc3 {-6.80/15 3} 22.
Pd6 {+6.80/14 3} Kc4 {-6.80/15 2.8} 23. Pdd5 {+6.80/13 3} Kd3 {-6.80/15 3}
24. Pf2 {+6.80/14 3} Kc4 {-6.80/15 2.3} 25. Pf3 {+6.80/13 3} Kd3
{-6.80/15 3} 26. Pf2 {+6.80/13 2.5} Kc4 {-6.80/15 3} 27. Pff5 {+6.80/13 3}
Kd3 {-6.80/15 3} 28. Pf2 {+6.80/13 2.5} Kc4 {-6.80/15 3} 29. Pf3
{+6.80/13 2.9} Kd3 {-6.80/15 3} 30. Pf2 {+6.80/13 2.4} Kc4 {-6.80/15 2.5}
31. Pf3 {+6.80/13 3} Kd3 {-6.80/15 3} 32. Pf2 {+6.80/14 3} Kc4 {-6.80/15 3}
33. Pf6 {+6.80/13 3} Kd3 {-6.80/15 3} 34. Pf2 {+6.80/14 3} Kc4 {-6.80/16 3}
35. Pf6 {+6.80/13 3} Kd3 {-6.80/15 3} 36. Pf2 {+6.80/14 4} Kc4 {-6.80/16 3}
37. Pf6 {+6.80/13 3} Kd3 {-6.80/15 3} 38. Pf2 {+6.80/14 3} Kc4
{-6.80/16 2.7} 39. Pf4 {+6.80/14 4} Kd3 {-6.80/16 4} 40. Pf2 {+6.80/15 5}
Kc4 {-6.80/16 4} 41. Pf6 {+6.80/13 2.9} Kd3 {-6.80/15 2.4} 42. Pf2
{+6.80/13 2.8} Kc4 {-6.80/15 2.9} 43. Pf4 {+6.80/13 2.6} Kd3 {-6.80/15 2.9}
44. Pf2 {+6.80/14 2.9} Kc4 {-6.80/15 2.9} 45. Pf6 {+6.80/13 2.9} Kd3
{-6.80/15 2.4} 46. Pf2 {+6.80/13 2.8} Kc4 {-6.80/15 3} 47. Pf4
{+6.80/13 2.8} Kd3 {-6.80/15 3} 48. Pf2 {+6.80/14 2.9}
{User adjudication} 1/2-1/2

Daniel Shawul
Posts: 4186
Joined: Tue Mar 14, 2006 11:34 am
Location: Ethiopia

Re: Ultima

Post by Daniel Shawul »

Null moving has also an effect. In KRK it shows very big fluctuations from iteration to iteration. If I turn null move off , it is a smooth ride. So you might want to turn null move off from the winboard options menu, in some of the endgames. Not generating all moves when in check in qsearch probably contributes to unstablilty as well
User avatar
hgm
Posts: 28405
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Ultima

Post by hgm »

Daniel Shawul wrote:Hmm .. Is KppppK a draw ?
No idea, this is what I wanted to establish. I'll have another go with the new version tomorrow.

As for 50-move: I guess the counter should only reset on captures, as there are no true Pawn-like pieces in Ultima. In this respect the Lance was a poor choice for the Pincers, as WinBoard does expect it to be a Pawn-like piece. This means it resets the 50-move counter when you move them, and even worse, pops up a promotion menu when you move them to last rank! I guess we better start using another piece type for this; with the Ultima font it does not really matter what piece types you pick;legality testing must be off anyway. Maybe we should pick the built-in Cobra piece ('S' in the fairy pieceToCharTable).
Daniel Shawul
Posts: 4186
Joined: Tue Mar 14, 2006 11:34 am
Location: Ethiopia

Re: Ultima

Post by Daniel Shawul »

I modified the fifty move counter rule so that pawns that never
promote don't affect it. This makes sense since such kind of pawns
act like standard pieces anyway. Also I couldn't find the exact fifty move rules for ultima
anywhere. I don't know if a slight modifcation would also be required for shartanj family
games where promotion is to a worthless ferz.
Makruk has a complex specification for 50 move rules. Do you even bother to implement that ?

Code: Select all


    * If there are two rooks left: 8 moves
    * If there is one rook left: 16 moves
    * If there are no rooks left, but there are two bishops: 22 moves
    * If there are no rooks left, but there is one bishop: 44 moves
    * If there are no rooks or bishops left, but there are two knights: 32 moves
    * If there are no rooks or bishops left, but there is one knight: 64 moves
    * If there are no rooks, bishops, or knights, but queens: 64 moves

Other changes are "allow_king_capture" which significantly increases nps but becomes
blind to checks and stalemates. I still need to implemenet the stalemate trick.

And use_qsearch_evasion to generate all moves when being in check in the qsearch. This
results in decrease in nps.

Both can be turned on from options dialogue box.

Here is a game between "allow king capture" and the other one. Nps is usually 3x larger and 3 plies deeper as well. Total domination by the former. And I also didn't see tree explosions when king captures are allowed. At the root , those moves which allow king to be captured should never be played, since they will have very bad scores. But at the end of the game they will, allowing the king to be captured. So I have added adjudication of this games as soon as that occurs. Earlier I had funny games with both kings gone. Anyway I strongly believe now for a 'general' engine allowing king capture is far better both regarding ease of programming and efficiency as well. All the bugs you discovered so far are from the attacks() function which never gets called in allow_king_catpure mode.

Code: Select all

[Event "Computer Chess Game"]
[Site "CEE-3624-AB52"]
[Date "2011.03.21"]
[Round "-"]
[White "NebiyuAlien_1.2"]
[Black "NebiyuAlien_1.2"]
[Result "1-0"]
[TimeControl "40/120"]
[Variant "alien"]
[FEN "dlcwkcl1/p2ppp1p/8/Ppp1i1p1/2PL1P2/8/1P1PP1PP/ILCKWC1D w - c6 0 1"]
[SetUp "1"]

{--------------
d l c w k c l .
p . . p p p . p
. . . . . . . .
P p p . i . p .
. . P L . P . .
. . . . . . . .
. P . P P . P P
I L C K W C . D
white to play
--------------}
1. Pcc4 {+0.15/10} Pgg5 {-0.05/11 2.3} 2. Pff4 {+0.00/9 2.9} Pbb5
{+0.10/12 2.7} 3. Ld4 {+0.10/7 2.9} Ie5 {+0.15/11 2.2} 4. Pa5 {-0.15/9 2.5}
Pcc5 {+0.30/12 2.9} 5. Pdd3 {-0.40/10 7} Pc7 {+2.50/13 2.9} 6. Ph6
{-1.70/10 2.7} Pgh5 {+2.70/10 2.5} 7. Dh4 {-2.10/9 6} Lg5 {+3.00/9 2.6} 8.
Dh3 {-2.60/7 2.7} Cg4 {+2.85/13 2.9} 9. Wg3 {-2.80/11 2.7} Lf5 {+3.95/12 3}
10. Wh4 {-4.35/10 2.6} Cg5 {+4.30/10 2.3} 11. We1 {-4.45/9 2.2} Wd5
{+4.55/11 3} 12. Wb4 {-4.50/10 2.7} Wd6 {+4.45/10 2.4} 13. Pdc3
{-4.50/8 2.7} Lg4 {+4.70/10 3} 14. Ld3 {-4.90/8 5} Pbb6 {+5.15/9 4} 15. Ia4
{-5.30/8 2.6} Pc6 {+5.10/9 4} 16. Wb5 {-5.00/8 2.7} Ic5 {+5.30/9 2.2} 17.
Df3 {-5.20/8 2.5} If2 {+6.05/8 2.7} 18. Ld4 {-6.05/7 2.2} Lg1
{+6.25/10 2.5} 19. Ke1 {-6.00/8 2.2} Cd5 {+5.35/10 4} 20. Ccd2 {-5.65/10 5}
Pa6 {+6.00/11 2.9} 21. Ib4 {-6.05/10 2.5} Lb7 {+6.00/10 3} 22. Pfg4
{-5.60/8 2.3} Ph4 {+6.15/9 2.7} 23. Pg6 {-6.20/8 2.6} Pg4 {+6.30/10 2.9}
24. Pb3 {-6.20/9 4} Pg3 {+6.55/11 3} 25. Lc5 {-6.65/10 3} Ch5
{+7.60/11 2.3} 26. Ph4 {-7.10/9 3} Ph6 {+8.20/11 2.4} 27. Ph2 {-6.40/9 1.9}
Pg2 {+7.00/11 3} 28. Wa4 {-6.40/10 2.5} Pff6 {+7.35/11 3} 29. Cd4
{-6.70/8 2.6} Wg3 {+9.00/13 3} 30. Cg4 {-8.00/9 2.3} Pg6 {+9.05/12 3} 31.
If4 {-8.40/10 2.6} Lb1 {+9.25/10 2.3} 32. Wc6 {-9.10/9 4} Db8 {+10.60/11 3}
33. Pb5 {-11.75/10 2.5} Lb7 {+13.85/11 3} 34. Cd7 {-11.05/11 2.3}

User avatar
Evert
Posts: 2929
Joined: Sat Jan 22, 2011 12:42 am
Location: NL

Re: Ultima

Post by Evert »

Daniel Shawul wrote:I modified the fifty move counter rule so that pawns that never
promote don't affect it. This makes sense since such kind of pawns
act like standard pieces anyway.
In Sjaak, I reset the 50 move counter after an "irreversible" move, which is either a capture, promotion or move by a piece that can't return to the square it came from (which is a complicated way to avoid having to include specific knowedge about "pawns" in Sjaak).
That misses out castling, by the way, which I don't think is a big problem in practice.
I don't know if a slight modifcation would also be required for shartanj family
games where promotion is to a worthless ferz.
I think not. Why would it?
Makruk has a complex specification for 50 move rules. Do you even bother to implement that ?
I didn't bother, personally. Too complicated to work into a general set of heuristics.
If I ever want to be serious about doing Makruk properly I'll look into it, at the moment it's not high up on my list.
Daniel Shawul
Posts: 4186
Joined: Tue Mar 14, 2006 11:34 am
Location: Ethiopia

Re: Ultima

Post by Daniel Shawul »

In Sjaak, I reset the 50 move counter after an "irreversible" move, which is either a capture, promotion or move by a piece that can't return to the square it came from (which is a complicated way to avoid having to include specific knowedge about "pawns" in Sjaak).
That misses out castling, by the way, which I don't think is a big problem in practice.
I think that promotion & pawns that move only forward are tied together. You don't have to test for the later if pawns can promote. The 50 move rule is there to ensure progress towards
a win. If pawns don't promote then then their placement is dictated like the rest of the pieces.
Infact in one version of Jetan chess, they don't promote and also don't even come back ! So once they reach
the 8th rank they are out. So pawns have to be pushed cautiously since it is -100cp once they reach 8th rank.
I think not. Why would it?
For shatranj family games, promotion to ferz helps but not by much. Why I brought up
the Makruk rules is to show the dependece of the 50 counter to material value. If you only
get a lower piece value ferz Or some times loose it completely as in jetan, then there is no
point to increment the 50 move counter. Btw this is not just a modification to respect the rules,
rather to help the engine win simple endgames. For my bitbases with WDL score, I implemented such
heurestics to help it win most of difficult ones with combined eval and search. In the upper half of the
tree no cutoffs were allowed. Below which eval is called and modified on how much progress has been
done so far. It worked very well for me and was the best thing I liked about my bitbases.
User avatar
hgm
Posts: 28405
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Ultima

Post by hgm »

OK, now the behavor is no longer pathologic: it deepens rapidly and with a smooth score. Still it does not seem very clever: it was drawing KPPPPK in self-play, as you noticed, but when I play the KPPPP side by hand, I can nail it. And I did not even have the feeling I was playing it very well! Admittedly, it was only set to 40/1, while I took unlimited time, but still:

Code: Select all

[Event "Computer Chess Game"]
[Site "CHESS_LAPTOP"]
[Date "2011.03.22"]
[Round "-"]
[White "hgm"]
[Black "NebiyuAlien_1.2"]
[Result "1-0"]
[TimeControl "40/60"]
[Variant "alien"]
[FEN "4k3/8/8/8/8/8/8/1PPKPP2 w - - 0 1"]
[SetUp "1"]

{--------------
. . . . k . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. P P K P P . .
white to play
--------------}
1. Kd2 Kd7 {-6.50/12 1.4} 2. Kd3 Kd6 {-6.55/11 1.4} 3. Kd4 Ke7
{-6.50/11 1.5} 4. Ke5 Kd7 {-6.60/13 1.4} 5. e1d1 Kc6 {-6.65/13 1.5} 6. d1d5
Kb6 {-6.65/12 1.5} 7. c1c5 Kb5 {-6.75/13 1.2} 8. Kd4 Kc6 {-6.80/12 1.5} 9.
f1f7 Kd7 {-6.80/13 1.5} 10. b1b7 Ke6 {-6.80/14 1.4} 11. f7h7 Kf5
{-6.75/12 1.5} 12. d5e5 Kf4 {-6.75/12 1.5} 13. c5c3 Kf5 {-6.75/11 1.5} 14.
c3g3 Kf4 {-6.75/12 1.5} 15. g3g8 Kg5 {-6.65/12 1.5} 16. Ke4 Kg6
{-6.75/12 1.5} 17. h7h1 Kf6 {-6.60/10 1.2} 18. g8e8 Kf7 {-6.70/13 1.4} 19.
e8a8 Ke8 {-6.50/11 1.3} 20. e5e6 Kd7 {-6.45/11 1.5} 21. Kd5 Ke8
{-6.60/11 1.4} 22. e6d6 Kd8 {-6.65/11 1.5} 23. a8b8 Ke8 {-6.65/11 1.4} 24.
Ke6 Kf8 {-6.65/11 1.5} 25. d6d5 Kg7 {-6.65/11 1.3} 26. d5g5 Kh6
{-6.50/11 1.6} 27. Kf6 Kh7 {-6.70/11 1.5} 28. h1h5 Kg8 {-299.91/14 1.4} 29.
g5e5 Kf8 {-299.93/13 3} 30. b8c8
{Black resigns} 1-0
(WinBoard currently seems to have great trouble reading back its own saved games; Pawn moves are not properly disambiguated on saving, and even when I disambiguate by hand, it does not understand them. So I had to change them all by hand to long algebraic. But what I posted here should now be readable by WB.)

Are you sure you give enough Piece-Square points for driving a bare King into the corner? In Spartacus I switch to another PST for the bare King (when I detect in the root it is bare), with greatly exagerated bonus for centralization. This helps in mating with many weak pieces, where you run the risk of getting trapped into a local eval maximum by centralizing your many weak pieces + King, rather than using them to drive the single King into the corner (for which you would have to leave the center with your own pieces).