tomoto 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +123 -0
  5. data/ext/tomoto/ext.cpp +245 -0
  6. data/ext/tomoto/extconf.rb +28 -0
  7. data/lib/tomoto.rb +12 -0
  8. data/lib/tomoto/ct.rb +11 -0
  9. data/lib/tomoto/hdp.rb +11 -0
  10. data/lib/tomoto/lda.rb +67 -0
  11. data/lib/tomoto/version.rb +3 -0
  12. data/vendor/EigenRand/EigenRand/Core.h +1139 -0
  13. data/vendor/EigenRand/EigenRand/Dists/Basic.h +111 -0
  14. data/vendor/EigenRand/EigenRand/Dists/Discrete.h +877 -0
  15. data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +108 -0
  16. data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +626 -0
  17. data/vendor/EigenRand/EigenRand/EigenRand +19 -0
  18. data/vendor/EigenRand/EigenRand/Macro.h +24 -0
  19. data/vendor/EigenRand/EigenRand/MorePacketMath.h +978 -0
  20. data/vendor/EigenRand/EigenRand/PacketFilter.h +286 -0
  21. data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +624 -0
  22. data/vendor/EigenRand/EigenRand/RandUtils.h +413 -0
  23. data/vendor/EigenRand/EigenRand/doc.h +220 -0
  24. data/vendor/EigenRand/LICENSE +21 -0
  25. data/vendor/EigenRand/README.md +288 -0
  26. data/vendor/eigen/COPYING.BSD +26 -0
  27. data/vendor/eigen/COPYING.GPL +674 -0
  28. data/vendor/eigen/COPYING.LGPL +502 -0
  29. data/vendor/eigen/COPYING.MINPACK +52 -0
  30. data/vendor/eigen/COPYING.MPL2 +373 -0
  31. data/vendor/eigen/COPYING.README +18 -0
  32. data/vendor/eigen/Eigen/CMakeLists.txt +19 -0
  33. data/vendor/eigen/Eigen/Cholesky +46 -0
  34. data/vendor/eigen/Eigen/CholmodSupport +48 -0
  35. data/vendor/eigen/Eigen/Core +537 -0
  36. data/vendor/eigen/Eigen/Dense +7 -0
  37. data/vendor/eigen/Eigen/Eigen +2 -0
  38. data/vendor/eigen/Eigen/Eigenvalues +61 -0
  39. data/vendor/eigen/Eigen/Geometry +62 -0
  40. data/vendor/eigen/Eigen/Householder +30 -0
  41. data/vendor/eigen/Eigen/IterativeLinearSolvers +48 -0
  42. data/vendor/eigen/Eigen/Jacobi +33 -0
  43. data/vendor/eigen/Eigen/LU +50 -0
  44. data/vendor/eigen/Eigen/MetisSupport +35 -0
  45. data/vendor/eigen/Eigen/OrderingMethods +73 -0
  46. data/vendor/eigen/Eigen/PaStiXSupport +48 -0
  47. data/vendor/eigen/Eigen/PardisoSupport +35 -0
  48. data/vendor/eigen/Eigen/QR +51 -0
  49. data/vendor/eigen/Eigen/QtAlignedMalloc +40 -0
  50. data/vendor/eigen/Eigen/SPQRSupport +34 -0
  51. data/vendor/eigen/Eigen/SVD +51 -0
  52. data/vendor/eigen/Eigen/Sparse +36 -0
  53. data/vendor/eigen/Eigen/SparseCholesky +45 -0
  54. data/vendor/eigen/Eigen/SparseCore +69 -0
  55. data/vendor/eigen/Eigen/SparseLU +46 -0
  56. data/vendor/eigen/Eigen/SparseQR +37 -0
  57. data/vendor/eigen/Eigen/StdDeque +27 -0
  58. data/vendor/eigen/Eigen/StdList +26 -0
  59. data/vendor/eigen/Eigen/StdVector +27 -0
  60. data/vendor/eigen/Eigen/SuperLUSupport +64 -0
  61. data/vendor/eigen/Eigen/UmfPackSupport +40 -0
  62. data/vendor/eigen/Eigen/src/Cholesky/LDLT.h +673 -0
  63. data/vendor/eigen/Eigen/src/Cholesky/LLT.h +542 -0
  64. data/vendor/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
  65. data/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +639 -0
  66. data/vendor/eigen/Eigen/src/Core/Array.h +329 -0
  67. data/vendor/eigen/Eigen/src/Core/ArrayBase.h +226 -0
  68. data/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +209 -0
  69. data/vendor/eigen/Eigen/src/Core/Assign.h +90 -0
  70. data/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +935 -0
  71. data/vendor/eigen/Eigen/src/Core/Assign_MKL.h +178 -0
  72. data/vendor/eigen/Eigen/src/Core/BandMatrix.h +353 -0
  73. data/vendor/eigen/Eigen/src/Core/Block.h +452 -0
  74. data/vendor/eigen/Eigen/src/Core/BooleanRedux.h +164 -0
  75. data/vendor/eigen/Eigen/src/Core/CommaInitializer.h +160 -0
  76. data/vendor/eigen/Eigen/src/Core/ConditionEstimator.h +175 -0
  77. data/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +1688 -0
  78. data/vendor/eigen/Eigen/src/Core/CoreIterators.h +127 -0
  79. data/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +184 -0
  80. data/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +866 -0
  81. data/vendor/eigen/Eigen/src/Core/CwiseTernaryOp.h +197 -0
  82. data/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +103 -0
  83. data/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +128 -0
  84. data/vendor/eigen/Eigen/src/Core/DenseBase.h +611 -0
  85. data/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +681 -0
  86. data/vendor/eigen/Eigen/src/Core/DenseStorage.h +570 -0
  87. data/vendor/eigen/Eigen/src/Core/Diagonal.h +260 -0
  88. data/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +343 -0
  89. data/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +28 -0
  90. data/vendor/eigen/Eigen/src/Core/Dot.h +318 -0
  91. data/vendor/eigen/Eigen/src/Core/EigenBase.h +159 -0
  92. data/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +146 -0
  93. data/vendor/eigen/Eigen/src/Core/Fuzzy.h +155 -0
  94. data/vendor/eigen/Eigen/src/Core/GeneralProduct.h +455 -0
  95. data/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +593 -0
  96. data/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +187 -0
  97. data/vendor/eigen/Eigen/src/Core/IO.h +225 -0
  98. data/vendor/eigen/Eigen/src/Core/Inverse.h +118 -0
  99. data/vendor/eigen/Eigen/src/Core/Map.h +171 -0
  100. data/vendor/eigen/Eigen/src/Core/MapBase.h +303 -0
  101. data/vendor/eigen/Eigen/src/Core/MathFunctions.h +1415 -0
  102. data/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +101 -0
  103. data/vendor/eigen/Eigen/src/Core/Matrix.h +459 -0
  104. data/vendor/eigen/Eigen/src/Core/MatrixBase.h +529 -0
  105. data/vendor/eigen/Eigen/src/Core/NestByValue.h +110 -0
  106. data/vendor/eigen/Eigen/src/Core/NoAlias.h +108 -0
  107. data/vendor/eigen/Eigen/src/Core/NumTraits.h +248 -0
  108. data/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +633 -0
  109. data/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +1035 -0
  110. data/vendor/eigen/Eigen/src/Core/Product.h +186 -0
  111. data/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +1112 -0
  112. data/vendor/eigen/Eigen/src/Core/Random.h +182 -0
  113. data/vendor/eigen/Eigen/src/Core/Redux.h +505 -0
  114. data/vendor/eigen/Eigen/src/Core/Ref.h +283 -0
  115. data/vendor/eigen/Eigen/src/Core/Replicate.h +142 -0
  116. data/vendor/eigen/Eigen/src/Core/ReturnByValue.h +117 -0
  117. data/vendor/eigen/Eigen/src/Core/Reverse.h +211 -0
  118. data/vendor/eigen/Eigen/src/Core/Select.h +162 -0
  119. data/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +352 -0
  120. data/vendor/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
  121. data/vendor/eigen/Eigen/src/Core/Solve.h +188 -0
  122. data/vendor/eigen/Eigen/src/Core/SolveTriangular.h +235 -0
  123. data/vendor/eigen/Eigen/src/Core/SolverBase.h +130 -0
  124. data/vendor/eigen/Eigen/src/Core/StableNorm.h +221 -0
  125. data/vendor/eigen/Eigen/src/Core/Stride.h +111 -0
  126. data/vendor/eigen/Eigen/src/Core/Swap.h +67 -0
  127. data/vendor/eigen/Eigen/src/Core/Transpose.h +403 -0
  128. data/vendor/eigen/Eigen/src/Core/Transpositions.h +407 -0
  129. data/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +983 -0
  130. data/vendor/eigen/Eigen/src/Core/VectorBlock.h +96 -0
  131. data/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +695 -0
  132. data/vendor/eigen/Eigen/src/Core/Visitor.h +273 -0
  133. data/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +451 -0
  134. data/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +439 -0
  135. data/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +637 -0
  136. data/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +51 -0
  137. data/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +391 -0
  138. data/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1316 -0
  139. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +430 -0
  140. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +322 -0
  141. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +1061 -0
  142. data/vendor/eigen/Eigen/src/Core/arch/CUDA/Complex.h +103 -0
  143. data/vendor/eigen/Eigen/src/Core/arch/CUDA/Half.h +674 -0
  144. data/vendor/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +91 -0
  145. data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +333 -0
  146. data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +1124 -0
  147. data/vendor/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +212 -0
  148. data/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +29 -0
  149. data/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +49 -0
  150. data/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +490 -0
  151. data/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +91 -0
  152. data/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +760 -0
  153. data/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +471 -0
  154. data/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +562 -0
  155. data/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +895 -0
  156. data/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +77 -0
  157. data/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +397 -0
  158. data/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +137 -0
  159. data/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +945 -0
  160. data/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +168 -0
  161. data/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +475 -0
  162. data/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +188 -0
  163. data/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +136 -0
  164. data/vendor/eigen/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
  165. data/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +792 -0
  166. data/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2156 -0
  167. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +492 -0
  168. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +311 -0
  169. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
  170. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +122 -0
  171. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +619 -0
  172. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
  173. data/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +163 -0
  174. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +521 -0
  175. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +287 -0
  176. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +260 -0
  177. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
  178. data/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
  179. data/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +93 -0
  180. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +466 -0
  181. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +315 -0
  182. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
  183. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
  184. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +335 -0
  185. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +163 -0
  186. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +145 -0
  187. data/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +398 -0
  188. data/vendor/eigen/Eigen/src/Core/util/Constants.h +547 -0
  189. data/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +83 -0
  190. data/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +302 -0
  191. data/vendor/eigen/Eigen/src/Core/util/MKL_support.h +130 -0
  192. data/vendor/eigen/Eigen/src/Core/util/Macros.h +1001 -0
  193. data/vendor/eigen/Eigen/src/Core/util/Memory.h +993 -0
  194. data/vendor/eigen/Eigen/src/Core/util/Meta.h +534 -0
  195. data/vendor/eigen/Eigen/src/Core/util/NonMPL2.h +3 -0
  196. data/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +27 -0
  197. data/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +218 -0
  198. data/vendor/eigen/Eigen/src/Core/util/XprHelper.h +821 -0
  199. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
  200. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +459 -0
  201. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
  202. data/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
  203. data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
  204. data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
  205. data/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
  206. data/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
  207. data/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +654 -0
  208. data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +546 -0
  209. data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
  210. data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +870 -0
  211. data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
  212. data/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +556 -0
  213. data/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +392 -0
  214. data/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +247 -0
  215. data/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +114 -0
  216. data/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +497 -0
  217. data/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +282 -0
  218. data/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +234 -0
  219. data/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +195 -0
  220. data/vendor/eigen/Eigen/src/Geometry/Quaternion.h +814 -0
  221. data/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +199 -0
  222. data/vendor/eigen/Eigen/src/Geometry/RotationBase.h +206 -0
  223. data/vendor/eigen/Eigen/src/Geometry/Scaling.h +170 -0
  224. data/vendor/eigen/Eigen/src/Geometry/Transform.h +1542 -0
  225. data/vendor/eigen/Eigen/src/Geometry/Translation.h +208 -0
  226. data/vendor/eigen/Eigen/src/Geometry/Umeyama.h +166 -0
  227. data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +161 -0
  228. data/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +103 -0
  229. data/vendor/eigen/Eigen/src/Householder/Householder.h +172 -0
  230. data/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +470 -0
  231. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
  232. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +228 -0
  233. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +246 -0
  234. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +400 -0
  235. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +462 -0
  236. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +394 -0
  237. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +216 -0
  238. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +115 -0
  239. data/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +462 -0
  240. data/vendor/eigen/Eigen/src/LU/Determinant.h +101 -0
  241. data/vendor/eigen/Eigen/src/LU/FullPivLU.h +891 -0
  242. data/vendor/eigen/Eigen/src/LU/InverseImpl.h +415 -0
  243. data/vendor/eigen/Eigen/src/LU/PartialPivLU.h +611 -0
  244. data/vendor/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
  245. data/vendor/eigen/Eigen/src/LU/arch/Inverse_SSE.h +338 -0
  246. data/vendor/eigen/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  247. data/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +445 -0
  248. data/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +1843 -0
  249. data/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +157 -0
  250. data/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
  251. data/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +543 -0
  252. data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +653 -0
  253. data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
  254. data/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +562 -0
  255. data/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +676 -0
  256. data/vendor/eigen/Eigen/src/QR/HouseholderQR.h +409 -0
  257. data/vendor/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
  258. data/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +313 -0
  259. data/vendor/eigen/Eigen/src/SVD/BDCSVD.h +1246 -0
  260. data/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +804 -0
  261. data/vendor/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
  262. data/vendor/eigen/Eigen/src/SVD/SVDBase.h +315 -0
  263. data/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
  264. data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +689 -0
  265. data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +199 -0
  266. data/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +377 -0
  267. data/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +258 -0
  268. data/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
  269. data/vendor/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
  270. data/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +216 -0
  271. data/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +603 -0
  272. data/vendor/eigen/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  273. data/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +341 -0
  274. data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +726 -0
  275. data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +148 -0
  276. data/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +320 -0
  277. data/vendor/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
  278. data/vendor/eigen/Eigen/src/SparseCore/SparseDot.h +98 -0
  279. data/vendor/eigen/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
  280. data/vendor/eigen/Eigen/src/SparseCore/SparseMap.h +305 -0
  281. data/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +1403 -0
  282. data/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +405 -0
  283. data/vendor/eigen/Eigen/src/SparseCore/SparsePermutation.h +178 -0
  284. data/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +169 -0
  285. data/vendor/eigen/Eigen/src/SparseCore/SparseRedux.h +49 -0
  286. data/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +397 -0
  287. data/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +656 -0
  288. data/vendor/eigen/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
  289. data/vendor/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
  290. data/vendor/eigen/Eigen/src/SparseCore/SparseTranspose.h +92 -0
  291. data/vendor/eigen/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
  292. data/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +178 -0
  293. data/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +478 -0
  294. data/vendor/eigen/Eigen/src/SparseCore/SparseView.h +253 -0
  295. data/vendor/eigen/Eigen/src/SparseCore/TriangularSolver.h +315 -0
  296. data/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +773 -0
  297. data/vendor/eigen/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  298. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
  299. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
  300. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +301 -0
  301. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  302. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
  303. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
  304. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
  305. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
  306. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
  307. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
  308. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
  309. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  310. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  311. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
  312. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  313. data/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +745 -0
  314. data/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +126 -0
  315. data/vendor/eigen/Eigen/src/StlSupport/StdList.h +106 -0
  316. data/vendor/eigen/Eigen/src/StlSupport/StdVector.h +131 -0
  317. data/vendor/eigen/Eigen/src/StlSupport/details.h +84 -0
  318. data/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +1027 -0
  319. data/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +506 -0
  320. data/vendor/eigen/Eigen/src/misc/Image.h +82 -0
  321. data/vendor/eigen/Eigen/src/misc/Kernel.h +79 -0
  322. data/vendor/eigen/Eigen/src/misc/RealSvd2x2.h +55 -0
  323. data/vendor/eigen/Eigen/src/misc/blas.h +440 -0
  324. data/vendor/eigen/Eigen/src/misc/lapack.h +152 -0
  325. data/vendor/eigen/Eigen/src/misc/lapacke.h +16291 -0
  326. data/vendor/eigen/Eigen/src/misc/lapacke_mangling.h +17 -0
  327. data/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +332 -0
  328. data/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +552 -0
  329. data/vendor/eigen/Eigen/src/plugins/BlockMethods.h +1058 -0
  330. data/vendor/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
  331. data/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +163 -0
  332. data/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
  333. data/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +85 -0
  334. data/vendor/eigen/README.md +3 -0
  335. data/vendor/eigen/bench/README.txt +55 -0
  336. data/vendor/eigen/bench/btl/COPYING +340 -0
  337. data/vendor/eigen/bench/btl/README +154 -0
  338. data/vendor/eigen/bench/tensors/README +21 -0
  339. data/vendor/eigen/blas/README.txt +6 -0
  340. data/vendor/eigen/demos/mandelbrot/README +10 -0
  341. data/vendor/eigen/demos/mix_eigen_and_c/README +9 -0
  342. data/vendor/eigen/demos/opengl/README +13 -0
  343. data/vendor/eigen/unsupported/Eigen/CXX11/src/Tensor/README.md +1760 -0
  344. data/vendor/eigen/unsupported/README.txt +50 -0
  345. data/vendor/tomotopy/LICENSE +21 -0
  346. data/vendor/tomotopy/README.kr.rst +375 -0
  347. data/vendor/tomotopy/README.rst +382 -0
  348. data/vendor/tomotopy/src/Labeling/FoRelevance.cpp +362 -0
  349. data/vendor/tomotopy/src/Labeling/FoRelevance.h +88 -0
  350. data/vendor/tomotopy/src/Labeling/Labeler.h +50 -0
  351. data/vendor/tomotopy/src/TopicModel/CT.h +37 -0
  352. data/vendor/tomotopy/src/TopicModel/CTModel.cpp +13 -0
  353. data/vendor/tomotopy/src/TopicModel/CTModel.hpp +293 -0
  354. data/vendor/tomotopy/src/TopicModel/DMR.h +51 -0
  355. data/vendor/tomotopy/src/TopicModel/DMRModel.cpp +13 -0
  356. data/vendor/tomotopy/src/TopicModel/DMRModel.hpp +374 -0
  357. data/vendor/tomotopy/src/TopicModel/DT.h +65 -0
  358. data/vendor/tomotopy/src/TopicModel/DTM.h +22 -0
  359. data/vendor/tomotopy/src/TopicModel/DTModel.cpp +15 -0
  360. data/vendor/tomotopy/src/TopicModel/DTModel.hpp +572 -0
  361. data/vendor/tomotopy/src/TopicModel/GDMR.h +37 -0
  362. data/vendor/tomotopy/src/TopicModel/GDMRModel.cpp +14 -0
  363. data/vendor/tomotopy/src/TopicModel/GDMRModel.hpp +485 -0
  364. data/vendor/tomotopy/src/TopicModel/HDP.h +74 -0
  365. data/vendor/tomotopy/src/TopicModel/HDPModel.cpp +13 -0
  366. data/vendor/tomotopy/src/TopicModel/HDPModel.hpp +592 -0
  367. data/vendor/tomotopy/src/TopicModel/HLDA.h +40 -0
  368. data/vendor/tomotopy/src/TopicModel/HLDAModel.cpp +13 -0
  369. data/vendor/tomotopy/src/TopicModel/HLDAModel.hpp +681 -0
  370. data/vendor/tomotopy/src/TopicModel/HPA.h +27 -0
  371. data/vendor/tomotopy/src/TopicModel/HPAModel.cpp +21 -0
  372. data/vendor/tomotopy/src/TopicModel/HPAModel.hpp +588 -0
  373. data/vendor/tomotopy/src/TopicModel/LDA.h +144 -0
  374. data/vendor/tomotopy/src/TopicModel/LDACVB0Model.hpp +442 -0
  375. data/vendor/tomotopy/src/TopicModel/LDAModel.cpp +13 -0
  376. data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +1058 -0
  377. data/vendor/tomotopy/src/TopicModel/LLDA.h +45 -0
  378. data/vendor/tomotopy/src/TopicModel/LLDAModel.cpp +13 -0
  379. data/vendor/tomotopy/src/TopicModel/LLDAModel.hpp +203 -0
  380. data/vendor/tomotopy/src/TopicModel/MGLDA.h +63 -0
  381. data/vendor/tomotopy/src/TopicModel/MGLDAModel.cpp +17 -0
  382. data/vendor/tomotopy/src/TopicModel/MGLDAModel.hpp +558 -0
  383. data/vendor/tomotopy/src/TopicModel/PA.h +43 -0
  384. data/vendor/tomotopy/src/TopicModel/PAModel.cpp +13 -0
  385. data/vendor/tomotopy/src/TopicModel/PAModel.hpp +467 -0
  386. data/vendor/tomotopy/src/TopicModel/PLDA.h +17 -0
  387. data/vendor/tomotopy/src/TopicModel/PLDAModel.cpp +13 -0
  388. data/vendor/tomotopy/src/TopicModel/PLDAModel.hpp +214 -0
  389. data/vendor/tomotopy/src/TopicModel/SLDA.h +54 -0
  390. data/vendor/tomotopy/src/TopicModel/SLDAModel.cpp +17 -0
  391. data/vendor/tomotopy/src/TopicModel/SLDAModel.hpp +456 -0
  392. data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +692 -0
  393. data/vendor/tomotopy/src/Utils/AliasMethod.hpp +169 -0
  394. data/vendor/tomotopy/src/Utils/Dictionary.h +80 -0
  395. data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +181 -0
  396. data/vendor/tomotopy/src/Utils/LBFGS.h +202 -0
  397. data/vendor/tomotopy/src/Utils/LBFGS/LineSearchBacktracking.h +120 -0
  398. data/vendor/tomotopy/src/Utils/LBFGS/LineSearchBracketing.h +122 -0
  399. data/vendor/tomotopy/src/Utils/LBFGS/Param.h +213 -0
  400. data/vendor/tomotopy/src/Utils/LUT.hpp +82 -0
  401. data/vendor/tomotopy/src/Utils/MultiNormalDistribution.hpp +69 -0
  402. data/vendor/tomotopy/src/Utils/PolyaGamma.hpp +200 -0
  403. data/vendor/tomotopy/src/Utils/PolyaGammaHybrid.hpp +672 -0
  404. data/vendor/tomotopy/src/Utils/ThreadPool.hpp +150 -0
  405. data/vendor/tomotopy/src/Utils/Trie.hpp +220 -0
  406. data/vendor/tomotopy/src/Utils/TruncMultiNormal.hpp +94 -0
  407. data/vendor/tomotopy/src/Utils/Utils.hpp +337 -0
  408. data/vendor/tomotopy/src/Utils/avx_gamma.h +46 -0
  409. data/vendor/tomotopy/src/Utils/avx_mathfun.h +736 -0
  410. data/vendor/tomotopy/src/Utils/exception.h +28 -0
  411. data/vendor/tomotopy/src/Utils/math.h +281 -0
  412. data/vendor/tomotopy/src/Utils/rtnorm.hpp +2690 -0
  413. data/vendor/tomotopy/src/Utils/sample.hpp +192 -0
  414. data/vendor/tomotopy/src/Utils/serializer.hpp +695 -0
  415. data/vendor/tomotopy/src/Utils/slp.hpp +131 -0
  416. data/vendor/tomotopy/src/Utils/sse_gamma.h +48 -0
  417. data/vendor/tomotopy/src/Utils/sse_mathfun.h +710 -0
  418. data/vendor/tomotopy/src/Utils/text.hpp +49 -0
  419. data/vendor/tomotopy/src/Utils/tvector.hpp +543 -0
  420. metadata +531 -0
@@ -0,0 +1,120 @@
1
+ // Copyright (C) 2016-2019 Yixuan Qiu <yixuan.qiu@cos.name>
2
+ // Under MIT license
3
+
4
+ #ifndef LINE_SEARCH_BACKTRACKING_H
5
+ #define LINE_SEARCH_BACKTRACKING_H
6
+
7
+ #include <Eigen/Core>
8
+ #include <stdexcept> // std::runtime_error
9
+
10
+
11
+ namespace LBFGSpp {
12
+
13
+
14
+ ///
15
+ /// The backtracking line search algorithm for LBFGS. Mainly for internal use.
16
+ ///
17
+ template <typename Scalar>
18
+ class LineSearchBacktracking
19
+ {
20
+ private:
21
+ typedef Eigen::Matrix<Scalar, Eigen::Dynamic, 1> Vector;
22
+
23
+ public:
24
+ ///
25
+ /// Line search by backtracking.
26
+ ///
27
+ /// \param f A function object such that `f(x, grad)` returns the
28
+ /// objective function value at `x`, and overwrites `grad` with
29
+ /// the gradient.
30
+ /// \param fx In: The objective function value at the current point.
31
+ /// Out: The function value at the new point.
32
+ /// \param x Out: The new point moved to.
33
+ /// \param grad In: The current gradient vector. Out: The gradient at the
34
+ /// new point.
35
+ /// \param step In: The initial step length. Out: The calculated step length.
36
+ /// \param drt The current moving direction.
37
+ /// \param xp The current point.
38
+ /// \param param Parameters for the LBFGS algorithm
39
+ ///
40
+ template <typename Foo>
41
+ static void LineSearch(Foo& f, Scalar& fx, Eigen::Ref<Vector> x, Vector& grad,
42
+ Scalar& step,
43
+ const Vector& drt, const Vector& xp,
44
+ const LBFGSParam<Scalar>& param)
45
+ {
46
+ // Decreasing and increasing factors
47
+ const Scalar dec = 0.5;
48
+ const Scalar inc = 2.1;
49
+
50
+ // Check the value of step
51
+ if (step <= Scalar(0))
52
+ std::invalid_argument("'step' must be positive");
53
+
54
+ // Save the function value at the current x
55
+ const Scalar fx_init = fx;
56
+ // Projection of gradient on the search direction
57
+ const Scalar dg_init = grad.dot(drt);
58
+ // Make sure d points to a descent direction
59
+ if (dg_init > 0)
60
+ std::logic_error("the moving direction increases the objective function value");
61
+
62
+ const Scalar dg_test = param.ftol * dg_init;
63
+ Scalar width;
64
+
65
+ int iter;
66
+ for (iter = 0; iter < param.max_linesearch; iter++)
67
+ {
68
+ // x_{k+1} = x_k + step * d_k
69
+ x.noalias() = xp + step * drt;
70
+ // Evaluate this candidate
71
+ fx = f(x, grad);
72
+
73
+ if (fx > fx_init + step * dg_test)
74
+ {
75
+ width = dec;
76
+ }
77
+ else {
78
+ // Armijo condition is met
79
+ if (param.linesearch == LBFGS_LINESEARCH_BACKTRACKING_ARMIJO)
80
+ break;
81
+
82
+ const Scalar dg = grad.dot(drt);
83
+ if (dg < param.wolfe * dg_init)
84
+ {
85
+ width = inc;
86
+ }
87
+ else {
88
+ // Regular Wolfe condition is met
89
+ if (param.linesearch == LBFGS_LINESEARCH_BACKTRACKING_WOLFE)
90
+ break;
91
+
92
+ if (dg > -param.wolfe * dg_init)
93
+ {
94
+ width = dec;
95
+ }
96
+ else {
97
+ // Strong Wolfe condition is met
98
+ break;
99
+ }
100
+ }
101
+ }
102
+
103
+ if (iter >= param.max_linesearch)
104
+ throw std::runtime_error("the line search routine reached the maximum number of iterations");
105
+
106
+ if (step < param.min_step)
107
+ throw std::runtime_error("the line search step became smaller than the minimum value allowed");
108
+
109
+ if (step > param.max_step)
110
+ throw std::runtime_error("the line search step became larger than the maximum value allowed");
111
+
112
+ step *= width;
113
+ }
114
+ }
115
+ };
116
+
117
+
118
+ } // namespace LBFGSpp
119
+
120
+ #endif // LINE_SEARCH_BACKTRACKING_H
@@ -0,0 +1,122 @@
1
+ // Copyright (C) 2016-2019 Yixuan Qiu <yixuan.qiu@cos.name> & Dirk Toewe <DirkToewe@GoogleMail.com>
2
+ // Under MIT license
3
+
4
+ #ifndef LINE_SEARCH_BRACKETING_H
5
+ #define LINE_SEARCH_BRACKETING_H
6
+
7
+ #include <Eigen/Core>
8
+ #include <stdexcept> // std::runtime_error
9
+
10
+ namespace LBFGSpp {
11
+
12
+
13
+ ///
14
+ /// The bracketing line search algorithm for LBFGS. Mainly for internal use.
15
+ ///
16
+ template <typename Scalar>
17
+ class LineSearchBracketing
18
+ {
19
+ private:
20
+ typedef Eigen::Matrix<Scalar, Eigen::Dynamic, 1> Vector;
21
+
22
+ public:
23
+ ///
24
+ /// Line search by bracketing. Similar to the backtracking line search
25
+ /// except that it actively maintains an upper and lower bound of the
26
+ /// current search range.
27
+ ///
28
+ /// \param f A function object such that `f(x, grad)` returns the
29
+ /// objective function value at `x`, and overwrites `grad` with
30
+ /// the gradient.
31
+ /// \param fx In: The objective function value at the current point.
32
+ /// Out: The function value at the new point.
33
+ /// \param x Out: The new point moved to.
34
+ /// \param grad In: The current gradient vector. Out: The gradient at the
35
+ /// new point.
36
+ /// \param step In: The initial step length. Out: The calculated step length.
37
+ /// \param drt The current moving direction.
38
+ /// \param xp The current point.
39
+ /// \param param Parameters for the LBFGS algorithm
40
+ ///
41
+ template <typename Foo>
42
+ static void LineSearch(Foo&& f, Scalar& fx, Eigen::Ref<Vector> x, Vector& grad,
43
+ Scalar& step,
44
+ const Vector& drt, const Vector& xp,
45
+ const LBFGSParam<Scalar>& param)
46
+ {
47
+ // Check the value of step
48
+ if (step <= Scalar(0))
49
+ std::invalid_argument("'step' must be positive");
50
+
51
+ // Save the function value at the current x
52
+ const Scalar fx_init = fx;
53
+ // Projection of gradient on the search direction
54
+ const Scalar dg_init = grad.dot(drt);
55
+ // Make sure d points to a descent direction
56
+ if (dg_init > 0)
57
+ std::logic_error("the moving direction increases the objective function value");
58
+
59
+ const Scalar dg_test = param.ftol * dg_init;
60
+
61
+ // Upper and lower end of the current line search range
62
+ Scalar step_lo = 0,
63
+ step_hi = std::numeric_limits<Scalar>::infinity();
64
+
65
+ for (int iter = 0; iter < param.max_linesearch; iter++)
66
+ {
67
+ // x_{k+1} = x_k + step * d_k
68
+ x.noalias() = xp + step * drt;
69
+ // Evaluate this candidate
70
+ fx = f(x, grad);
71
+
72
+ if (fx > fx_init + step * dg_test)
73
+ {
74
+ step_hi = step;
75
+ }
76
+ else {
77
+ // Armijo condition is met
78
+ if (param.linesearch == LBFGS_LINESEARCH_BACKTRACKING_ARMIJO)
79
+ break;
80
+
81
+ const Scalar dg = grad.dot(drt);
82
+ if (dg < param.wolfe * dg_init)
83
+ {
84
+ step_lo = step;
85
+ }
86
+ else {
87
+ // Regular Wolfe condition is met
88
+ if (param.linesearch == LBFGS_LINESEARCH_BACKTRACKING_WOLFE)
89
+ break;
90
+
91
+ if (dg > -param.wolfe * dg_init)
92
+ {
93
+ step_hi = step;
94
+ }
95
+ else {
96
+ // Strong Wolfe condition is met
97
+ break;
98
+ }
99
+ }
100
+ }
101
+
102
+ assert(step_lo < step_hi);
103
+
104
+ if (iter >= param.max_linesearch)
105
+ throw std::runtime_error("the line search routine reached the maximum number of iterations");
106
+
107
+ if (step < param.min_step)
108
+ throw std::runtime_error("the line search step became smaller than the minimum value allowed");
109
+
110
+ if (step > param.max_step)
111
+ throw std::runtime_error("the line search step became larger than the maximum value allowed");
112
+
113
+ // continue search in mid of current search range
114
+ step = std::isinf(step_hi) ? 2 * step : step_lo / 2 + step_hi / 2;
115
+ }
116
+ }
117
+ };
118
+
119
+
120
+ } // namespace LBFGSpp
121
+
122
+ #endif // LINE_SEARCH_BRACKETING_H
@@ -0,0 +1,213 @@
1
+ // Copyright (C) 2016 Yixuan Qiu <yixuan.qiu@cos.name>
2
+ // Under MIT license
3
+
4
+ #ifndef PARAM_H
5
+ #define PARAM_H
6
+
7
+ #include <Eigen/Core>
8
+ #include <stdexcept> // std::invalid_argument
9
+
10
+
11
+ namespace LBFGSpp {
12
+
13
+
14
+ ///
15
+ /// \defgroup Enumerations
16
+ ///
17
+ /// Enumeration types for line search.
18
+ ///
19
+
20
+ ///
21
+ /// \ingroup Enumerations
22
+ ///
23
+ /// The enumeration of line search algorithms.
24
+ ///
25
+ enum LINE_SEARCH_ALGORITHM
26
+ {
27
+ ///
28
+ /// Backtracking method with the Armijo condition.
29
+ /// The backtracking method finds the step length such that it satisfies
30
+ /// the sufficient decrease (Armijo) condition,
31
+ /// \f$f(x + a \cdot d) \le f(x) + \beta' \cdot a \cdot g(x)^T d\f$,
32
+ /// where \f$x\f$ is the current point, \f$d\f$ is the current search direction,
33
+ /// \f$a\f$ is the step length, and \f$\beta'\f$ is the value specified by
34
+ /// \ref LBFGSParam::ftol. \f$f\f$ and \f$g\f$ are the function
35
+ /// and gradient values respectively.
36
+ ///
37
+ LBFGS_LINESEARCH_BACKTRACKING_ARMIJO = 1,
38
+
39
+ ///
40
+ /// The backtracking method with the defualt (regular Wolfe) condition.
41
+ /// An alias of `LBFGS_LINESEARCH_BACKTRACKING_WOLFE`.
42
+ ///
43
+ LBFGS_LINESEARCH_BACKTRACKING = 2,
44
+
45
+ ///
46
+ /// Backtracking method with regular Wolfe condition.
47
+ /// The backtracking method finds the step length such that it satisfies
48
+ /// both the Armijo condition (`LBFGS_LINESEARCH_BACKTRACKING_ARMIJO`)
49
+ /// and the curvature condition,
50
+ /// \f$g(x + a \cdot d)^T d \ge \beta \cdot g(x)^T d\f$, where \f$\beta\f$
51
+ /// is the value specified by \ref LBFGSParam::wolfe.
52
+ ///
53
+ LBFGS_LINESEARCH_BACKTRACKING_WOLFE = 2,
54
+
55
+ ///
56
+ /// Backtracking method with strong Wolfe condition.
57
+ /// The backtracking method finds the step length such that it satisfies
58
+ /// both the Armijo condition (`LBFGS_LINESEARCH_BACKTRACKING_ARMIJO`)
59
+ /// and the following condition,
60
+ /// \f$\vert g(x + a \cdot d)^T d\vert \le \beta \cdot \vert g(x)^T d\vert\f$,
61
+ /// where \f$\beta\f$ is the value specified by \ref LBFGSParam::wolfe.
62
+ ///
63
+ LBFGS_LINESEARCH_BACKTRACKING_STRONG_WOLFE = 3
64
+ };
65
+
66
+
67
+ ///
68
+ /// Parameters to control the LBFGS algorithm.
69
+ ///
70
+ template <typename Scalar = double>
71
+ class LBFGSParam
72
+ {
73
+ public:
74
+ ///
75
+ /// The number of corrections to approximate the inverse hessian matrix.
76
+ /// The L-BFGS routine stores the computation results of previous \ref m
77
+ /// iterations to approximate the inverse hessian matrix of the current
78
+ /// iteration. This parameter controls the size of the limited memories
79
+ /// (corrections). The default value is \c 6. Values less than \c 3 are
80
+ /// not recommended. Large values will result in excessive computing time.
81
+ ///
82
+ int m;
83
+ ///
84
+ /// Tolerance for convergence test.
85
+ /// This parameter determines the accuracy with which the solution is to
86
+ /// be found. A minimization terminates when
87
+ /// \f$||g|| < \epsilon * \max(1, ||x||)\f$,
88
+ /// where ||.|| denotes the Euclidean (L2) norm. The default value is
89
+ /// \c 1e-5.
90
+ ///
91
+ Scalar epsilon;
92
+ ///
93
+ /// Distance for delta-based conergence test.
94
+ /// This parameter determines the distance \f$d\f$ to compute the
95
+ /// rate of decrease of the objective function,
96
+ /// \f$(f_{k-d}(x)-f_k(x))/f_k(x)\f$, where \f$k\f$ is the current iteration
97
+ /// step. If the value of this parameter is zero, the delta-based convergence
98
+ /// test will not be performed. The default value is \c 0.
99
+ ///
100
+ int past;
101
+ ///
102
+ /// Delta for convergence test.
103
+ /// The algorithm stops when the following condition is met,
104
+ /// \f$(f_{k-d}(x)-f_k(x))/f_k(x)<\delta\f$, where \f$f_k(x)\f$ is
105
+ /// the current function value, \f$f_{k-d}(x)\f$ is the function value
106
+ /// \f$d\f$ iterations ago (specified by the \ref past parameter).
107
+ /// The default value is \c 0.
108
+ ///
109
+ Scalar delta;
110
+ ///
111
+ /// The maximum number of iterations.
112
+ /// The optimization process is terminated when the iteration count
113
+ /// exceedes this parameter. Setting this parameter to zero continues an
114
+ /// optimization process until a convergence or error. The default value
115
+ /// is \c 0.
116
+ ///
117
+ int max_iterations;
118
+ ///
119
+ /// The line search algorithm.
120
+ /// This parameter specifies the line search algorithm that will be used
121
+ /// by the LBFGS routine. The default value is `LBFGS_LINESEARCH_BACKTRACKING_ARMIJO`.
122
+ ///
123
+ int linesearch;
124
+ ///
125
+ /// The maximum number of trials for the line search.
126
+ /// This parameter controls the number of function and gradients evaluations
127
+ /// per iteration for the line search routine. The default value is \c 20.
128
+ ///
129
+ int max_linesearch;
130
+ ///
131
+ /// The minimum step length allowed in the line search.
132
+ /// The default value is \c 1e-20. Usually this value does not need to be
133
+ /// modified.
134
+ ///
135
+ Scalar min_step;
136
+ ///
137
+ /// The maximum step length allowed in the line search.
138
+ /// The default value is \c 1e+20. Usually this value does not need to be
139
+ /// modified.
140
+ ///
141
+ Scalar max_step;
142
+ ///
143
+ /// A parameter to control the accuracy of the line search routine.
144
+ /// The default value is \c 1e-4. This parameter should be greater
145
+ /// than zero and smaller than \c 0.5.
146
+ ///
147
+ Scalar ftol;
148
+ ///
149
+ /// A coefficient for the Wolfe condition.
150
+ /// This parameter is valid only when the backtracking line-search
151
+ /// algorithm is used with the Wolfe condition.
152
+ /// The default value is \c 0.9. This parameter should be greater
153
+ /// the \ref ftol parameter and smaller than \c 1.0.
154
+ ///
155
+ Scalar wolfe;
156
+
157
+ public:
158
+ ///
159
+ /// Constructor for LBFGS parameters.
160
+ /// Default values for parameters will be set when the object is created.
161
+ ///
162
+ LBFGSParam()
163
+ {
164
+ m = 6;
165
+ epsilon = Scalar(1e-5);
166
+ past = 0;
167
+ delta = Scalar(0);
168
+ max_iterations = 0;
169
+ linesearch = LBFGS_LINESEARCH_BACKTRACKING_ARMIJO;
170
+ max_linesearch = 20;
171
+ min_step = Scalar(1e-20);
172
+ max_step = Scalar(1e+20);
173
+ ftol = Scalar(1e-4);
174
+ wolfe = Scalar(0.9);
175
+ }
176
+
177
+ ///
178
+ /// Checking the validity of LBFGS parameters.
179
+ /// An `std::invalid_argument` exception will be thrown if some parameter
180
+ /// is invalid.
181
+ ///
182
+ inline void check_param() const
183
+ {
184
+ if(m <= 0)
185
+ throw std::invalid_argument("'m' must be positive");
186
+ if(epsilon <= 0)
187
+ throw std::invalid_argument("'epsilon' must be positive");
188
+ if(past < 0)
189
+ throw std::invalid_argument("'past' must be non-negative");
190
+ if(delta < 0)
191
+ throw std::invalid_argument("'delta' must be non-negative");
192
+ if(max_iterations < 0)
193
+ throw std::invalid_argument("'max_iterations' must be non-negative");
194
+ if(linesearch < LBFGS_LINESEARCH_BACKTRACKING_ARMIJO ||
195
+ linesearch > LBFGS_LINESEARCH_BACKTRACKING_STRONG_WOLFE)
196
+ throw std::invalid_argument("unsupported line search algorithm");
197
+ if(max_linesearch <= 0)
198
+ throw std::invalid_argument("'max_linesearch' must be positive");
199
+ if(min_step < 0)
200
+ throw std::invalid_argument("'min_step' must be positive");
201
+ if(max_step < min_step )
202
+ throw std::invalid_argument("'max_step' must be greater than 'min_step'");
203
+ if(ftol <= 0 || ftol >= 0.5)
204
+ throw std::invalid_argument("'ftol' must satisfy 0 < ftol < 0.5");
205
+ if(wolfe <= ftol || wolfe >= 1)
206
+ throw std::invalid_argument("'wolfe' must satisfy ftol < wolfe < 1");
207
+ }
208
+ };
209
+
210
+
211
+ } // namespace LBFGSpp
212
+
213
+ #endif // PARAM_H