PageRenderTime 28ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/Experimentation/Investigations/RamseyTheory/VanderWaerdenProblems/plans/general.hpp

https://github.com/MGwynne/oklibrary
C++ Header | 272 lines | 0 code | 2 blank | 270 comment | 0 complexity | b0ef1bff43895f297aaf50842a0e6733 MD5 | raw file
  1. // Oliver Kullmann, 20.9.2008 (Swansea)
  2. /* Copyright 2008, 2009, 2010, 2011 Oliver Kullmann
  3. This file is part of the OKlibrary. OKlibrary is free software; you can redistribute
  4. it and/or modify it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation and included in this library; either version 3 of the
  6. License, or any later version. */
  7. /*!
  8. \file Experimentation/Investigations/RamseyTheory/VanderWaerdenProblems/plans/general.hpp
  9. \brief On investigations into van-der-Waerden problems
  10. \todo Connections
  11. <ul>
  12. <li> See ComputerAlgebra/RamseyTheory/Lisp/VanderWaerden/plans/general.hpp. </li>
  13. <li> See VanderWaerden.cpp (to be updated) for a C++ generator. </li>
  14. <li> See ComputerAlgebra/Hypergraphs/Lisp/plans/Generators.hpp. </li>
  15. <li> See ComputerAlgebra/Satisfiability/Lisp/Generators/RamseyTheory/plans/VanderWaerdenProblems.hpp.
  16. </li>
  17. <li> External pages:
  18. <ol>
  19. <li> http://www.st.ewi.tudelft.nl/sat/waerden.php contains lower bounds
  20. and methods how to get them. </li>
  21. <li> http://users.encs.concordia.ca/~ta_ahmed/vdw.html contains the list
  22. of known numbers (except of transversal vdW-numbers). </li>
  23. </ol>
  24. </li>
  25. </ul>
  26. \todo Prepare benchmarks for SAT 2011
  27. <ul>
  28. <li> See "Benchmarks for SAT 2011" in
  29. Experimentation/Investigations/plans/SATCompetition.hpp for the general
  30. plans. </li>
  31. <li> See "SAT 2011 competition" in
  32. RamseyTheory/VanderWaerdenProblems/plans/3-k/general.hpp for the solver
  33. performances. </li>
  34. <li> DONE
  35. We should have two subclasses, related to vdw_2(3,k) and vdw_2^pd(3,k).
  36. </li>
  37. <li> DONE
  38. Ordinary instances:
  39. <ol>
  40. <li> VanDerWaerden_pd_2-3-31_930.cnf is a hard satisfiable instance,
  41. VanDerWaerden_2-3-31_931.cnf a hard unknown instance (see
  42. RamseyTheory/VanderWaerdenProblems/plans/3-k/31.hpp). </li>
  43. <li> All first unsatisfiable instances for 12 <= k <= 19. </li>
  44. <li> Perhaps also the last satisfiable instances for 20 <= k <= 30. </li>
  45. </ol>
  46. </li>
  47. <li> DONE
  48. Palindromic instances:
  49. <ol>
  50. <li> For complete solvers hard but solved unsatisfiable instances are
  51. VanDerWaerden_pd_2-3-23_507.cnf and VanDerWaerden_pd_2-3-23_508.cnf
  52. (see RamseyTheory/VanderWaerdenProblems/plans/3-k/23.hpp). </li>
  53. <li> Harder but still solved unsatisfiable instances are
  54. VanDerWaerden_pd_2-3-24_569.cnf and VanDerWaerden_pd_2-3-24_593.cnf
  55. (see RamseyTheory/VanderWaerdenProblems/plans/3-k/24.hpp). </li>
  56. <li> The hardest but still solved unsatisfiable instances are
  57. VanDerWaerden_pd_2-3-25_587.cnf and VanDerWaerden_pd_2-3-25_607.cnf
  58. (see RamseyTheory/VanderWaerdenProblems/plans/3-k/24.hpp). </li>
  59. <li> For k=24,25 we also need n=594 resp. n=608 (even harder unsatisfiable
  60. instances). </li>
  61. <li> For k=26 we should include the conjecturedly unsatisfiable
  62. instances. </li>
  63. <li> We also should include the relevant satisfiable instances. </li>
  64. <li> And perhaps the two borderline sat-instances for k=39. </li>
  65. </ol>
  66. </li>
  67. <li> DONE
  68. Generators:
  69. <ol>
  70. <li> Generating statically linked generators by
  71. \verbatim
  72. Generators> oklib cleanall
  73. Generators> LDFLAGS="-static" oklib all
  74. \endverbatim
  75. </li>
  76. <li> The relevant generators are VanderWaerdenCNF-O3-DNDEBUG and
  77. PdVanderWaerdenCNF-O3-DNDEBUG. </li>
  78. <li> We should provide a simple generation-script, just containing all
  79. calls to the generators. </li>
  80. </ol>
  81. </li>
  82. <li> DONE
  83. README file:
  84. <ol>
  85. <li> DONE
  86. Yet missing the links to the OKlibrary. </li>
  87. </ol>
  88. </li>
  89. <li> DONE (README is enough) Pdf file: </li>
  90. </ul>
  91. \todo Create milestones
  92. <ul>
  93. <li> Perhaps the initial version number is 0.2. </li>
  94. <li> Next milestones concentrate on vdw_2(3,k). </li>
  95. </ul>
  96. \todo DONE (as stated)
  97. Organisation
  98. <ul>
  99. <li> We should create a sub-directory "3-k" for investigations into
  100. vdw_2(3,k). </li>
  101. <li> There we have file "k.hpp" for special k-values (for example in 30.hpp
  102. the problems related to vdw_2(3,30) are investigated). </li>
  103. </ul>
  104. \todo Boolean van der Waerden numbers
  105. <ul>
  106. <li> Via
  107. \verbatim
  108. > VanderWaerden-O3-DNDEBUG k n > VanDerWaerden_2-k-k_n.cnf
  109. \endverbatim
  110. diagonal boolean problems can be generated, and via
  111. \verbatim
  112. > VanderWaerden-O3-DNDEBUG k1 k2 n > VanDerWaerden_2-k1-k2_n.cnf
  113. \endverbatim
  114. non-diagonal problems. </li>
  115. <li> In Maxima we have "output_vanderwaerden2_stdname(k,n)" (in
  116. ComputerAlgebra/Satisfiability/Lisp/Generators/RamseyTheory/VanderWaerdenProblems.mac)
  117. as well as "output_vanderwaerden2nd_stdname(k1,k2,n)".
  118. </li>
  119. <li> vanderwaerden_2(3) = 9 (density = 3.6) </li>
  120. <li> vanderwaerden_2(4) = 35 (density = 10.7) </li>
  121. <li> vanderwaerden_2(5) = 178 (density = 43.5)
  122. <ol>
  123. <li> Relatively easy for OKsolver-2002 (710s, 109703 nodes). </li>
  124. <li> march_pl needs only 51529 nodes and 238 seconds, so the "double
  125. look-ahead" seems to be successful here. </li>
  126. <li> minisat1 needs 213 seconds, so also clause-learning seems applicable
  127. here; minisat2 is even faster (21 restarts, 829170 conflicts, 90s). </li>
  128. <li> satz215 doesn't solve it in 30 minutes. </li>
  129. </ol>
  130. </li>
  131. <li> For vanderwaerden_2(6) see
  132. Experimentation/Investigations/RamseyTheory/VanderWaerdenProblems/plans/VanderWaerden_2-6-6.hpp.
  133. </li>
  134. </ul>
  135. \todo Translations for non-boolean problems
  136. <ul>
  137. <li> We have implemented the translations from [Kullmann 2010; Green-Tao and
  138. SAT]. </li>
  139. <li> In [Ahmed 2011; On computation of exact van der Waerden numbers] in
  140. Subsection 3.1 there is the claim of a "new encoding"; since it is based
  141. on the logarithmic encoding, one needs to investigate whether it is really
  142. new, or whether it is just the logarithmic translation from [Kullmann 2010].
  143. </li>
  144. </ul>
  145. \todo Palindromic diagonal problems
  146. <ul>
  147. <li> pdvanderwaerden_2(3) = (6,9). </li>
  148. <li> pdvanderwaerden_2(4) = (24,25). </li>
  149. <li> pdvanderwaerden_2(5) = (150,177). </li>
  150. <li> pdvanderwaerden_2(6) = (567,1132)
  151. <ol>
  152. <li> OKsolver_2002 </li>
  153. <li> minisat-2.2.0
  154. <ul>
  155. <li> Far more efficient than OKsolver_2002; performed complete
  156. calculation. </li>
  157. <li> Plotting the conflicts in dependency on the number of variables:
  158. \verbatim
  159. > cd Exp_PdVanderWaerdenC_2-6-6_minisat-2.2.0_2011-02-28-071109
  160. > oklib --R
  161. oklib_load_all()
  162. E = read_minisat2_outputs(dir(pattern=glob2rx("*_OUT")))
  163. plot(E$num_variables,E$conflicts)
  164. \endverbatim
  165. </li>
  166. <li> Clearly four phases (using n, the number of variables (half the
  167. number of original vertices)):
  168. <ol>
  169. <li> For n < ~80 we have three plateaus. </li>
  170. <li> For ~80 <= n <= 283 we have (very) linear growth. </li>
  171. <li> For 283 <= n <= ~500 we have again (very) linear growth,
  172. continously extending the previous segment, but with slower
  173. growth. </li>
  174. <li> For ~500 <= n we again have (very) linear growth, however we
  175. have a jump at n ~ 500 *down* to a much lower level. </li>
  176. <li> STOP, this is all possibly false, since "conflicts" are treated
  177. as factors! </li>
  178. </ol>
  179. </li>
  180. </ul>
  181. </li>
  182. </ol>
  183. </li>
  184. </ul>
  185. \todo Symmetry breaking for van der Waerden numbers
  186. <ul>
  187. <li> As for any hypergraph colouring problems, one can choose any variable
  188. and set it to true (or to false), due to the symmetry between 0 and 1. </li>
  189. <li> This is best "told" the solver, so that it can use this for the
  190. branching variable at the root. </li>
  191. <li> No other symmetry breaking seems possible without conditioning. </li>
  192. <li> Is there not also, at least, the symmetry about the number line? i.e.
  193. if there is a colouring of the numbers such that there is no arithmetic
  194. progression of size k, then reversing the colouring should also have this
  195. property. </li>
  196. <li> For small problems one needs to determine the full automorphism group
  197. of the clause-sets. </li>
  198. </ul>
  199. \todo Palindromic versions
  200. <ul>
  201. <li> For every parameter tuple t one can consider the problem where the
  202. solutions are required to be palindromes. </li>
  203. <li> This is equivalent to replacing the hypergraphs arithprog_hg(k,n) by
  204. palindromise_vdw_hg(arithprog_hg(k,n)) (where the k's run through t). </li>
  205. <li> Boolean problems are generated by
  206. output_pd_vanderwaerden2nd_stdname(k1,k2,n). </li>
  207. <li> So we consider pdvanderwaerden(t)=(n_0,n_1), where n_1 is the smallest
  208. n such that for all n' >= n no palindromic solution w.r.t. t exists, while
  209. n_0 is the largest n such that for all n' <= n a palindromic solution
  210. w.r.t. t exists. </li>
  211. <li> This determines satisfiabibility of all n (w.r.t. t). </li>
  212. <li> Compare "Palindromic numbers" in
  213. ComputerAlgebra/RamseyTheory/Lisp/VanderWaerden/plans/Numbers.hpp. </li>
  214. <li> Transversal extensions are not interesting in their palindromic
  215. versions, since for k=2 for even n>= 2 no vertex may be chosen, while for
  216. odd n exactly the central vertex has to be chosen. </li>
  217. <li> However the transversal numbers of the hypergraphs are likely of
  218. interest. </li>
  219. <li> The palindromic versions of vdW-problems seem to be of great interest,
  220. and so perhaps they should have its own submodule here. </li>
  221. <li> There for as many core-tuples as possible numbers should be determined.
  222. </li>
  223. <li> Likely it should have a submodule "Hypergraphs", where the transversal
  224. hypergraph is studied, but also already the determination of the number
  225. of hyperedges in arithprog_pd_hg(k,n) seems non-trivial. </li>
  226. <li> DONE
  227. Due to the importance of palindromic numbers, perhaps they deserve
  228. a designated system, like pdvanderwaerden(t), parallel to vanderwaerden(t),
  229. where we have now pairs (for the above vanderwaerden_g(t,"pdsat") and
  230. vanderwaerden_g(t,"pd")). </li>
  231. </ul>
  232. \todo Overview on performance of SAT solvers
  233. <ul>
  234. <li> We need an overview how SAT solvers perform on the different van der
  235. Waerden problems. </li>
  236. </ul>
  237. \todo Lower bounds
  238. <ul>
  239. <li> We need to get all known lower bounds into our system. </li>
  240. <li> And algorithmic lower bounds should be implemented. See [William
  241. Gasarch and Bernhard Haeupler, A Survey of Lower Bounds on the van der
  242. {W}aerden Number ${W}(k,2)$: {R}-Constructive and {P}-Constructive, arXiv,
  243. 2010, arXiv:1005.3749v1 [math.CO]] for an overview w.r.t. vdw_2(k). </li>
  244. <li> Compare "Lower bounds" in
  245. ComputerAlgebra/RamseyTheory/Lisp/VanderWaerden/plans/general.hpp. </li>
  246. </ul>
  247. */