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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3 -0
- data/LICENSE.txt +22 -0
- data/README.md +123 -0
- data/ext/tomoto/ext.cpp +245 -0
- data/ext/tomoto/extconf.rb +28 -0
- data/lib/tomoto.rb +12 -0
- data/lib/tomoto/ct.rb +11 -0
- data/lib/tomoto/hdp.rb +11 -0
- data/lib/tomoto/lda.rb +67 -0
- data/lib/tomoto/version.rb +3 -0
- data/vendor/EigenRand/EigenRand/Core.h +1139 -0
- data/vendor/EigenRand/EigenRand/Dists/Basic.h +111 -0
- data/vendor/EigenRand/EigenRand/Dists/Discrete.h +877 -0
- data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +108 -0
- data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +626 -0
- data/vendor/EigenRand/EigenRand/EigenRand +19 -0
- data/vendor/EigenRand/EigenRand/Macro.h +24 -0
- data/vendor/EigenRand/EigenRand/MorePacketMath.h +978 -0
- data/vendor/EigenRand/EigenRand/PacketFilter.h +286 -0
- data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +624 -0
- data/vendor/EigenRand/EigenRand/RandUtils.h +413 -0
- data/vendor/EigenRand/EigenRand/doc.h +220 -0
- data/vendor/EigenRand/LICENSE +21 -0
- data/vendor/EigenRand/README.md +288 -0
- data/vendor/eigen/COPYING.BSD +26 -0
- data/vendor/eigen/COPYING.GPL +674 -0
- data/vendor/eigen/COPYING.LGPL +502 -0
- data/vendor/eigen/COPYING.MINPACK +52 -0
- data/vendor/eigen/COPYING.MPL2 +373 -0
- data/vendor/eigen/COPYING.README +18 -0
- data/vendor/eigen/Eigen/CMakeLists.txt +19 -0
- data/vendor/eigen/Eigen/Cholesky +46 -0
- data/vendor/eigen/Eigen/CholmodSupport +48 -0
- data/vendor/eigen/Eigen/Core +537 -0
- data/vendor/eigen/Eigen/Dense +7 -0
- data/vendor/eigen/Eigen/Eigen +2 -0
- data/vendor/eigen/Eigen/Eigenvalues +61 -0
- data/vendor/eigen/Eigen/Geometry +62 -0
- data/vendor/eigen/Eigen/Householder +30 -0
- data/vendor/eigen/Eigen/IterativeLinearSolvers +48 -0
- data/vendor/eigen/Eigen/Jacobi +33 -0
- data/vendor/eigen/Eigen/LU +50 -0
- data/vendor/eigen/Eigen/MetisSupport +35 -0
- data/vendor/eigen/Eigen/OrderingMethods +73 -0
- data/vendor/eigen/Eigen/PaStiXSupport +48 -0
- data/vendor/eigen/Eigen/PardisoSupport +35 -0
- data/vendor/eigen/Eigen/QR +51 -0
- data/vendor/eigen/Eigen/QtAlignedMalloc +40 -0
- data/vendor/eigen/Eigen/SPQRSupport +34 -0
- data/vendor/eigen/Eigen/SVD +51 -0
- data/vendor/eigen/Eigen/Sparse +36 -0
- data/vendor/eigen/Eigen/SparseCholesky +45 -0
- data/vendor/eigen/Eigen/SparseCore +69 -0
- data/vendor/eigen/Eigen/SparseLU +46 -0
- data/vendor/eigen/Eigen/SparseQR +37 -0
- data/vendor/eigen/Eigen/StdDeque +27 -0
- data/vendor/eigen/Eigen/StdList +26 -0
- data/vendor/eigen/Eigen/StdVector +27 -0
- data/vendor/eigen/Eigen/SuperLUSupport +64 -0
- data/vendor/eigen/Eigen/UmfPackSupport +40 -0
- data/vendor/eigen/Eigen/src/Cholesky/LDLT.h +673 -0
- data/vendor/eigen/Eigen/src/Cholesky/LLT.h +542 -0
- data/vendor/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
- data/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +639 -0
- data/vendor/eigen/Eigen/src/Core/Array.h +329 -0
- data/vendor/eigen/Eigen/src/Core/ArrayBase.h +226 -0
- data/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +209 -0
- data/vendor/eigen/Eigen/src/Core/Assign.h +90 -0
- data/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +935 -0
- data/vendor/eigen/Eigen/src/Core/Assign_MKL.h +178 -0
- data/vendor/eigen/Eigen/src/Core/BandMatrix.h +353 -0
- data/vendor/eigen/Eigen/src/Core/Block.h +452 -0
- data/vendor/eigen/Eigen/src/Core/BooleanRedux.h +164 -0
- data/vendor/eigen/Eigen/src/Core/CommaInitializer.h +160 -0
- data/vendor/eigen/Eigen/src/Core/ConditionEstimator.h +175 -0
- data/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +1688 -0
- data/vendor/eigen/Eigen/src/Core/CoreIterators.h +127 -0
- data/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +184 -0
- data/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +866 -0
- data/vendor/eigen/Eigen/src/Core/CwiseTernaryOp.h +197 -0
- data/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +103 -0
- data/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +128 -0
- data/vendor/eigen/Eigen/src/Core/DenseBase.h +611 -0
- data/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +681 -0
- data/vendor/eigen/Eigen/src/Core/DenseStorage.h +570 -0
- data/vendor/eigen/Eigen/src/Core/Diagonal.h +260 -0
- data/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +343 -0
- data/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +28 -0
- data/vendor/eigen/Eigen/src/Core/Dot.h +318 -0
- data/vendor/eigen/Eigen/src/Core/EigenBase.h +159 -0
- data/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +146 -0
- data/vendor/eigen/Eigen/src/Core/Fuzzy.h +155 -0
- data/vendor/eigen/Eigen/src/Core/GeneralProduct.h +455 -0
- data/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +593 -0
- data/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +187 -0
- data/vendor/eigen/Eigen/src/Core/IO.h +225 -0
- data/vendor/eigen/Eigen/src/Core/Inverse.h +118 -0
- data/vendor/eigen/Eigen/src/Core/Map.h +171 -0
- data/vendor/eigen/Eigen/src/Core/MapBase.h +303 -0
- data/vendor/eigen/Eigen/src/Core/MathFunctions.h +1415 -0
- data/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +101 -0
- data/vendor/eigen/Eigen/src/Core/Matrix.h +459 -0
- data/vendor/eigen/Eigen/src/Core/MatrixBase.h +529 -0
- data/vendor/eigen/Eigen/src/Core/NestByValue.h +110 -0
- data/vendor/eigen/Eigen/src/Core/NoAlias.h +108 -0
- data/vendor/eigen/Eigen/src/Core/NumTraits.h +248 -0
- data/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +633 -0
- data/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +1035 -0
- data/vendor/eigen/Eigen/src/Core/Product.h +186 -0
- data/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +1112 -0
- data/vendor/eigen/Eigen/src/Core/Random.h +182 -0
- data/vendor/eigen/Eigen/src/Core/Redux.h +505 -0
- data/vendor/eigen/Eigen/src/Core/Ref.h +283 -0
- data/vendor/eigen/Eigen/src/Core/Replicate.h +142 -0
- data/vendor/eigen/Eigen/src/Core/ReturnByValue.h +117 -0
- data/vendor/eigen/Eigen/src/Core/Reverse.h +211 -0
- data/vendor/eigen/Eigen/src/Core/Select.h +162 -0
- data/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +352 -0
- data/vendor/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
- data/vendor/eigen/Eigen/src/Core/Solve.h +188 -0
- data/vendor/eigen/Eigen/src/Core/SolveTriangular.h +235 -0
- data/vendor/eigen/Eigen/src/Core/SolverBase.h +130 -0
- data/vendor/eigen/Eigen/src/Core/StableNorm.h +221 -0
- data/vendor/eigen/Eigen/src/Core/Stride.h +111 -0
- data/vendor/eigen/Eigen/src/Core/Swap.h +67 -0
- data/vendor/eigen/Eigen/src/Core/Transpose.h +403 -0
- data/vendor/eigen/Eigen/src/Core/Transpositions.h +407 -0
- data/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +983 -0
- data/vendor/eigen/Eigen/src/Core/VectorBlock.h +96 -0
- data/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +695 -0
- data/vendor/eigen/Eigen/src/Core/Visitor.h +273 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +451 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +439 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +637 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +51 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +391 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1316 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +430 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +322 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +1061 -0
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/Complex.h +103 -0
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/Half.h +674 -0
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +91 -0
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +333 -0
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +1124 -0
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +212 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +29 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +49 -0
- data/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +490 -0
- data/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +91 -0
- data/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +760 -0
- data/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +471 -0
- data/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +562 -0
- data/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +895 -0
- data/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +77 -0
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +397 -0
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +137 -0
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +945 -0
- data/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +168 -0
- data/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +475 -0
- data/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +188 -0
- data/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +136 -0
- data/vendor/eigen/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
- data/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +792 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2156 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +492 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +311 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +122 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +619 -0
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
- data/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +163 -0
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +521 -0
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +287 -0
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +260 -0
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +93 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +466 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +315 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +335 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +163 -0
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +145 -0
- data/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +398 -0
- data/vendor/eigen/Eigen/src/Core/util/Constants.h +547 -0
- data/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +83 -0
- data/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +302 -0
- data/vendor/eigen/Eigen/src/Core/util/MKL_support.h +130 -0
- data/vendor/eigen/Eigen/src/Core/util/Macros.h +1001 -0
- data/vendor/eigen/Eigen/src/Core/util/Memory.h +993 -0
- data/vendor/eigen/Eigen/src/Core/util/Meta.h +534 -0
- data/vendor/eigen/Eigen/src/Core/util/NonMPL2.h +3 -0
- data/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +27 -0
- data/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +218 -0
- data/vendor/eigen/Eigen/src/Core/util/XprHelper.h +821 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +459 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +654 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +546 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +870 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
- data/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +556 -0
- data/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +392 -0
- data/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +247 -0
- data/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +114 -0
- data/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +497 -0
- data/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +282 -0
- data/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +234 -0
- data/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +195 -0
- data/vendor/eigen/Eigen/src/Geometry/Quaternion.h +814 -0
- data/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +199 -0
- data/vendor/eigen/Eigen/src/Geometry/RotationBase.h +206 -0
- data/vendor/eigen/Eigen/src/Geometry/Scaling.h +170 -0
- data/vendor/eigen/Eigen/src/Geometry/Transform.h +1542 -0
- data/vendor/eigen/Eigen/src/Geometry/Translation.h +208 -0
- data/vendor/eigen/Eigen/src/Geometry/Umeyama.h +166 -0
- data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +161 -0
- data/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +103 -0
- data/vendor/eigen/Eigen/src/Householder/Householder.h +172 -0
- data/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +470 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +228 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +246 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +400 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +462 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +394 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +216 -0
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +115 -0
- data/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +462 -0
- data/vendor/eigen/Eigen/src/LU/Determinant.h +101 -0
- data/vendor/eigen/Eigen/src/LU/FullPivLU.h +891 -0
- data/vendor/eigen/Eigen/src/LU/InverseImpl.h +415 -0
- data/vendor/eigen/Eigen/src/LU/PartialPivLU.h +611 -0
- data/vendor/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
- data/vendor/eigen/Eigen/src/LU/arch/Inverse_SSE.h +338 -0
- data/vendor/eigen/Eigen/src/MetisSupport/MetisSupport.h +137 -0
- data/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +445 -0
- data/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +1843 -0
- data/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +157 -0
- data/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
- data/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +543 -0
- data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +653 -0
- data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
- data/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +562 -0
- data/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +676 -0
- data/vendor/eigen/Eigen/src/QR/HouseholderQR.h +409 -0
- data/vendor/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
- data/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +313 -0
- data/vendor/eigen/Eigen/src/SVD/BDCSVD.h +1246 -0
- data/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +804 -0
- data/vendor/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
- data/vendor/eigen/Eigen/src/SVD/SVDBase.h +315 -0
- data/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
- data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +689 -0
- data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +199 -0
- data/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +377 -0
- data/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +258 -0
- data/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
- data/vendor/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +216 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +603 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseColEtree.h +206 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +341 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +726 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +148 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +320 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseDot.h +98 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseMap.h +305 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +1403 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +405 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparsePermutation.h +178 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +169 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseRedux.h +49 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +397 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +656 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseTranspose.h +92 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +178 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +478 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseView.h +253 -0
- data/vendor/eigen/Eigen/src/SparseCore/TriangularSolver.h +315 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +773 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +301 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
- data/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +745 -0
- data/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +126 -0
- data/vendor/eigen/Eigen/src/StlSupport/StdList.h +106 -0
- data/vendor/eigen/Eigen/src/StlSupport/StdVector.h +131 -0
- data/vendor/eigen/Eigen/src/StlSupport/details.h +84 -0
- data/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +1027 -0
- data/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +506 -0
- data/vendor/eigen/Eigen/src/misc/Image.h +82 -0
- data/vendor/eigen/Eigen/src/misc/Kernel.h +79 -0
- data/vendor/eigen/Eigen/src/misc/RealSvd2x2.h +55 -0
- data/vendor/eigen/Eigen/src/misc/blas.h +440 -0
- data/vendor/eigen/Eigen/src/misc/lapack.h +152 -0
- data/vendor/eigen/Eigen/src/misc/lapacke.h +16291 -0
- data/vendor/eigen/Eigen/src/misc/lapacke_mangling.h +17 -0
- data/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +332 -0
- data/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +552 -0
- data/vendor/eigen/Eigen/src/plugins/BlockMethods.h +1058 -0
- data/vendor/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
- data/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +163 -0
- data/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
- data/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +85 -0
- data/vendor/eigen/README.md +3 -0
- data/vendor/eigen/bench/README.txt +55 -0
- data/vendor/eigen/bench/btl/COPYING +340 -0
- data/vendor/eigen/bench/btl/README +154 -0
- data/vendor/eigen/bench/tensors/README +21 -0
- data/vendor/eigen/blas/README.txt +6 -0
- data/vendor/eigen/demos/mandelbrot/README +10 -0
- data/vendor/eigen/demos/mix_eigen_and_c/README +9 -0
- data/vendor/eigen/demos/opengl/README +13 -0
- data/vendor/eigen/unsupported/Eigen/CXX11/src/Tensor/README.md +1760 -0
- data/vendor/eigen/unsupported/README.txt +50 -0
- data/vendor/tomotopy/LICENSE +21 -0
- data/vendor/tomotopy/README.kr.rst +375 -0
- data/vendor/tomotopy/README.rst +382 -0
- data/vendor/tomotopy/src/Labeling/FoRelevance.cpp +362 -0
- data/vendor/tomotopy/src/Labeling/FoRelevance.h +88 -0
- data/vendor/tomotopy/src/Labeling/Labeler.h +50 -0
- data/vendor/tomotopy/src/TopicModel/CT.h +37 -0
- data/vendor/tomotopy/src/TopicModel/CTModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/CTModel.hpp +293 -0
- data/vendor/tomotopy/src/TopicModel/DMR.h +51 -0
- data/vendor/tomotopy/src/TopicModel/DMRModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/DMRModel.hpp +374 -0
- data/vendor/tomotopy/src/TopicModel/DT.h +65 -0
- data/vendor/tomotopy/src/TopicModel/DTM.h +22 -0
- data/vendor/tomotopy/src/TopicModel/DTModel.cpp +15 -0
- data/vendor/tomotopy/src/TopicModel/DTModel.hpp +572 -0
- data/vendor/tomotopy/src/TopicModel/GDMR.h +37 -0
- data/vendor/tomotopy/src/TopicModel/GDMRModel.cpp +14 -0
- data/vendor/tomotopy/src/TopicModel/GDMRModel.hpp +485 -0
- data/vendor/tomotopy/src/TopicModel/HDP.h +74 -0
- data/vendor/tomotopy/src/TopicModel/HDPModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/HDPModel.hpp +592 -0
- data/vendor/tomotopy/src/TopicModel/HLDA.h +40 -0
- data/vendor/tomotopy/src/TopicModel/HLDAModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/HLDAModel.hpp +681 -0
- data/vendor/tomotopy/src/TopicModel/HPA.h +27 -0
- data/vendor/tomotopy/src/TopicModel/HPAModel.cpp +21 -0
- data/vendor/tomotopy/src/TopicModel/HPAModel.hpp +588 -0
- data/vendor/tomotopy/src/TopicModel/LDA.h +144 -0
- data/vendor/tomotopy/src/TopicModel/LDACVB0Model.hpp +442 -0
- data/vendor/tomotopy/src/TopicModel/LDAModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +1058 -0
- data/vendor/tomotopy/src/TopicModel/LLDA.h +45 -0
- data/vendor/tomotopy/src/TopicModel/LLDAModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/LLDAModel.hpp +203 -0
- data/vendor/tomotopy/src/TopicModel/MGLDA.h +63 -0
- data/vendor/tomotopy/src/TopicModel/MGLDAModel.cpp +17 -0
- data/vendor/tomotopy/src/TopicModel/MGLDAModel.hpp +558 -0
- data/vendor/tomotopy/src/TopicModel/PA.h +43 -0
- data/vendor/tomotopy/src/TopicModel/PAModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/PAModel.hpp +467 -0
- data/vendor/tomotopy/src/TopicModel/PLDA.h +17 -0
- data/vendor/tomotopy/src/TopicModel/PLDAModel.cpp +13 -0
- data/vendor/tomotopy/src/TopicModel/PLDAModel.hpp +214 -0
- data/vendor/tomotopy/src/TopicModel/SLDA.h +54 -0
- data/vendor/tomotopy/src/TopicModel/SLDAModel.cpp +17 -0
- data/vendor/tomotopy/src/TopicModel/SLDAModel.hpp +456 -0
- data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +692 -0
- data/vendor/tomotopy/src/Utils/AliasMethod.hpp +169 -0
- data/vendor/tomotopy/src/Utils/Dictionary.h +80 -0
- data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +181 -0
- data/vendor/tomotopy/src/Utils/LBFGS.h +202 -0
- data/vendor/tomotopy/src/Utils/LBFGS/LineSearchBacktracking.h +120 -0
- data/vendor/tomotopy/src/Utils/LBFGS/LineSearchBracketing.h +122 -0
- data/vendor/tomotopy/src/Utils/LBFGS/Param.h +213 -0
- data/vendor/tomotopy/src/Utils/LUT.hpp +82 -0
- data/vendor/tomotopy/src/Utils/MultiNormalDistribution.hpp +69 -0
- data/vendor/tomotopy/src/Utils/PolyaGamma.hpp +200 -0
- data/vendor/tomotopy/src/Utils/PolyaGammaHybrid.hpp +672 -0
- data/vendor/tomotopy/src/Utils/ThreadPool.hpp +150 -0
- data/vendor/tomotopy/src/Utils/Trie.hpp +220 -0
- data/vendor/tomotopy/src/Utils/TruncMultiNormal.hpp +94 -0
- data/vendor/tomotopy/src/Utils/Utils.hpp +337 -0
- data/vendor/tomotopy/src/Utils/avx_gamma.h +46 -0
- data/vendor/tomotopy/src/Utils/avx_mathfun.h +736 -0
- data/vendor/tomotopy/src/Utils/exception.h +28 -0
- data/vendor/tomotopy/src/Utils/math.h +281 -0
- data/vendor/tomotopy/src/Utils/rtnorm.hpp +2690 -0
- data/vendor/tomotopy/src/Utils/sample.hpp +192 -0
- data/vendor/tomotopy/src/Utils/serializer.hpp +695 -0
- data/vendor/tomotopy/src/Utils/slp.hpp +131 -0
- data/vendor/tomotopy/src/Utils/sse_gamma.h +48 -0
- data/vendor/tomotopy/src/Utils/sse_mathfun.h +710 -0
- data/vendor/tomotopy/src/Utils/text.hpp +49 -0
- data/vendor/tomotopy/src/Utils/tvector.hpp +543 -0
- 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
|