forked from dds-bridge/dds
-
Notifications
You must be signed in to change notification settings - Fork 1
/
ChangeLog
700 lines (486 loc) · 22.7 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
Release Notes DDS 2.9.0
-----------------------
- Fixed crashes in certain multi-threading types
- Added GetDDSInfo to Exports.def (thanks to Paul Barden)
- Fixed casting problems with some compilers in ThreadMgr
- Updated documentation
Release Notes DDS 2.9.0 beta
----------------------------
Included code for a number of multi-threading systems:
- Windows API (was already there)
- OpenMP (was already there)
- GCD (new, intended for Mac, not really tested)
- Boost (new, works on many systems, but you may have to install it)
- STL (new, should work on most systems with a modern compiler)
- TBB (new, not so broadly available, but portable in principle)
- STLIMPL (new, experimental)
- PPLIMPL (new, experimental)
Tested combinations include:
- Visual C++ with Windows API, OpenMP, Boost, STL
- Cygwin g++ with Windows API, OpenMP, Boost, STL
- mingw g++ with OpenMP, Boost, STL
- Linux g++ with OpenMP, Boost, STL
- MacOS clang with GCD, Boost, STL (static and shared library)
- MacOS GNU g++ with OpenMP, Boost, STL
The number of threads is now unlimited in principle, although the
DLL will not let you go beyond the number of processor cores.
Enabled the transposition-table code for both the large and the small
versions in the same DLL. Therefore there is only a single DLL
distributed now for both. The SMALL_MEMORY compile switch is gone.
Enabled the DLL to pick the best combination of large and small
transposition tables for a given resource set-up consisting of
available memory and number of threads. Yes, the DLL can choose to
run 4 large and 2 small threads, for example.
Expanded the DDSInfo systemString (which now needs 1024 chars as
stated in the new dll.h).
MAXNOOFTABLES was increased from 32 to 40.
Fixed a reliance that char == signed char (not the case on Android,
which caused a bug).
Dealt with the reported issues on the GitHub issues list.
Lots of clean-up of internal code. The code also looks more like C++.
Release Notes DDS 2.8.4
-----------------------
Added a lower-memory DLL version with a compile flag. This is about
11-14% slower, but uses a lot less memory. For example, for a
single thread on one PC, the memory usage was 24 MB rather than 110 MB.
For 12 threads, the numbers were 89 MB rather than 1.1 GB.
Added TDC 32-bit and 64-bit Makefiles contributed by Sergio Polini.
Made the SolveAllChunks functions aliases to SolveAllBoards.
Release Notes DDS 2.8.3
-----------------------
Fixed bug in Scheduler that caused a crash in case 200 very similar
hands were solved in one invocation. If you didn't experience
crashes, you don't have to upgrade for this bug fix.
Generalized the AnalysePlay functions. Previously they required
a complete 13-trick hand with no cards played in a partial trick.
Now they work for any number of remaining tricks and for partial
tricks as well.
Included Pierre Cossard's code for using GDC multi-threading with
Apple's LLVM compiler on the Mac.
Added a Makefile for compiling a shared library on the Mac.
Added a GetDDSInfo interface function that can be used to ask the
DLL how it was compiled and how many threads it is using.
Modified the documentation names not to include the version number
in the file names (easier to maintain).
Updated the documentation to fix an error (the playTracePBN
structure uses an array of chars, not an array of ints; this was
correct in dll.h). Also described pass as a valid par score.
Release Notes DDS 2.8.2
-----------------------
Fixed bug in the calculation of par score contracts (par score
values were OK) in certain rare cases.
Fixed a typo in in the CalcAllTables.cpp example in the examples
directory.
Release Notes DDS 2.8.1
-----------------------
Added Makefile for shared library (.d) under Linux. Contributed
by Foppe Hemminga and Paul Hide.
Added Makefile for Visual C++ using Windows command-line tools,
so the Windows make and no "mv" etc. Contributed by Philippe Capron.
Fixed bug in scheduler that caused some hands to be considered
identical when they aren't. Alexis Maugat found the bug and
contributed a simple test case.
Fixed bug in initialization that affected some cases when initial
moves are given. Alexis Maugat found the bug and contributed a
simple test case.
Added in Foppe Hemminga's version of the documentation, written
entirely in .md markup format (looks great on Github) and capable
of being converted into html and pdf.
Release Notes DDS 2.8.0
-----------------------
2.8.0 is about 15% faster than 2.7.0.
The move generation code has been re-implemented and is much faster.
The CalcAllTables function now allows solving a larger number of
DD tables in parallel (32 rather than 10).
A scheduler module rearranges hands within a batch of hands to
be solved. This has two purposes:
1. It detects duplicate hands and does not solve the same hand
twice. So it a more general version of the "chunk" mechanism
which requires the user to construct a batch in a specific way.
2. It attempts to solve hands first which are likely to be
difficult to solve. When the hands are scheduled onto multiple
threads, this reduces the average time wasted in the end while
one thread is finishing up its last hand.
The code for initialization and the SolveBoard interface functions
have been restructured.
Two bugs in the memory management of the transposition tables
have been fixed. Thanks for Brian Dickens for pointing them out.
Brian also helped to make the code compile with fewer warnings
at high warning levels.
The directory structure of the distribution has been streamlined.
The old algorithm document has been updated, particularly in
the transposition table section.
An ErrorMessage() function has been added to the interface.
The old DDD program has been updated to work directly with the
"modern" DDS; DDS had not been touched for many years.
A more modern test program has been added, testing the main
modes of the current DDS.
The code has been cleaned up to compile with a very high level
of compiler warnings on Microsoft Visual Studio, minGW, Cygwin
g++, Ubuntu (and probably other Linux flavors with OpenMP),
Mac OS with clang (single-threaded) and with g++ (OpenMP).
There are Makefiles for each system and each program.
Soren has become a co-author as of this version.
Release Notes DDS 2.7.0
-----------------------
The transposition table solution has been replaced by a faster one.
The new solution is 8-15% faster. Many thanks to Soren Hein for
writing this part of the code. Soren has also improved the code
at numerous places.
Additional Par functions have been added to ease the use of a
DDS user specific format.
Release Notes DDS 2.6.0
-----------------------
2.6.0 is 2% faster than 2.5.2.
The Par function has been corrected.
The DealerPar and the PlayAnalyser functions has been added,
written by Soren Hein. Soren Hein has contributed numerous
improvements.
Release Notes DDS 2.5.2
-----------------------
A bug in the par calculation has been fixed. The fault could
wrongly cause presentation of extra par contracts in cases were
the sides had different vulnerability.
Release Notes DDS 2.5.1
-----------------------
The Windows DDS DLL now always uses the Windows API for implementing
the multithread functions (i.e. OpenMP is not used for Windows).
Release Notes DDS 2.5.0
-----------------------
Added function SolveAllChunks.
Release Notes DDS 2.4.3
-----------------------
Problem pointed out by John Goacher with missing par contract
has been corrected.
Tuned code for increased performance, especially in function
MoveGen and in the WeightAlloc function.
Release Notes DDS 2.4.2
-----------------------
Fixing bugs in CalcAllTables, CalcAllTablesPBN and CalcPar.
Release Notes DDS 2.4.1
-----------------------
Updates of functions CalcAllTables and CalcAllTablesPBN for
improved performance.
Release Notes DDS 2.4.0
-----------------------
Fixed a bug in the calculation of par score contracts.
Added the new functions CalcAllTables and CalcAllTablesPBN.
Numerous fixes for better adaptation to Linux.
Cleaning the code to remove some warnings given at code
compilation.
For Windows users, adding readable version information of the
DDS DLL file.
Release Notes DDS 2.3.0
-----------------------
The main news is the support of calculation of par
scores / contracts.
The Mingw DLL now uses the Win API instead of OpenMP, so no
supporting DLL for pthreads is now needed.
Release Notes DDS 2.2.4
-----------------------
A newer port from GCC to Windows, the TDM-GCC 4.7.1 version is
used. It gives faster DLLs and only requires one supporting DLL,
which supports OpenMP.
Also, the move ordering has been slighly improved.
A total speed increase of 4% is achieved compared to 2.2.3.
Release Notes DDS 1.1.18
------------------------
The main news is that this release is licensed under
Apache 2.0 instead of GPL for the previous releases.
There is a slight change of the move ordering compared to 1.1.17.
Release Notes DDS 1.1.17
------------------------
A newer port from GCC to Windows, the TDM-GCC 4.7.1 version is
used. It gives faster DLLs and does not require any supporting DLLs.
Also, the move ordering has been slighly improved.
A total speed increase of 4% is achieved compared to 1.1.16.
Release Notes DDS 2.2.3
-----------------------
DDS 2.2.3 adds Mingw compiled DLLs and makes a number of code
improvements.
Maximum number of threads is increased to 16.
The 2.2.3 Mingw DLLs are about 5% faster than the 2.2.2 DLLs.
Release Notes DDS 1.1.16
------------------------
DDS 1.1.16 add Mingw compiled DLLs and makes a number of code
improvements.
The 1.1.16 Mingw DLLs are about 5% faster than the 1.1.15 DLLs.
Release Notes DDS 1.1.15
------------------------
The rel table missed initialization for absRank and relRank when
all cards in a suit are missing.
DDS 1.1.15 is about 7% faster than 1.1.14.
Release Notes DDS 2.2.2
-----------------------
DDS 2.2.2 is mainly a bug fix release.
1. An uninitialized variable used in move generation required that
the compiler initialized it by setting it to zero. This is true
for Visual C++ but might perhaps have caused a problem with some
other compiler.
2. The rel table missed initialization for absRank and relRank
when all cards in a suit are missing.
DDS 2.2.2 is slightly faster than 2.2.1, about 4%.
Release Notes DDS 1.1.14
------------------------
Bug fixed in using the Windows function to detect RAM memory size
that could cause DDS termination.
Release Notes DDS 2.2.1
-----------------------
Bug fixed in using the Windows function to detect RAM memory size
that could cause DDS termination.
Clarifying that DDS 2.2.1 is a 32-bit DLL not capable of using
more than 4 GB.
The maximum number of threads is 8.
Release Notes DDS 1.1.13
------------------------
DDS used a deficient function in Windows to detect RAM memory size,
which could cause too few threads to be allocated. DDS now uses a
correct Windows function to detect the RAM size.
1.1.13 is 5-10% faster than 1.1.12.
Release Notes DDS 2.2.0
-----------------------
A new callable function, SolveAllBoards, has been added.
Bug fixed:
1. DDS used a deficient function in Windows to detect RAM memory
size, which could cause too few threads to be allocated. DDS now
uses a correct Windows function to detect the RAM size.
2. DDS failed to detect PBN text coded card distributions with
less than 52 cards.
3. DDS hanged when a faulty card distribution was provided in
the CalcDDtable call. This fault was not present in the openMP
alternative, though.
2.2.0 is 10-15% faster than 2.1.2.
Release Notes DDS 1.1.12
------------------------
Two new callable functions have been added:
SolveBoardPBN and CalcDDtablePBN.
They both accept PBN format for the remaining cards in the
deal information instead of the bit codes.
Code improvements have been done concerning quick tricks
detection and move ordering.
1.1.12 is about 15-20% faster than 1.1.11.
Release Notes DDS 2.1.2
-----------------------
Two new callable functions have been added:
SolveBoardPBN and CalcDDtablePBN.
They both accept PBN format for the remaining cards in the
deal information instead of the bit codes.
Code improvements have been done concerning quick tricks
detection and move ordering.
2.1.2 is about 10% faster than 2.1.1.
Release Notes DDS 2.1.1
-----------------------
The maximum number of threads is now configurable depending on
the size of the physical memory. The configuration is either
done automatically by reading out the physical memory size by
the operating system, or by supplying parameter values in InitStart.
Release Notes DDS 2.1.0
-----------------------
Added OpenMP as multi-thread support for CalcDDtable when
compiling with gcc 4.4.0 or later.
Added a similarity deals test function for reuse of the
transposition table contents when the current deal is similar
to the previous deal.
Release Notes DDS 2.0.1
-----------------------
In 2.0.0, the contents of the transposition table could erronously
be reused when the previous position contained a different number
of cards. This was caused by an erroneous implementation of the
deal similarity test. This bug was fixed by removing the
similarity test.
The DDS version number is defined by a #define statement in dll.h.
Release Notes DDS 2.0.0
-----------------------
A bug was fixed.
SolveBoard is now thread-safe.
The SolveBoard parameter "mode" no longer needs to be set to 2.
DDS automatically detect situations when the transposition
table contents can be reused.
Used with a single thread, DDS 2.0.0 has about the same speed as
DDS 1.1.9. Used with 2 parallel threads, DDS 2.0.0 is twice as
fast as the single thread case.
A new function, CalcDDtable, has been added. CalcDDtable calls
SolveBoard using parallel threads. The number of parallel threads
is the same as the number of processor cores. CalcDDtable
calculates the double dummy values of the initial 52 cards
for all the 20 trump suit/leading hand combinations.
Release Notes DDS 1.1.9
-----------------------
1.1.9 is about 10-15% faster than 1.1.8.
Main improvements come from 1) and 2) below.
1. Much faster initialization of variable rel (struct type
relRanksType). Implementation done by Thomas Andrews.
2. Move generation: If the hand-to-play is trick leading hand,
the first positions in the move list now come each from a
different suit. In 1.1.8, the first positions were groups of
2 cards from each suit.
3. DismissX renamed to NextMove. A bug was corrected
in NextMove, increasing performance. (The bug did not give
incorrect result.) The bug was found by Joël Bradmetz.
4. The function CountOnes is replaced by a table look-up.
Implementation by Thomas Andrews.
5. The handStore variable is replaced by a macro. Based on
an implementation by Thomas Andrews.
6. The WinAdapt function is replaced by a table look-up.
7. A new table, highestRank, gives the highest rank from a
bitmap of ranks. Makes functions UpdateWinner, UpdateSecondBest
and QuickTricks slightly faster.
Release Notes DDS 1.1.8
---------------------------
The transposition table solution has been redesigned.
Each "winning ranks node" now contains all ranks for one suit.
When a new transposition table entry is created, it is now
positioned at the front of the alternative "winning ranks node"
list rather than at the end as before.
Each leading hand now has own root pointers pointing to
the "suit lengths combination" tree.
Some changes in QuickTricks.
Release Notes DDS 1.1.7
---------------------------
A bug fix and recoding of the dynamic transposition table
implementation.
Release Notes DDS 1.1.6
---------------------------
A bug has been fixed. It could show up (but hasn't as far as I know)
after the transposition table became full.
Only a minor part of the maximum transposition table, about 30 MB, is
now allocated at initialization. If more is needed it is dynamically
added as need arises. Each incremental addition is about 2 MB.
This continues until the maximum allowed space is reached,
for 512 MB PC this is about 400 MB. Then the incrementally added
transposition table pieces are wiped out and the initially allocated
table is cleared.
Release Notes DDS 1.1.5
---------------------------
A correction has been made removing a risk of DD value miscalculation.
The fault has not however yet showed up as far as I know.
A survival mechanism has been added to handle the situation if the
transposition table becomess full: The transposition table is emptied.
Before this, a full transposition table would in practise lock up
the program. Therefore the present size of the transposition table
is quite large (393 MB) to handle the most difficult deals.
This could lead to extensive memory swapping with the hard drive
if the PC RAM size is 256 MB or less, slowing down the program.
With the new survival mechanism, the program will not lock up in
case of a full transposition table. The calculation time will
increase because of the extra time to build up stored positions in
the table, but the increase will be reasonable. This means that
DDS should be possible to run with such small PC RAM sizes as
64 MB (this has not been tested, though).
Release Notes DDS 1.1.4
---------------------------
Improvements when the SolveBoard parameter mode is set to 2.
The mode parameter can now be set to 2 for SolveBoard calls
with parameter target set to -1 or a value 0-13,
and solutions set to 1, 2 or 3.
Following the first SolveBoard call with mode = 1, mode
can be set to 2 for any further SolveBoard call for
the same deal, also when an opponent hand leads the trick.
If scores are to be calculated for all 4 possible leading hands
of the deal, one SolveBoard call can be made with mode = 1, and
the other 3 SolveBoard calls for the other 3 leading hands can be
made with mode = 2.
Compared to dds 1.1.3, the better support of mode = 2 means improved
calculation speed. Compared to using only mode = 1 when calling
Solveboard 4 times, each time for each alternative leading hand,
the calculation time is roughly halved using mode = 2 as described
above.
Release Notes DDS 1.1.3
---------------------------
1. Compiles with Visual C++ 2005 Express edition
2. Some improvements in move ordering, quick tricks and the new
later tricks algorithms.
3. Total improvement about 20% including the faster code
generated by Visual C++ and the algorithm improvements.
Release Notes DDS 1.1.2
---------------------------
1. Increased performance of about 15% due to improved algorithm
for move ordering. For more information, look in the algorithm
description.
Release Notes DDS 1.1.1
---------------------------
1. For target = -1 and solutions = 1/2/3, the transposition table
contents are now reused also when SolveBoard is called with a new
target value.
2) Slight improvement of the QuickTricks algorithm.
3) Moderate speed improvement compared to 1.1.1.
Release Notes DDS 1.1.0
---------------------------
1. Performance improvement giving a speed of about twice that
of 1.0.6.
2. Redesign of the transposition table solution, see algorithm
description.
3. Improvements in the Quicktricks algorithm, see algorithm
description.
4. Dump in text file of SolveBoard parameters if SolveBoard
returns with error code.
Release Notes DDS 1.0.6
--------------------------
1. A bug has been fixed in the DDS start up code. The bug did
not affect the accuracy of the solver. Thanks to Fabien Bradmetz
for spotting this!
2. About 10% increased speed due to improvements in Quick Tricks.
3. An error code has been added for checking the input of of
cards earlier played in the trick.
4. A document (mode2.txt) describes source code examples of
calling SolveBoard using the parameter mode set to 2.
Release Notes DDS 1.0.5
--------------------------
1. About 25% speed improvement due to a search algorithm
improvement: For moves generated in the search tree, only one
"small" card move per hand and suit is generated. By "small"
card is meant a card with a rank that is not winning due to its
rank value. Earlier all "small" cards generated their own moves.
This improvement comes from a tip by Hans Kuijf.
2. The size of the transposition table has been increased by 25%.
This was done after realizing that for some extreme deals, rarely
occurring, when solutions = 2 and 3 the transposition table could
get completely filled up, making the search time extremely long
for those cases. The increased transposition table size should
still fit well inside a 256 MB machine.
3. Parameter mode = 2 indicates that the transposition table is
reused from an earlier SolveBoard call. It is restricted to the
case where the same conditions apply for the two calls, except
that the leading hand in the second call is the partner to the
leading hand in the first call. I.e. same deal incl same trump
suit, same target (not equal to -1), solutions = 1.
Release Notes DDS 1.0.4
-----------------------
When introducing the possibility of reusing the transposition
table between subsequent searches in 1.0.1, unfortunately a bug
was introduced as well. It occassionally gives wrong scores
when evaluating the last hand of the trick using
solutions = 2 or 3. This bug is fixed in 1.0.4.
Release Notes DDS 1.0.3
-----------------------
Includes:
1. An improvement of the move ordering algorithm. When LHO ruffs,
this is now given a low weight if the highest rank of RHO beats both
the rank of the leading card and the highest rank of the leading suit
at the partner of the leading hand, assuming that the partner of the
leading hand is not void in the suit of the leading card.
If these conditions do not hold, the weight for the LHO ruffing card
is high.
2. For the SolveBoard parameter solutions = 3, reuse of the
transposition table contents between card searches has been added.
1 and 2 together give on average an improvement performance.
Release Notes DDS 1.0.2
-----------------------
Includes a bug fix for the case when the SolveBoard parameter
"solutions" is set to 3. SolveBoard did not correctly handle the
case when the scores of the alternative cards were a mix of zero
and non-zero. This is now fixed in 1.0.2.
Release Notes DDS 1.0.1
-----------------------
Includes support for reuse of the transposition table contents
for a subsequent search. (This idea was brought forward
independently by Alex Martelli and Flip Cronje.)
When setting the SolveBoard solutions to 2, the transposition
table contents will be reused when searching for alternative cards,
giving a slightly decreased search time in most cases, in a few cases
the decrease is substantial. Earlier the contents of the
transposition table was always emptied between searches.
The way to control whether or not to empty the transposition table
is to properly set the parameter mtd in the InitSearch function:
mtd = FALSE means that the transposition table is emptied,
mtd = TRUE that it is not emptied.