casadi 3.6.5__cp38-none-macosx_11_0_arm64.whl → 3.6.7__cp38-none-macosx_11_0_arm64.whl
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.
- casadi/_casadi.so +0 -0
- casadi/casadi-cli +0 -0
- casadi/casadi.py +739 -308
- casadi/cbc +0 -0
- casadi/clp +0 -0
- casadi/cmake/casadi-config-version.cmake +1 -1
- casadi/cmake/casadi-targets.cmake +10 -6
- casadi/cmake/highs/highs-config.cmake +6 -13
- casadi/cmake/highs/highs-targets-release.cmake +13 -13
- casadi/cmake/highs/highs-targets.cmake +25 -22
- casadi/cmake/osqp/osqp-targets.cmake +10 -6
- casadi/cmake/proxsuite/proxsuiteConfigVersion.cmake +0 -5
- casadi/cmake/proxsuite/proxsuiteTargets.cmake +12 -12
- casadi/cmake/qdldl/qdldl-targets.cmake +10 -6
- casadi/cmake/sleqp/sleqp-config-version.cmake +0 -5
- casadi/cmake/sleqp/sleqp-targets.cmake +10 -6
- casadi/cmake/trlib/trlib-config-release.cmake +1 -1
- casadi/cmake/trlib/trlib-config-version.cmake +0 -5
- casadi/cmake/trlib/trlib-config.cmake +12 -12
- casadi/highs +0 -0
- casadi/include/casadi/casadi.i +3 -0
- casadi/include/casadi/casadi_c.h +2 -0
- casadi/include/casadi/config.h +9 -9
- casadi/include/casadi/core/casadi_common.hpp +1 -0
- casadi/include/casadi/core/casadi_export.h +1 -0
- casadi/include/casadi/core/casadi_misc.hpp +52 -0
- casadi/include/casadi/core/casadi_types.hpp +3 -2
- casadi/include/casadi/core/code_generator.hpp +30 -1
- casadi/include/casadi/core/global_options.hpp +2 -0
- casadi/include/casadi/core/mx.hpp +18 -3
- casadi/include/casadi/core/optistack.hpp +23 -0
- casadi/include/casadi/core/runtime/casadi_nlp.hpp +19 -4
- casadi/include/casadi/core/runtime/casadi_ocp_block.hpp +55 -0
- casadi/include/casadi/core/runtime/casadi_oracle.hpp +44 -0
- casadi/include/casadi/core/runtime/casadi_oracle_callback.hpp +39 -0
- casadi/include/casadi/core/runtime/casadi_runtime.hpp +4 -1
- casadi/include/casadi/core/runtime/casadi_scaled_copy.hpp +31 -0
- casadi/include/casadi/core/serializing_stream.hpp +2 -2
- casadi/include/casadi/core/sparsity.hpp +7 -0
- casadi/include/casadi/doc.i +1513 -1016
- casadi/include/casadi/doc_merged.i +965 -719
- casadi/include/casadi/mem.h +1 -0
- casadi/include/daqp/api.h +46 -0
- casadi/include/daqp/auxiliary.h +29 -0
- casadi/include/daqp/bnb.h +32 -0
- casadi/include/daqp/codegen.h +18 -0
- casadi/include/daqp/constants.h +92 -0
- casadi/include/daqp/daqp.h +22 -0
- casadi/include/daqp/daqp_prox.h +18 -0
- casadi/include/daqp/factorization.h +18 -0
- casadi/include/daqp/types.h +161 -0
- casadi/include/daqp/utils.h +44 -0
- casadi/include/fatrop/auxiliary/Common.hpp +34 -0
- casadi/include/fatrop/auxiliary/DynamicLib.hpp +34 -0
- casadi/include/fatrop/auxiliary/FatropOptions.hpp +68 -0
- casadi/include/fatrop/auxiliary/FatropVector.hpp +143 -0
- casadi/include/fatrop/auxiliary/LinearAlgebra.hpp +88 -0
- casadi/include/fatrop/auxiliary/VectorUtils.hpp +54 -0
- casadi/include/fatrop/blasfeo_wrapper/LinearAlgebraBlasfeo.hpp +493 -0
- casadi/include/fatrop/fatrop.hpp +39 -0
- casadi/include/fatrop/function_evaluation/CasadiCodegen.hpp +104 -0
- casadi/include/fatrop/function_evaluation/FunctionEvaluation.hpp +60 -0
- casadi/include/fatrop/json/json.h +946 -0
- casadi/include/fatrop/ocp/CasadiCApiUserdataWrap.hpp +87 -0
- casadi/include/fatrop/ocp/DuInfEvaluator.hpp +38 -0
- casadi/include/fatrop/ocp/FatropOCP.hpp +161 -0
- casadi/include/fatrop/ocp/FatropOCPBuilder.hpp +52 -0
- casadi/include/fatrop/ocp/FatropOCPResto.hpp +299 -0
- casadi/include/fatrop/ocp/OCP.hpp +82 -0
- casadi/include/fatrop/ocp/OCPAbstract.hpp +254 -0
- casadi/include/fatrop/ocp/OCPAdapter.hpp +197 -0
- casadi/include/fatrop/ocp/OCPCInterface.h +289 -0
- casadi/include/fatrop/ocp/OCPDims.hpp +60 -0
- casadi/include/fatrop/ocp/OCPInitializer.hpp +41 -0
- casadi/include/fatrop/ocp/OCPKKT.hpp +69 -0
- casadi/include/fatrop/ocp/OCPLSRiccati.hpp +198 -0
- casadi/include/fatrop/ocp/OCPLSScaler.hpp +66 -0
- casadi/include/fatrop/ocp/OCPLinearSolver.hpp +75 -0
- casadi/include/fatrop/ocp/OCPNoScaling.hpp +42 -0
- casadi/include/fatrop/ocp/OCPScalingMethod.hpp +42 -0
- casadi/include/fatrop/ocp/StageOCP.hpp +592 -0
- casadi/include/fatrop/ocp/StageOCPApplication.hpp +242 -0
- casadi/include/fatrop/ocp/StageOCPExpressions.hpp +182 -0
- casadi/include/fatrop/ocp/UStageEvalAbstract.hpp +168 -0
- casadi/include/fatrop/ocp/UStageOCPImpl.hpp +152 -0
- casadi/include/fatrop/quasi_newton/bfgs.hpp +159 -0
- casadi/include/fatrop/solver/AlgBuilder.hpp +76 -0
- casadi/include/fatrop/solver/AlgStrategy.hpp +33 -0
- casadi/include/fatrop/solver/FatropAlg.hpp +121 -0
- casadi/include/fatrop/solver/FatropData.hpp +188 -0
- casadi/include/fatrop/solver/FatropOptions.hpp +95 -0
- casadi/include/fatrop/solver/FatropPrinter.hpp +65 -0
- casadi/include/fatrop/solver/FatropStats.hpp +63 -0
- casadi/include/fatrop/solver/Filter.hpp +54 -0
- casadi/include/fatrop/solver/IterationData.hpp +56 -0
- casadi/include/fatrop/solver/LineSearch.hpp +86 -0
- casadi/include/fatrop/solver/NLPL1.hpp +263 -0
- casadi/include/fatrop/templates/NLPAlg.hpp +104 -0
- casadi/include/highs/HConfig.h +8 -7
- casadi/include/highs/Highs.h +93 -23
- casadi/include/highs/filereaderlp/def.hpp +19 -0
- casadi/include/highs/interfaces/highs_c_api.h +200 -24
- casadi/include/highs/io/Filereader.h +1 -1
- casadi/include/highs/io/FilereaderEms.h +1 -1
- casadi/include/highs/io/FilereaderLp.h +1 -1
- casadi/include/highs/io/FilereaderMps.h +1 -1
- casadi/include/highs/io/HMPSIO.h +1 -1
- casadi/include/highs/io/HMpsFF.h +5 -3
- casadi/include/highs/io/HighsIO.h +18 -8
- casadi/include/highs/io/LoadOptions.h +1 -1
- casadi/include/highs/ipm/IpxSolution.h +35 -0
- casadi/include/highs/ipm/IpxWrapper.h +1 -1
- casadi/include/highs/ipm/basiclu/basiclu.h +161 -0
- casadi/include/highs/ipm/basiclu/basiclu_factorize.h +247 -0
- casadi/include/highs/ipm/basiclu/basiclu_get_factors.h +108 -0
- casadi/include/highs/ipm/basiclu/basiclu_initialize.h +119 -0
- casadi/include/highs/ipm/basiclu/basiclu_obj_factorize.h +34 -0
- casadi/include/highs/ipm/basiclu/basiclu_obj_free.h +19 -0
- casadi/include/highs/ipm/basiclu/basiclu_obj_get_factors.h +34 -0
- casadi/include/highs/ipm/basiclu/basiclu_obj_initialize.h +46 -0
- casadi/include/highs/ipm/basiclu/basiclu_obj_solve_dense.h +29 -0
- casadi/include/highs/ipm/basiclu/basiclu_obj_solve_for_update.h +42 -0
- casadi/include/highs/ipm/basiclu/basiclu_obj_solve_sparse.h +32 -0
- casadi/include/highs/ipm/basiclu/basiclu_obj_update.h +31 -0
- casadi/include/highs/ipm/basiclu/basiclu_object.h +30 -0
- casadi/include/highs/ipm/basiclu/basiclu_solve_dense.h +75 -0
- casadi/include/highs/ipm/basiclu/basiclu_solve_for_update.h +169 -0
- casadi/include/highs/ipm/basiclu/basiclu_solve_sparse.h +112 -0
- casadi/include/highs/ipm/basiclu/basiclu_update.h +125 -0
- casadi/include/highs/ipm/basiclu/lu_def.h +39 -0
- casadi/include/highs/ipm/basiclu/lu_file.h +21 -0
- casadi/include/highs/ipm/basiclu/lu_internal.h +220 -0
- casadi/include/highs/ipm/basiclu/lu_list.h +168 -0
- casadi/include/highs/ipm/ipx/basiclu_kernel.h +20 -0
- casadi/include/highs/ipm/ipx/basiclu_wrapper.h +47 -0
- casadi/include/highs/ipm/ipx/basis.h +351 -0
- casadi/include/highs/ipm/ipx/conjugate_residuals.h +74 -0
- casadi/include/highs/ipm/ipx/control.h +163 -0
- casadi/include/highs/ipm/ipx/crossover.h +157 -0
- casadi/include/highs/ipm/ipx/diagonal_precond.h +45 -0
- casadi/include/highs/ipm/ipx/forrest_tomlin.h +102 -0
- casadi/include/highs/ipm/ipx/guess_basis.h +21 -0
- casadi/include/highs/ipm/ipx/indexed_vector.h +113 -0
- casadi/include/highs/ipm/ipx/info.h +27 -0
- casadi/include/highs/ipm/ipx/ipm.h +94 -0
- casadi/include/highs/ipm/ipx/ipx_c.h +47 -0
- casadi/include/highs/ipm/ipx/ipx_config.h +9 -0
- casadi/include/highs/ipm/ipx/ipx_info.h +111 -0
- casadi/include/highs/ipm/ipx/ipx_internal.h +88 -0
- casadi/include/highs/ipm/ipx/ipx_parameters.h +75 -0
- casadi/include/highs/ipm/ipx/ipx_status.h +57 -0
- casadi/include/highs/ipm/ipx/iterate.h +328 -0
- casadi/include/highs/ipm/ipx/kkt_solver.h +70 -0
- casadi/include/highs/ipm/ipx/kkt_solver_basis.h +66 -0
- casadi/include/highs/ipm/ipx/kkt_solver_diag.h +48 -0
- casadi/include/highs/ipm/ipx/linear_operator.h +26 -0
- casadi/include/highs/ipm/ipx/lp_solver.h +201 -0
- casadi/include/highs/ipm/ipx/lu_factorization.h +79 -0
- casadi/include/highs/ipm/ipx/lu_update.h +129 -0
- casadi/include/highs/ipm/ipx/maxvolume.h +54 -0
- casadi/include/highs/ipm/ipx/model.h +409 -0
- casadi/include/highs/ipm/ipx/multistream.h +52 -0
- casadi/include/highs/ipm/ipx/normal_matrix.h +44 -0
- casadi/include/highs/ipm/ipx/power_method.h +44 -0
- casadi/include/highs/ipm/ipx/sparse_matrix.h +195 -0
- casadi/include/highs/ipm/ipx/sparse_utils.h +58 -0
- casadi/include/highs/ipm/ipx/splitted_normal_matrix.h +63 -0
- casadi/include/highs/ipm/ipx/starting_basis.h +39 -0
- casadi/include/highs/ipm/ipx/symbolic_invert.h +29 -0
- casadi/include/highs/ipm/ipx/timer.h +24 -0
- casadi/include/highs/ipm/ipx/utils.h +39 -0
- casadi/include/highs/lp_data/HConst.h +20 -10
- casadi/include/highs/lp_data/HStruct.h +23 -1
- casadi/include/highs/lp_data/HighsAnalysis.h +1 -1
- casadi/include/highs/lp_data/HighsCallback.h +10 -3
- casadi/include/highs/lp_data/HighsCallbackStruct.h +31 -5
- casadi/include/highs/lp_data/HighsDebug.h +1 -1
- casadi/include/highs/lp_data/HighsInfo.h +20 -2
- casadi/include/highs/lp_data/HighsInfoDebug.h +1 -1
- casadi/include/highs/lp_data/HighsLp.h +17 -1
- casadi/include/highs/lp_data/HighsLpSolverObject.h +1 -1
- casadi/include/highs/lp_data/HighsLpUtils.h +19 -19
- casadi/include/highs/lp_data/HighsModelUtils.h +1 -1
- casadi/include/highs/lp_data/HighsOptions.h +237 -10
- casadi/include/highs/lp_data/HighsRanging.h +1 -1
- casadi/include/highs/lp_data/HighsRuntimeOptions.h +2 -2
- casadi/include/highs/lp_data/HighsSolution.h +2 -2
- casadi/include/highs/lp_data/HighsSolutionDebug.h +1 -1
- casadi/include/highs/lp_data/HighsSolve.h +3 -1
- casadi/include/highs/lp_data/HighsStatus.h +1 -1
- casadi/include/highs/mip/HighsCliqueTable.h +4 -4
- casadi/include/highs/mip/HighsConflictPool.h +1 -1
- casadi/include/highs/mip/HighsCutGeneration.h +1 -1
- casadi/include/highs/mip/HighsCutPool.h +2 -2
- casadi/include/highs/mip/HighsDebugSol.h +22 -29
- casadi/include/highs/mip/HighsDomain.h +10 -2
- casadi/include/highs/mip/HighsDomainChange.h +1 -1
- casadi/include/highs/mip/HighsDynamicRowMatrix.h +5 -3
- casadi/include/highs/mip/HighsGFkSolve.h +3 -3
- casadi/include/highs/mip/HighsImplications.h +3 -3
- casadi/include/highs/mip/HighsLpAggregator.h +1 -1
- casadi/include/highs/mip/HighsLpRelaxation.h +6 -1
- casadi/include/highs/mip/HighsMipSolver.h +4 -2
- casadi/include/highs/mip/HighsMipSolverData.h +47 -4
- casadi/include/highs/mip/HighsModkSeparator.h +2 -2
- casadi/include/highs/mip/HighsNodeQueue.h +5 -3
- casadi/include/highs/mip/HighsObjectiveFunction.h +1 -1
- casadi/include/highs/mip/HighsPathSeparator.h +2 -2
- casadi/include/highs/mip/HighsPrimalHeuristics.h +1 -1
- casadi/include/highs/mip/HighsPseudocost.h +35 -23
- casadi/include/highs/mip/HighsRedcostFixing.h +1 -1
- casadi/include/highs/mip/HighsSearch.h +2 -1
- casadi/include/highs/mip/HighsSeparation.h +1 -1
- casadi/include/highs/mip/HighsSeparator.h +1 -1
- casadi/include/highs/mip/HighsTableauSeparator.h +1 -1
- casadi/include/highs/mip/HighsTransformedLp.h +1 -1
- casadi/include/highs/model/HighsHessian.h +5 -0
- casadi/include/highs/model/HighsHessianUtils.h +2 -0
- casadi/include/highs/model/HighsModel.h +10 -1
- casadi/include/highs/parallel/HighsMutex.h +2 -1
- casadi/include/highs/parallel/HighsParallel.h +7 -2
- casadi/include/highs/parallel/HighsTask.h +1 -2
- casadi/include/highs/pdlp/CupdlpWrapper.h +93 -0
- casadi/include/highs/pdlp/cupdlp/cupdlp_cs.h +41 -0
- casadi/include/highs/pdlp/cupdlp/cupdlp_defs.h +423 -0
- casadi/include/highs/pdlp/cupdlp/cupdlp_linalg.h +183 -0
- casadi/include/highs/pdlp/cupdlp/cupdlp_proj.h +19 -0
- casadi/include/highs/pdlp/cupdlp/cupdlp_restart.h +31 -0
- casadi/include/highs/pdlp/cupdlp/cupdlp_scaling_cuda.h +28 -0
- casadi/include/highs/pdlp/cupdlp/cupdlp_solver.h +98 -0
- casadi/include/highs/pdlp/cupdlp/cupdlp_step.h +33 -0
- casadi/include/highs/pdlp/cupdlp/cupdlp_utils.c +1726 -0
- casadi/include/highs/pdqsort/pdqsort.h +532 -0
- casadi/include/highs/presolve/HPresolve.h +27 -14
- casadi/include/highs/presolve/HPresolveAnalysis.h +1 -1
- casadi/include/highs/presolve/HighsPostsolveStack.h +92 -68
- casadi/include/highs/presolve/HighsSymmetry.h +6 -5
- casadi/include/highs/presolve/ICrash.h +8 -2
- casadi/include/highs/presolve/ICrashUtil.h +1 -1
- casadi/include/highs/presolve/ICrashX.h +1 -1
- casadi/include/highs/presolve/PresolveComponent.h +1 -1
- casadi/include/highs/qpsolver/a_asm.hpp +23 -12
- casadi/include/highs/qpsolver/a_quass.hpp +8 -1
- casadi/include/highs/qpsolver/basis.hpp +150 -0
- casadi/include/highs/qpsolver/crashsolution.hpp +12 -0
- casadi/include/highs/qpsolver/dantzigpricing.hpp +72 -0
- casadi/include/highs/qpsolver/devexpricing.hpp +99 -0
- casadi/include/highs/qpsolver/eventhandler.hpp +23 -0
- casadi/include/highs/qpsolver/factor.hpp +400 -0
- casadi/include/highs/qpsolver/feasibility_bounded.hpp +105 -0
- casadi/include/highs/qpsolver/feasibility_highs.hpp +270 -0
- casadi/include/highs/qpsolver/gradient.hpp +39 -0
- casadi/include/highs/qpsolver/instance.hpp +63 -0
- casadi/include/highs/qpsolver/matrix.hpp +335 -0
- casadi/include/highs/qpsolver/pricing.hpp +15 -0
- casadi/include/highs/qpsolver/qpconst.hpp +27 -0
- casadi/include/highs/qpsolver/{vector.hpp → qpvector.hpp} +25 -25
- casadi/include/highs/qpsolver/quass.hpp +1 -1
- casadi/include/highs/qpsolver/ratiotest.hpp +19 -0
- casadi/include/highs/qpsolver/runtime.hpp +38 -0
- casadi/include/highs/qpsolver/settings.hpp +57 -0
- casadi/include/highs/qpsolver/snippets.hpp +29 -0
- casadi/include/highs/qpsolver/statistics.hpp +23 -0
- casadi/include/highs/qpsolver/steepestedgepricing.hpp +167 -0
- casadi/include/highs/simplex/HApp.h +1 -1
- casadi/include/highs/simplex/HEkk.h +52 -18
- casadi/include/highs/simplex/HEkkDual.h +1 -1
- casadi/include/highs/simplex/HEkkDualRHS.h +6 -7
- casadi/include/highs/simplex/HEkkDualRow.h +2 -2
- casadi/include/highs/simplex/HEkkPrimal.h +6 -1
- casadi/include/highs/simplex/HSimplex.h +1 -3
- casadi/include/highs/simplex/HSimplexDebug.h +1 -1
- casadi/include/highs/simplex/HSimplexNla.h +1 -1
- casadi/include/highs/simplex/HSimplexReport.h +1 -1
- casadi/include/highs/simplex/HighsSimplexAnalysis.h +228 -100
- casadi/include/highs/simplex/SimplexConst.h +1 -1
- casadi/include/highs/simplex/SimplexStruct.h +2 -2
- casadi/include/highs/simplex/SimplexTimer.h +1 -1
- casadi/include/highs/test/DevKkt.h +1 -1
- casadi/include/highs/test/KktCh2.h +1 -1
- casadi/include/highs/util/FactorTimer.h +1 -1
- casadi/include/highs/util/HFactor.h +35 -6
- casadi/include/highs/util/HFactorConst.h +1 -1
- casadi/include/highs/util/HFactorDebug.h +1 -1
- casadi/include/highs/util/HSet.h +1 -1
- casadi/include/highs/util/HVector.h +1 -1
- casadi/include/highs/util/HVectorBase.h +1 -1
- casadi/include/highs/util/HighsCDouble.h +3 -3
- casadi/include/highs/util/HighsComponent.h +1 -1
- casadi/include/highs/util/HighsDataStack.h +4 -4
- casadi/include/highs/util/HighsDisjointSets.h +1 -1
- casadi/include/highs/util/HighsHash.h +28 -21
- casadi/include/highs/util/HighsHashTree.h +63 -63
- casadi/include/highs/util/HighsInt.h +1 -1
- casadi/include/highs/util/HighsIntegers.h +8 -9
- casadi/include/highs/util/HighsLinearSumBounds.h +1 -1
- casadi/include/highs/util/HighsMatrixPic.h +1 -1
- casadi/include/highs/util/HighsMatrixSlice.h +9 -6
- casadi/include/highs/util/HighsMatrixUtils.h +1 -1
- casadi/include/highs/util/HighsMemoryAllocation.h +55 -0
- casadi/include/highs/util/HighsRandom.h +27 -15
- casadi/include/highs/util/HighsRbTree.h +2 -2
- casadi/include/highs/util/HighsSort.h +7 -7
- casadi/include/highs/util/HighsSparseMatrix.h +5 -2
- casadi/include/highs/util/HighsSparseVectorSum.h +2 -2
- casadi/include/highs/util/HighsSplay.h +1 -1
- casadi/include/highs/util/HighsTimer.h +18 -9
- casadi/include/highs/util/HighsUtils.h +15 -8
- casadi/include/highs/util/stringutil.h +9 -4
- casadi/include/highs/zstr/strict_fstream.hpp +237 -0
- casadi/include/highs/zstr/zstr.hpp +472 -0
- casadi/include/highs_export.h +43 -0
- casadi/include/licenses/daqp-external/LICENSE +21 -0
- casadi/include/licenses/{alpaqa-external/LICENSE → fatrop-external/LICENSE.txt} +2 -2
- casadi/include/licenses/fatrop-external/external/blasfeo/LICENSE.txt +26 -0
- casadi/include/licenses/fatrop-external/external/pybind11/LICENSE +29 -0
- casadi/include/licenses/fatrop-external/misc/license_header.txt +17 -0
- casadi/include/licenses/highs-external/{LICENSE → LICENSE.txt} +1 -1
- casadi/include/osqp/constants.h +2 -3
- casadi/include/osqp/version.h +9 -0
- casadi/include/sleqp/defs.h +4 -4
- casadi/include/sleqp/export.h +1 -0
- casadi/lib/cmake/tinyxml2/tinyxml2-config-version.cmake +0 -5
- casadi/lib/cmake/tinyxml2/tinyxml2-static-targets.cmake +10 -6
- casadi/lib/libtinyxml2.a +0 -0
- casadi/lib/pkgconfig/tinyxml2.pc +1 -1
- casadi/libCbc.3.10.11.dylib +0 -0
- casadi/libCbc.3.dylib +0 -0
- casadi/libCbc.dylib +0 -0
- casadi/libCbc.la +2 -2
- casadi/libCbcSolver.3.10.11.dylib +0 -0
- casadi/libCbcSolver.3.dylib +0 -0
- casadi/libCbcSolver.dylib +0 -0
- casadi/libCbcSolver.la +2 -2
- casadi/libCgl.1.10.8.dylib +0 -0
- casadi/libCgl.1.dylib +0 -0
- casadi/libCgl.dylib +0 -0
- casadi/libCgl.la +2 -2
- casadi/libClp.1.14.9.dylib +0 -0
- casadi/libClp.1.dylib +0 -0
- casadi/libClp.dylib +0 -0
- casadi/libClp.la +2 -2
- casadi/libClpSolver.1.14.9.dylib +0 -0
- casadi/libClpSolver.1.dylib +0 -0
- casadi/libClpSolver.dylib +0 -0
- casadi/libClpSolver.la +2 -2
- casadi/libCoinUtils.3.11.10.dylib +0 -0
- casadi/libCoinUtils.3.dylib +0 -0
- casadi/libCoinUtils.dylib +0 -0
- casadi/libCoinUtils.la +1 -1
- casadi/libOsi.1.13.9.dylib +0 -0
- casadi/libOsi.1.dylib +0 -0
- casadi/libOsi.dylib +0 -0
- casadi/libOsi.la +2 -2
- casadi/libOsiCbc.3.10.11.dylib +0 -0
- casadi/libOsiCbc.3.dylib +0 -0
- casadi/libOsiCbc.dylib +0 -0
- casadi/libOsiCbc.la +2 -2
- casadi/libOsiClp.1.14.9.dylib +0 -0
- casadi/libOsiClp.1.dylib +0 -0
- casadi/libOsiClp.dylib +0 -0
- casadi/libOsiClp.la +2 -2
- casadi/libOsiCommonTests.1.13.9.dylib +0 -0
- casadi/libOsiCommonTests.1.dylib +0 -0
- casadi/libOsiCommonTests.dylib +0 -0
- casadi/libOsiCommonTests.la +2 -2
- casadi/libblasfeo.dylib +0 -0
- casadi/libbonmin.4.8.9.dylib +0 -0
- casadi/libbonmin.4.dylib +0 -0
- casadi/libbonmin.dylib +0 -0
- casadi/libbonmin.la +2 -2
- casadi/libc++.1.0.dylib +0 -0
- casadi/libcasadi.3.7.dylib +0 -0
- casadi/libcasadi.dylib +0 -0
- casadi/libcasadi_conic_cbc.3.7.dylib +0 -0
- casadi/libcasadi_conic_cbc.dylib +0 -0
- casadi/libcasadi_conic_clp.3.7.dylib +0 -0
- casadi/libcasadi_conic_clp.dylib +0 -0
- casadi/libcasadi_conic_cplex.3.7.dylib +0 -0
- casadi/libcasadi_conic_cplex.dylib +0 -0
- casadi/libcasadi_conic_daqp.3.7.dylib +0 -0
- casadi/libcasadi_conic_daqp.dylib +0 -0
- casadi/libcasadi_conic_fatrop.3.7.dylib +0 -0
- casadi/libcasadi_conic_fatrop.dylib +0 -0
- casadi/libcasadi_conic_gurobi.3.7.dylib +0 -0
- casadi/libcasadi_conic_gurobi.dylib +0 -0
- casadi/libcasadi_conic_highs.3.7.dylib +0 -0
- casadi/libcasadi_conic_highs.dylib +0 -0
- casadi/libcasadi_conic_ipqp.3.7.dylib +0 -0
- casadi/libcasadi_conic_ipqp.dylib +0 -0
- casadi/libcasadi_conic_nlpsol.3.7.dylib +0 -0
- casadi/libcasadi_conic_nlpsol.dylib +0 -0
- casadi/libcasadi_conic_osqp.3.7.dylib +0 -0
- casadi/libcasadi_conic_osqp.dylib +0 -0
- casadi/libcasadi_conic_proxqp.3.7.dylib +0 -0
- casadi/libcasadi_conic_proxqp.dylib +0 -0
- casadi/libcasadi_conic_qpoases.3.7.dylib +0 -0
- casadi/libcasadi_conic_qpoases.dylib +0 -0
- casadi/libcasadi_conic_qrqp.3.7.dylib +0 -0
- casadi/libcasadi_conic_qrqp.dylib +0 -0
- casadi/libcasadi_conic_superscs.3.7.dylib +0 -0
- casadi/libcasadi_conic_superscs.dylib +0 -0
- casadi/libcasadi_importer_shell.3.7.dylib +0 -0
- casadi/libcasadi_importer_shell.dylib +0 -0
- casadi/libcasadi_integrator_collocation.3.7.dylib +0 -0
- casadi/libcasadi_integrator_collocation.dylib +0 -0
- casadi/libcasadi_integrator_cvodes.3.7.dylib +0 -0
- casadi/libcasadi_integrator_cvodes.dylib +0 -0
- casadi/libcasadi_integrator_idas.3.7.dylib +0 -0
- casadi/libcasadi_integrator_idas.dylib +0 -0
- casadi/libcasadi_integrator_rk.3.7.dylib +0 -0
- casadi/libcasadi_integrator_rk.dylib +0 -0
- casadi/libcasadi_interpolant_bspline.3.7.dylib +0 -0
- casadi/libcasadi_interpolant_bspline.dylib +0 -0
- casadi/libcasadi_interpolant_linear.3.7.dylib +0 -0
- casadi/libcasadi_interpolant_linear.dylib +0 -0
- casadi/libcasadi_linsol_csparse.3.7.dylib +0 -0
- casadi/libcasadi_linsol_csparse.dylib +0 -0
- casadi/libcasadi_linsol_csparsecholesky.3.7.dylib +0 -0
- casadi/libcasadi_linsol_csparsecholesky.dylib +0 -0
- casadi/libcasadi_linsol_lapacklu.3.7.dylib +0 -0
- casadi/libcasadi_linsol_lapacklu.dylib +0 -0
- casadi/libcasadi_linsol_lapackqr.3.7.dylib +0 -0
- casadi/libcasadi_linsol_lapackqr.dylib +0 -0
- casadi/libcasadi_linsol_ldl.3.7.dylib +0 -0
- casadi/libcasadi_linsol_ldl.dylib +0 -0
- casadi/libcasadi_linsol_lsqr.3.7.dylib +0 -0
- casadi/libcasadi_linsol_lsqr.dylib +0 -0
- casadi/libcasadi_linsol_ma27.3.7.dylib +0 -0
- casadi/libcasadi_linsol_ma27.dylib +0 -0
- casadi/libcasadi_linsol_mumps.3.7.dylib +0 -0
- casadi/libcasadi_linsol_mumps.dylib +0 -0
- casadi/libcasadi_linsol_qr.3.7.dylib +0 -0
- casadi/libcasadi_linsol_qr.dylib +0 -0
- casadi/libcasadi_linsol_symbolicqr.3.7.dylib +0 -0
- casadi/libcasadi_linsol_symbolicqr.dylib +0 -0
- casadi/libcasadi_linsol_tridiag.3.7.dylib +0 -0
- casadi/libcasadi_linsol_tridiag.dylib +0 -0
- casadi/libcasadi_nlpsol_ampl.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_ampl.dylib +0 -0
- casadi/libcasadi_nlpsol_blocksqp.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_blocksqp.dylib +0 -0
- casadi/libcasadi_nlpsol_bonmin.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_bonmin.dylib +0 -0
- casadi/libcasadi_nlpsol_fatrop.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_fatrop.dylib +0 -0
- casadi/libcasadi_nlpsol_feasiblesqpmethod.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_feasiblesqpmethod.dylib +0 -0
- casadi/libcasadi_nlpsol_ipopt.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_ipopt.dylib +0 -0
- casadi/libcasadi_nlpsol_knitro.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_knitro.dylib +0 -0
- casadi/libcasadi_nlpsol_madnlp.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_madnlp.dylib +0 -0
- casadi/libcasadi_nlpsol_qrsqp.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_qrsqp.dylib +0 -0
- casadi/libcasadi_nlpsol_scpgen.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_scpgen.dylib +0 -0
- casadi/libcasadi_nlpsol_sleqp.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_sleqp.dylib +0 -0
- casadi/libcasadi_nlpsol_snopt.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_snopt.dylib +0 -0
- casadi/libcasadi_nlpsol_sqpmethod.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_sqpmethod.dylib +0 -0
- casadi/libcasadi_rootfinder_fast_newton.3.7.dylib +0 -0
- casadi/libcasadi_rootfinder_fast_newton.dylib +0 -0
- casadi/libcasadi_rootfinder_kinsol.3.7.dylib +0 -0
- casadi/libcasadi_rootfinder_kinsol.dylib +0 -0
- casadi/libcasadi_rootfinder_newton.3.7.dylib +0 -0
- casadi/libcasadi_rootfinder_newton.dylib +0 -0
- casadi/libcasadi_rootfinder_nlpsol.3.7.dylib +0 -0
- casadi/libcasadi_rootfinder_nlpsol.dylib +0 -0
- casadi/libcasadi_sundials_common.3.7.dylib +0 -0
- casadi/libcasadi_sundials_common.dylib +0 -0
- casadi/libcasadi_xmlfile_tinyxml.3.7.dylib +0 -0
- casadi/libcasadi_xmlfile_tinyxml.dylib +0 -0
- casadi/libcoinmetis.2.dylib +0 -0
- casadi/libcoinmetis.dylib +0 -0
- casadi/libcoinmetis.la +1 -1
- casadi/libcoinmumps.3.dylib +0 -0
- casadi/libcoinmumps.dylib +0 -0
- casadi/libcoinmumps.la +2 -2
- casadi/libcplex_adaptor.dylib +0 -0
- casadi/{libamd.3.0.3.dylib → libdaqp.dylib} +0 -0
- casadi/libdaqpstat.a +0 -0
- casadi/libfatrop.dylib +0 -0
- casadi/libgcc_s.1.1.dylib +0 -0
- casadi/libgfortran.5.dylib +0 -0
- casadi/libgurobi_adaptor.dylib +0 -0
- casadi/libhighs.1.7.dylib +0 -0
- casadi/libhighs.1.dylib +0 -0
- casadi/libhighs.dylib +0 -0
- casadi/libindirect.a +0 -0
- casadi/libipopt.3.dylib +0 -0
- casadi/libipopt.dylib +0 -0
- casadi/libipopt.la +2 -2
- casadi/liblinsys.a +0 -0
- casadi/{libsuitesparseconfig.7.0.1.dylib → libmatlab_ipc.dylib} +0 -0
- casadi/libosqp.a +0 -0
- casadi/libosqp.dylib +0 -0
- casadi/libqdldl.a +0 -0
- casadi/libqdldl.dylib +0 -0
- casadi/libquadmath.0.dylib +0 -0
- casadi/libsipopt.3.dylib +0 -0
- casadi/libsipopt.dylib +0 -0
- casadi/libsipopt.la +2 -2
- casadi/libsleqp.1.0.1.dylib +0 -0
- casadi/libsleqp.dylib +0 -0
- casadi/libsuperscs.a +0 -0
- casadi/libtrlib.0.4.dylib +0 -0
- casadi/libtrlib.dylib +0 -0
- casadi/libz.1.2.13.dylib +0 -0
- casadi/pkgconfig/bonmin.pc +1 -1
- casadi/pkgconfig/casadi.pc +5 -5
- casadi/pkgconfig/cbc.pc +1 -1
- casadi/pkgconfig/cgl.pc +1 -1
- casadi/pkgconfig/clp.pc +1 -1
- casadi/pkgconfig/coinmetis.pc +1 -1
- casadi/pkgconfig/coinmumps.pc +2 -2
- casadi/pkgconfig/coinutils.pc +2 -2
- casadi/pkgconfig/highs.pc +4 -4
- casadi/pkgconfig/ipopt.pc +2 -2
- casadi/pkgconfig/osi-cbc.pc +1 -1
- casadi/pkgconfig/osi-clp.pc +1 -1
- casadi/pkgconfig/osi-unittests.pc +1 -1
- casadi/pkgconfig/osi.pc +1 -1
- casadi/pkgconfig/sleqp.pc +1 -1
- casadi/tools/__init__.py +4 -0
- casadi/tools/bounds.py +3 -3
- {casadi-3.6.5.dist-info → casadi-3.6.7.dist-info}/METADATA +2 -2
- {casadi-3.6.5.dist-info → casadi-3.6.7.dist-info}/RECORD +532 -477
- casadi/cmake/alpaqa/alpaqaConfig.cmake +0 -24
- casadi/cmake/alpaqa/alpaqaConfigVersion.cmake +0 -70
- casadi/cmake/alpaqa/alpaqaTargets-release.cmake +0 -19
- casadi/cmake/alpaqa/alpaqaTargets.cmake +0 -116
- casadi/include/alpaqa/accelerators/anderson.hpp +0 -133
- casadi/include/alpaqa/accelerators/internal/anderson-helpers.hpp +0 -92
- casadi/include/alpaqa/accelerators/internal/limited-memory-qr.hpp +0 -295
- casadi/include/alpaqa/accelerators/lbfgs.hpp +0 -244
- casadi/include/alpaqa/accelerators/steihaugcg.hpp +0 -143
- casadi/include/alpaqa/alpaqa.hpp +0 -3
- casadi/include/alpaqa/casadi/CasADiControlProblem.hpp +0 -185
- casadi/include/alpaqa/casadi/CasADiFunctionWrapper.hpp +0 -104
- casadi/include/alpaqa/casadi/CasADiProblem.hpp +0 -102
- casadi/include/alpaqa/casadi-loader-export.hpp +0 -15
- casadi/include/alpaqa/casadi-ocp-loader-export.hpp +0 -15
- casadi/include/alpaqa/config/config.hpp +0 -165
- casadi/include/alpaqa/dl/dl-problem.h +0 -476
- casadi/include/alpaqa/dl/dl-problem.hpp +0 -301
- casadi/include/alpaqa/export.h +0 -42
- casadi/include/alpaqa/export.hpp +0 -30
- casadi/include/alpaqa/implementation/accelerators/lbfgs.tpp +0 -240
- casadi/include/alpaqa/implementation/casadi/CasADiControlProblem.tpp +0 -594
- casadi/include/alpaqa/implementation/casadi/CasADiLoader-util.hpp +0 -50
- casadi/include/alpaqa/implementation/casadi/CasADiProblem.tpp +0 -425
- casadi/include/alpaqa/implementation/inner/directions/panoc/structured-lbfgs.tpp +0 -164
- casadi/include/alpaqa/implementation/inner/panoc-helpers.tpp +0 -389
- casadi/include/alpaqa/implementation/inner/panoc-ocp.tpp +0 -798
- casadi/include/alpaqa/implementation/inner/panoc.tpp +0 -448
- casadi/include/alpaqa/implementation/inner/pantr.tpp +0 -474
- casadi/include/alpaqa/implementation/inner/zerofpr.tpp +0 -482
- casadi/include/alpaqa/implementation/outer/alm.tpp +0 -228
- casadi/include/alpaqa/implementation/outer/internal/alm-helpers.tpp +0 -80
- casadi/include/alpaqa/implementation/params/params.tpp +0 -158
- casadi/include/alpaqa/implementation/problem/ocproblem.tpp +0 -56
- casadi/include/alpaqa/implementation/problem/type-erased-problem.tpp +0 -211
- casadi/include/alpaqa/implementation/util/io/csv.tpp +0 -120
- casadi/include/alpaqa/implementation/util/print.tpp +0 -151
- casadi/include/alpaqa/inner/directions/panoc/anderson.hpp +0 -98
- casadi/include/alpaqa/inner/directions/panoc/lbfgs.hpp +0 -94
- casadi/include/alpaqa/inner/directions/panoc/structured-lbfgs.hpp +0 -146
- casadi/include/alpaqa/inner/directions/panoc/structured-newton.hpp +0 -264
- casadi/include/alpaqa/inner/directions/panoc-direction-update.hpp +0 -96
- casadi/include/alpaqa/inner/directions/panoc-ocp/lqr.hpp +0 -181
- casadi/include/alpaqa/inner/directions/panoc-ocp/ocp-vars.hpp +0 -492
- casadi/include/alpaqa/inner/directions/pantr/newton-tr.hpp +0 -192
- casadi/include/alpaqa/inner/directions/pantr/pantr-direction.hpp +0 -99
- casadi/include/alpaqa/inner/inner-solve-options.hpp +0 -30
- casadi/include/alpaqa/inner/internal/lipschitz.hpp +0 -27
- casadi/include/alpaqa/inner/internal/panoc-helpers.hpp +0 -10
- casadi/include/alpaqa/inner/internal/panoc-stop-crit.hpp +0 -124
- casadi/include/alpaqa/inner/internal/solverstatus.hpp +0 -42
- casadi/include/alpaqa/inner/panoc-ocp.hpp +0 -302
- casadi/include/alpaqa/inner/panoc.hpp +0 -274
- casadi/include/alpaqa/inner/pantr.hpp +0 -284
- casadi/include/alpaqa/inner/zerofpr.hpp +0 -274
- casadi/include/alpaqa/ipopt/ipopt-adapter.hpp +0 -81
- casadi/include/alpaqa/ipopt/ipopt-enums.hpp +0 -35
- casadi/include/alpaqa/lbfgsb/lbfgsb-adapter.hpp +0 -111
- casadi/include/alpaqa/newton-tr-pantr-alm.hpp +0 -27
- casadi/include/alpaqa/outer/alm.hpp +0 -190
- casadi/include/alpaqa/outer/internal/alm-helpers.hpp +0 -10
- casadi/include/alpaqa/panoc-alm.hpp +0 -27
- casadi/include/alpaqa/panoc-anderson-alm.hpp +0 -27
- casadi/include/alpaqa/params/params.hpp +0 -60
- casadi/include/alpaqa/problem/box-constr-problem.hpp +0 -220
- casadi/include/alpaqa/problem/box.hpp +0 -82
- casadi/include/alpaqa/problem/functional-problem.hpp +0 -73
- casadi/include/alpaqa/problem/kkt-error.hpp +0 -43
- casadi/include/alpaqa/problem/ocproblem-counters.hpp +0 -116
- casadi/include/alpaqa/problem/ocproblem.hpp +0 -662
- casadi/include/alpaqa/problem/problem-counters.hpp +0 -116
- casadi/include/alpaqa/problem/problem-with-counters.hpp +0 -141
- casadi/include/alpaqa/problem/type-erased-problem.hpp +0 -874
- casadi/include/alpaqa/problem/unconstr-problem.hpp +0 -37
- casadi/include/alpaqa/structured-panoc-alm.hpp +0 -27
- casadi/include/alpaqa/structured-zerofpr-alm.hpp +0 -27
- casadi/include/alpaqa/util/alloc-check.hpp +0 -23
- casadi/include/alpaqa/util/atomic-stop-signal.hpp +0 -24
- casadi/include/alpaqa/util/check-dim.hpp +0 -64
- casadi/include/alpaqa/util/copyable_unique_ptr.hpp +0 -32
- casadi/include/alpaqa/util/demangled-typename.hpp +0 -9
- casadi/include/alpaqa/util/enumerate.hpp +0 -70
- casadi/include/alpaqa/util/float.hpp +0 -25
- casadi/include/alpaqa/util/index-set.hpp +0 -97
- casadi/include/alpaqa/util/io/csv.hpp +0 -43
- casadi/include/alpaqa/util/iter-adapter.hpp +0 -68
- casadi/include/alpaqa/util/max-history.hpp +0 -47
- casadi/include/alpaqa/util/noop-delete.hpp +0 -15
- casadi/include/alpaqa/util/not-implemented.hpp +0 -12
- casadi/include/alpaqa/util/print.hpp +0 -78
- casadi/include/alpaqa/util/quadmath/quadmath-print.hpp +0 -20
- casadi/include/alpaqa/util/quadmath/quadmath.hpp +0 -137
- casadi/include/alpaqa/util/required-method.hpp +0 -29
- casadi/include/alpaqa/util/ringbuffer.hpp +0 -212
- casadi/include/alpaqa/util/set-intersection.hpp +0 -129
- casadi/include/alpaqa/util/sparse-ops.hpp +0 -164
- casadi/include/alpaqa/util/timed.hpp +0 -22
- casadi/include/alpaqa/util/type-erasure.hpp +0 -568
- casadi/include/alpaqa/util/type-traits.hpp +0 -58
- casadi/include/alpaqa/zerofpr-alm.hpp +0 -27
- casadi/include/alpaqa/zerofpr-anderson-alm.hpp +0 -27
- casadi/include/alpaqa-version.h +0 -8
- casadi/include/highs/fortran/highs_fortran_api.mod +0 -0
- casadi/include/licenses/alpaqa-external/src/thirdparty/lbfgsb/Lbfgsb.3.0/License.txt +0 -71
- casadi/libFortranHighs.dylib +0 -0
- casadi/libalpaqa.1.0.0.dylib +0 -0
- casadi/libalpaqa.dylib +0 -0
- casadi/libcamd.3.0.3.dylib +0 -0
- casadi/libcasadi_nlpsol_alpaqa.3.7.dylib +0 -0
- casadi/libcasadi_nlpsol_alpaqa.dylib +0 -0
- casadi/libccolamd.3.0.3.dylib +0 -0
- casadi/libcholmod.4.0.3.dylib +0 -0
- casadi/libcholmod_cuda.4.0.3.dylib +0 -0
- casadi/libcolamd.3.0.3.dylib +0 -0
- casadi/libhighs.1.6.0.dylib +0 -0
- casadi/libhighs.1.6.dylib +0 -0
- casadi/libumfpack.6.1.0.dylib +0 -0
- {casadi-3.6.5.dist-info → casadi-3.6.7.dist-info}/WHEEL +0 -0
@@ -1,301 +0,0 @@
|
|
1
|
-
#pragma once
|
2
|
-
|
3
|
-
#include <alpaqa/config/config.hpp>
|
4
|
-
#include <alpaqa/dl/dl-problem.h>
|
5
|
-
#include <alpaqa/problem/box-constr-problem.hpp>
|
6
|
-
#include <alpaqa/util/demangled-typename.hpp>
|
7
|
-
|
8
|
-
#include <memory>
|
9
|
-
#include <stdexcept>
|
10
|
-
#include <string>
|
11
|
-
#include <string_view>
|
12
|
-
#include <type_traits>
|
13
|
-
|
14
|
-
namespace alpaqa::dl {
|
15
|
-
|
16
|
-
class DLLoader {
|
17
|
-
protected:
|
18
|
-
/// Load a shared library.
|
19
|
-
DLLoader(
|
20
|
-
/// Filename of the shared library to load.
|
21
|
-
std::string so_filename,
|
22
|
-
/// Prefix of the symbols in the library.
|
23
|
-
std::string symbol_prefix);
|
24
|
-
|
25
|
-
protected:
|
26
|
-
std::string so_filename;
|
27
|
-
std::string symbol_prefix;
|
28
|
-
|
29
|
-
using dl_handle_t = std::shared_ptr<void>;
|
30
|
-
/// Handle to the shared library (returned by `dlopen`).
|
31
|
-
dl_handle_t handle;
|
32
|
-
|
33
|
-
/// An associative array of additional functions exposed by the problem.
|
34
|
-
std::shared_ptr<function_dict_t> extra_functions;
|
35
|
-
|
36
|
-
/// Open the shared library using `dlopen`
|
37
|
-
[[nodiscard]] std::shared_ptr<void> load_lib() const;
|
38
|
-
/// Load a function with signature @p F from the library using `dlsym`.
|
39
|
-
template <class F>
|
40
|
-
[[nodiscard]] F *load_func(std::string_view name) const;
|
41
|
-
|
42
|
-
template <class Signature>
|
43
|
-
requires std::is_function_v<Signature>
|
44
|
-
const std::function<Signature> &extra_func(const std::string &name) const {
|
45
|
-
if (!extra_functions)
|
46
|
-
throw std::out_of_range("DLProblem: no extra functions");
|
47
|
-
auto it = extra_functions->dict.find(name);
|
48
|
-
if (it == extra_functions->dict.end())
|
49
|
-
throw std::out_of_range("DLProblem: no extra function named \"" +
|
50
|
-
name + '"');
|
51
|
-
try {
|
52
|
-
return std::any_cast<const std::function<Signature> &>(it->second);
|
53
|
-
} catch (const std::bad_any_cast &e) {
|
54
|
-
throw std::logic_error(
|
55
|
-
"DLProblem: incorrect type for extra function \"" + name +
|
56
|
-
"\" (stored type: " + demangled_typename(it->second.type()) +
|
57
|
-
')');
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
public:
|
62
|
-
/// Unique type for calling an extra function that is a member function.
|
63
|
-
struct instance_t;
|
64
|
-
|
65
|
-
protected:
|
66
|
-
template <class Func>
|
67
|
-
struct FuncTag {};
|
68
|
-
|
69
|
-
template <class Ret, class... FArgs, class... Args>
|
70
|
-
decltype(auto)
|
71
|
-
call_extra_func_helper(const void *instance,
|
72
|
-
FuncTag<Ret(const instance_t *, FArgs...)>,
|
73
|
-
const std::string &name, Args &&...args) const {
|
74
|
-
return extra_func<Ret(const void *, FArgs...)>(name)(
|
75
|
-
instance, std::forward<Args>(args)...);
|
76
|
-
}
|
77
|
-
|
78
|
-
template <class Ret, class... FArgs, class... Args>
|
79
|
-
decltype(auto)
|
80
|
-
call_extra_func_helper(void *instance, FuncTag<Ret(instance_t *, FArgs...)>,
|
81
|
-
const std::string &name, Args &&...args) {
|
82
|
-
return extra_func<Ret(void *, FArgs...)>(name)(
|
83
|
-
instance, std::forward<Args>(args)...);
|
84
|
-
}
|
85
|
-
|
86
|
-
template <class Ret, class... FArgs, class... Args>
|
87
|
-
decltype(auto) call_extra_func_helper(const void *, FuncTag<Ret(FArgs...)>,
|
88
|
-
const std::string &name,
|
89
|
-
Args &&...args) const {
|
90
|
-
return extra_func<Ret(FArgs...)>(name)(std::forward<Args>(args)...);
|
91
|
-
}
|
92
|
-
};
|
93
|
-
|
94
|
-
/// Class that loads a problem using `dlopen`.
|
95
|
-
///
|
96
|
-
/// The shared library should export a C function with the name
|
97
|
-
/// `<symbol_prefix>_register` that accepts a void pointer with user data, and
|
98
|
-
/// returns a struct of type @ref alpaqa_problem_register_t that contains all
|
99
|
-
/// data to represent the problem, as well as function pointers for all
|
100
|
-
/// required operations. See @ref C++/DLProblem/main.cpp
|
101
|
-
///
|
102
|
-
/// @note Copies are shallow, they all share the same problem instance, take
|
103
|
-
/// that into account when using multiple threads.
|
104
|
-
///
|
105
|
-
/// @ingroup grp_Problems
|
106
|
-
/// @see @ref TypeErasedProblem
|
107
|
-
class DLProblem : private DLLoader, public BoxConstrProblem<DefaultConfig> {
|
108
|
-
public:
|
109
|
-
USING_ALPAQA_CONFIG(DefaultConfig);
|
110
|
-
|
111
|
-
/// Load a problem from a shared library.
|
112
|
-
DLProblem(
|
113
|
-
/// Filename of the shared library to load.
|
114
|
-
std::string so_filename,
|
115
|
-
/// Prefix of the registration function.
|
116
|
-
std::string symbol_prefix = "alpaqa_problem",
|
117
|
-
/// Pointer to custom user data to pass to the registration function.
|
118
|
-
void *user_param = nullptr);
|
119
|
-
|
120
|
-
private:
|
121
|
-
/// Problem instance created by the registration function, including the
|
122
|
-
/// deleter to destroy it.
|
123
|
-
std::shared_ptr<void> instance;
|
124
|
-
/// Pointer to the struct of function pointers for evaluating the objective,
|
125
|
-
/// constraints, their gradients, etc.
|
126
|
-
problem_functions_t *functions = nullptr;
|
127
|
-
|
128
|
-
public:
|
129
|
-
// clang-format off
|
130
|
-
real_t eval_prox_grad_step(real_t γ, crvec x, crvec grad_ψ, rvec x̂, rvec p) const;
|
131
|
-
real_t eval_f(crvec x) const;
|
132
|
-
void eval_grad_f(crvec x, rvec grad_fx) const;
|
133
|
-
void eval_g(crvec x, rvec gx) const;
|
134
|
-
void eval_grad_g_prod(crvec x, crvec y, rvec grad_gxy) const;
|
135
|
-
void eval_jac_g(crvec x, rindexvec inner_idx, rindexvec outer_ptr, rvec J_values) const;
|
136
|
-
length_t get_jac_g_num_nonzeros() const;
|
137
|
-
void eval_grad_gi(crvec x, index_t i, rvec grad_gi) const;
|
138
|
-
void eval_hess_L_prod(crvec x, crvec y, real_t scale, crvec v, rvec Hv) const;
|
139
|
-
void eval_hess_L(crvec x, crvec y, real_t scale, rindexvec inner_idx, rindexvec outer_ptr, rvec H_values) const;
|
140
|
-
length_t get_hess_L_num_nonzeros() const;
|
141
|
-
void eval_hess_ψ_prod(crvec x, crvec y, crvec Σ, real_t scale, crvec v, rvec Hv) const;
|
142
|
-
void eval_hess_ψ(crvec x, crvec y, crvec Σ, real_t scale, rindexvec inner_idx, rindexvec outer_ptr, rvec H_values) const;
|
143
|
-
length_t get_hess_ψ_num_nonzeros() const;
|
144
|
-
real_t eval_f_grad_f(crvec x, rvec grad_fx) const;
|
145
|
-
real_t eval_f_g(crvec x, rvec g) const;
|
146
|
-
void eval_grad_f_grad_g_prod(crvec x, crvec y, rvec grad_f, rvec grad_gxy) const;
|
147
|
-
void eval_grad_L(crvec x, crvec y, rvec grad_L, rvec work_n) const;
|
148
|
-
real_t eval_ψ(crvec x, crvec y, crvec Σ, rvec ŷ) const;
|
149
|
-
void eval_grad_ψ(crvec x, crvec y, crvec Σ, rvec grad_ψ, rvec work_n, rvec work_m) const;
|
150
|
-
real_t eval_ψ_grad_ψ(crvec x, crvec y, crvec Σ, rvec grad_ψ, rvec work_n, rvec work_m) const;
|
151
|
-
|
152
|
-
[[nodiscard]] bool provides_eval_f() const;
|
153
|
-
[[nodiscard]] bool provides_eval_grad_f() const;
|
154
|
-
[[nodiscard]] bool provides_eval_g() const;
|
155
|
-
[[nodiscard]] bool provides_eval_grad_g_prod() const;
|
156
|
-
[[nodiscard]] bool provides_eval_jac_g() const;
|
157
|
-
[[nodiscard]] bool provides_get_jac_g_num_nonzeros() const;
|
158
|
-
[[nodiscard]] bool provides_eval_grad_gi() const;
|
159
|
-
[[nodiscard]] bool provides_eval_hess_L_prod() const;
|
160
|
-
[[nodiscard]] bool provides_eval_hess_L() const;
|
161
|
-
[[nodiscard]] bool provides_get_hess_L_num_nonzeros() const;
|
162
|
-
[[nodiscard]] bool provides_eval_hess_ψ_prod() const;
|
163
|
-
[[nodiscard]] bool provides_eval_hess_ψ() const;
|
164
|
-
[[nodiscard]] bool provides_get_hess_ψ_num_nonzeros() const;
|
165
|
-
[[nodiscard]] bool provides_eval_f_grad_f() const;
|
166
|
-
[[nodiscard]] bool provides_eval_f_g() const;
|
167
|
-
[[nodiscard]] bool provides_eval_grad_f_grad_g_prod() const;
|
168
|
-
[[nodiscard]] bool provides_eval_grad_L() const;
|
169
|
-
[[nodiscard]] bool provides_eval_ψ() const;
|
170
|
-
[[nodiscard]] bool provides_eval_grad_ψ() const;
|
171
|
-
[[nodiscard]] bool provides_eval_ψ_grad_ψ() const;
|
172
|
-
[[nodiscard]] bool provides_get_box_C() const;
|
173
|
-
// clang-format on
|
174
|
-
|
175
|
-
using instance_t = DLLoader::instance_t;
|
176
|
-
|
177
|
-
template <class Signature, class... Args>
|
178
|
-
decltype(auto) call_extra_func(const std::string &name,
|
179
|
-
Args &&...args) const {
|
180
|
-
return extra_func_helper(instance.get(), FuncTag<Signature>{}, name,
|
181
|
-
std::forward<Args>(args)...);
|
182
|
-
}
|
183
|
-
|
184
|
-
template <class Signature, class... Args>
|
185
|
-
decltype(auto) call_extra_func(const std::string &name, Args &&...args) {
|
186
|
-
return call_extra_func_helper(instance.get(), FuncTag<Signature>{},
|
187
|
-
name, std::forward<Args>(args)...);
|
188
|
-
}
|
189
|
-
};
|
190
|
-
|
191
|
-
#if ALPAQA_WITH_OCP
|
192
|
-
|
193
|
-
/// Class that loads an optimal control problem using `dlopen`.
|
194
|
-
///
|
195
|
-
/// The shared library should export a C function with the name
|
196
|
-
/// `<symbol_prefix>_register` that accepts a void pointer with user data, and
|
197
|
-
/// returns a struct of type @ref alpaqa_control_problem_register_t that
|
198
|
-
/// contains all data to represent the problem, as well as function pointers for
|
199
|
-
/// all required operations. See @ref C++/DLProblem/main.cpp
|
200
|
-
///
|
201
|
-
/// @note Copies are shallow, they all share the same problem instance, take
|
202
|
-
/// that into account when using multiple threads.
|
203
|
-
///
|
204
|
-
/// @ingroup grp_Problems
|
205
|
-
/// @see @ref TypeErasedControlProblem
|
206
|
-
class DLControlProblem : private DLLoader {
|
207
|
-
public:
|
208
|
-
USING_ALPAQA_CONFIG(DefaultConfig);
|
209
|
-
using Box = alpaqa::Box<config_t>;
|
210
|
-
|
211
|
-
/// Load a problem from a shared library.
|
212
|
-
DLControlProblem(
|
213
|
-
/// Filename of the shared library to load.
|
214
|
-
std::string so_filename,
|
215
|
-
/// Prefix of the registration function.
|
216
|
-
std::string symbol_prefix = "alpaqa_control_problem",
|
217
|
-
/// Pointer to custom user data to pass to the registration function.
|
218
|
-
void *user_param = nullptr);
|
219
|
-
|
220
|
-
private:
|
221
|
-
/// Problem instance created by the registration function, including the
|
222
|
-
/// deleter to destroy it.
|
223
|
-
std::shared_ptr<void> instance;
|
224
|
-
/// Pointer to the struct of function pointers for evaluating the objective,
|
225
|
-
/// constraints, their gradients, etc.
|
226
|
-
control_problem_functions_t *functions = nullptr;
|
227
|
-
|
228
|
-
public:
|
229
|
-
length_t get_N() const { return functions->N; }
|
230
|
-
length_t get_nx() const { return functions->nx; }
|
231
|
-
length_t get_nu() const { return functions->nu; }
|
232
|
-
length_t get_nh() const { return functions->nh; }
|
233
|
-
length_t get_nh_N() const { return functions->nh_N; }
|
234
|
-
length_t get_nc() const { return functions->nc; }
|
235
|
-
length_t get_nc_N() const { return functions->nc_N; }
|
236
|
-
|
237
|
-
void check() const {} // TODO
|
238
|
-
|
239
|
-
// clang-format off
|
240
|
-
void get_U(Box &U) const;
|
241
|
-
void get_D(Box &D) const;
|
242
|
-
void get_D_N(Box &D) const;
|
243
|
-
void get_x_init(rvec x_init) const;
|
244
|
-
void eval_f(index_t timestep, crvec x, crvec u, rvec fxu) const;
|
245
|
-
void eval_jac_f(index_t timestep, crvec x, crvec u, rmat J_fxu) const;
|
246
|
-
void eval_grad_f_prod(index_t timestep, crvec x, crvec u, crvec p, rvec grad_fxu_p) const;
|
247
|
-
void eval_h(index_t timestep, crvec x, crvec u, rvec h) const;
|
248
|
-
void eval_h_N(crvec x, rvec h) const;
|
249
|
-
[[nodiscard]] real_t eval_l(index_t timestep, crvec h) const;
|
250
|
-
[[nodiscard]] real_t eval_l_N(crvec h) const;
|
251
|
-
void eval_qr(index_t timestep, crvec xu, crvec h, rvec qr) const;
|
252
|
-
void eval_q_N(crvec x, crvec h, rvec q) const;
|
253
|
-
void eval_add_Q(index_t timestep, crvec xu, crvec h, rmat Q) const;
|
254
|
-
void eval_add_Q_N(crvec x, crvec h, rmat Q) const;
|
255
|
-
void eval_add_R_masked(index_t timestep, crvec xu, crvec h, crindexvec mask, rmat R, rvec work) const;
|
256
|
-
void eval_add_S_masked(index_t timestep, crvec xu, crvec h, crindexvec mask, rmat S, rvec work) const;
|
257
|
-
void eval_add_R_prod_masked(index_t timestep, crvec xu, crvec h, crindexvec mask_J, crindexvec mask_K, crvec v, rvec out, rvec work) const;
|
258
|
-
void eval_add_S_prod_masked(index_t timestep, crvec xu, crvec h, crindexvec mask_K, crvec v, rvec out, rvec work) const;
|
259
|
-
[[nodiscard]] length_t get_R_work_size() const;
|
260
|
-
[[nodiscard]] length_t get_S_work_size() const;
|
261
|
-
void eval_constr(index_t timestep, crvec x, rvec c) const;
|
262
|
-
void eval_constr_N(crvec x, rvec c) const;
|
263
|
-
void eval_grad_constr_prod(index_t timestep, crvec x, crvec p, rvec grad_cx_p) const;
|
264
|
-
void eval_grad_constr_prod_N(crvec x, crvec p, rvec grad_cx_p) const;
|
265
|
-
void eval_add_gn_hess_constr(index_t timestep, crvec x, crvec M, rmat out) const;
|
266
|
-
void eval_add_gn_hess_constr_N(crvec x, crvec M, rmat out) const;
|
267
|
-
|
268
|
-
[[nodiscard]] bool provides_get_D() const;
|
269
|
-
[[nodiscard]] bool provides_get_D_N() const;
|
270
|
-
[[nodiscard]] bool provides_eval_add_Q_N() const;
|
271
|
-
[[nodiscard]] bool provides_eval_add_R_prod_masked() const;
|
272
|
-
[[nodiscard]] bool provides_eval_add_S_prod_masked() const;
|
273
|
-
[[nodiscard]] bool provides_get_R_work_size() const;
|
274
|
-
[[nodiscard]] bool provides_get_S_work_size() const;
|
275
|
-
[[nodiscard]] bool provides_eval_constr() const;
|
276
|
-
[[nodiscard]] bool provides_eval_constr_N() const;
|
277
|
-
[[nodiscard]] bool provides_eval_grad_constr_prod() const;
|
278
|
-
[[nodiscard]] bool provides_eval_grad_constr_prod_N() const;
|
279
|
-
[[nodiscard]] bool provides_eval_add_gn_hess_constr() const;
|
280
|
-
[[nodiscard]] bool provides_eval_add_gn_hess_constr_N() const;
|
281
|
-
// clang-format on
|
282
|
-
|
283
|
-
using instance_t = DLLoader::instance_t;
|
284
|
-
|
285
|
-
template <class Signature, class... Args>
|
286
|
-
decltype(auto) call_extra_func(const std::string &name,
|
287
|
-
Args &&...args) const {
|
288
|
-
return extra_func_helper(instance.get(), FuncTag<Signature>{}, name,
|
289
|
-
std::forward<Args>(args)...);
|
290
|
-
}
|
291
|
-
|
292
|
-
template <class Signature, class... Args>
|
293
|
-
decltype(auto) call_extra_func(const std::string &name, Args &&...args) {
|
294
|
-
return call_extra_func_helper(instance.get(), FuncTag<Signature>{},
|
295
|
-
name, std::forward<Args>(args)...);
|
296
|
-
}
|
297
|
-
};
|
298
|
-
|
299
|
-
#endif
|
300
|
-
|
301
|
-
} // namespace alpaqa::dl
|
casadi/include/alpaqa/export.h
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
|
2
|
-
#ifndef ALPAQA_EXPORT_H
|
3
|
-
#define ALPAQA_EXPORT_H
|
4
|
-
|
5
|
-
#ifdef ALPAQA_STATIC_DEFINE
|
6
|
-
# define ALPAQA_EXPORT
|
7
|
-
# define ALPAQA_NO_EXPORT
|
8
|
-
#else
|
9
|
-
# ifndef ALPAQA_EXPORT
|
10
|
-
# ifdef alpaqa_EXPORTS
|
11
|
-
/* We are building this library */
|
12
|
-
# define ALPAQA_EXPORT __attribute__((visibility("default")))
|
13
|
-
# else
|
14
|
-
/* We are using this library */
|
15
|
-
# define ALPAQA_EXPORT __attribute__((visibility("default")))
|
16
|
-
# endif
|
17
|
-
# endif
|
18
|
-
|
19
|
-
# ifndef ALPAQA_NO_EXPORT
|
20
|
-
# define ALPAQA_NO_EXPORT __attribute__((visibility("hidden")))
|
21
|
-
# endif
|
22
|
-
#endif
|
23
|
-
|
24
|
-
#ifndef ALPAQA_DEPRECATED
|
25
|
-
# define ALPAQA_DEPRECATED __attribute__ ((__deprecated__))
|
26
|
-
#endif
|
27
|
-
|
28
|
-
#ifndef ALPAQA_DEPRECATED_EXPORT
|
29
|
-
# define ALPAQA_DEPRECATED_EXPORT ALPAQA_EXPORT ALPAQA_DEPRECATED
|
30
|
-
#endif
|
31
|
-
|
32
|
-
#ifndef ALPAQA_DEPRECATED_NO_EXPORT
|
33
|
-
# define ALPAQA_DEPRECATED_NO_EXPORT ALPAQA_NO_EXPORT ALPAQA_DEPRECATED
|
34
|
-
#endif
|
35
|
-
|
36
|
-
#if 0 /* DEFINE_NO_DEPRECATED */
|
37
|
-
# ifndef ALPAQA_NO_DEPRECATED
|
38
|
-
# define ALPAQA_NO_DEPRECATED
|
39
|
-
# endif
|
40
|
-
#endif
|
41
|
-
|
42
|
-
#endif /* ALPAQA_EXPORT_H */
|
casadi/include/alpaqa/export.hpp
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
#pragma once
|
2
|
-
|
3
|
-
#include <alpaqa/export.h>
|
4
|
-
|
5
|
-
#ifndef DOXYGEN
|
6
|
-
|
7
|
-
#ifdef _WIN32
|
8
|
-
#ifdef __GNUC__ // mingw
|
9
|
-
#define ALPAQA_EXPORT_EXTERN_TEMPLATE(strcls, name, ...)
|
10
|
-
#define ALPAQA_EXPORT_TEMPLATE(strcls, name, ...) \
|
11
|
-
template strcls ALPAQA_EXPORT name<__VA_ARGS__>
|
12
|
-
#else
|
13
|
-
#define ALPAQA_EXPORT_EXTERN_TEMPLATE(strcls, name, ...) \
|
14
|
-
extern template strcls name<__VA_ARGS__>
|
15
|
-
#define ALPAQA_EXPORT_TEMPLATE(strcls, name, ...) \
|
16
|
-
template strcls ALPAQA_EXPORT name<__VA_ARGS__>
|
17
|
-
#endif
|
18
|
-
#else
|
19
|
-
#define ALPAQA_EXPORT_EXTERN_TEMPLATE(strcls, name, ...) \
|
20
|
-
extern template strcls ALPAQA_EXPORT name<__VA_ARGS__>
|
21
|
-
#define ALPAQA_EXPORT_TEMPLATE(strcls, name, ...) \
|
22
|
-
template strcls ALPAQA_EXPORT name<__VA_ARGS__>
|
23
|
-
#endif
|
24
|
-
|
25
|
-
#else // DOXYGEN
|
26
|
-
|
27
|
-
#define ALPAQA_EXPORT_EXTERN_TEMPLATE(...)
|
28
|
-
#define ALPAQA_EXPORT_TEMPLATE(...)
|
29
|
-
|
30
|
-
#endif // DOXYGEN
|
@@ -1,240 +0,0 @@
|
|
1
|
-
#pragma once
|
2
|
-
|
3
|
-
#include <alpaqa/accelerators/lbfgs.hpp>
|
4
|
-
|
5
|
-
#include <cmath>
|
6
|
-
#include <limits>
|
7
|
-
#include <stdexcept>
|
8
|
-
|
9
|
-
namespace alpaqa {
|
10
|
-
|
11
|
-
template <Config Conf>
|
12
|
-
bool LBFGS<Conf>::update_valid(const Params ¶ms, real_t yᵀs, real_t sᵀs,
|
13
|
-
real_t pᵀp) {
|
14
|
-
// Check if this L-BFGS update is accepted
|
15
|
-
if (sᵀs <= params.min_abs_s)
|
16
|
-
return false;
|
17
|
-
if (not std::isfinite(yᵀs))
|
18
|
-
return false;
|
19
|
-
real_t a_yᵀs = params.force_pos_def ? yᵀs : std::abs(yᵀs);
|
20
|
-
if (a_yᵀs <= params.min_div_fac * sᵀs)
|
21
|
-
return false;
|
22
|
-
|
23
|
-
// CBFGS condition: https://epubs.siam.org/doi/10.1137/S1052623499354242
|
24
|
-
if (params.cbfgs) {
|
25
|
-
const real_t α = params.cbfgs.α;
|
26
|
-
const real_t ϵ = params.cbfgs.ϵ;
|
27
|
-
// Condition: yᵀs / sᵀs >= ϵ ‖p‖^α
|
28
|
-
bool cbfgs_cond = a_yᵀs >= sᵀs * ϵ * std::pow(pᵀp, α / 2);
|
29
|
-
if (not cbfgs_cond)
|
30
|
-
return false;
|
31
|
-
}
|
32
|
-
|
33
|
-
return true;
|
34
|
-
}
|
35
|
-
|
36
|
-
template <Config Conf>
|
37
|
-
bool LBFGS<Conf>::update_sy_impl(const auto &s, const auto &y,
|
38
|
-
real_t pₙₑₓₜᵀpₙₑₓₜ, bool forced) {
|
39
|
-
real_t yᵀs = y.dot(s);
|
40
|
-
real_t ρ = 1 / yᵀs;
|
41
|
-
if (not forced) {
|
42
|
-
real_t sᵀs = s.squaredNorm();
|
43
|
-
if (not update_valid(params, yᵀs, sᵀs, pₙₑₓₜᵀpₙₑₓₜ))
|
44
|
-
return false;
|
45
|
-
}
|
46
|
-
|
47
|
-
// Store the new s and y vectors
|
48
|
-
sto.s(idx) = s;
|
49
|
-
sto.y(idx) = y;
|
50
|
-
sto.ρ(idx) = ρ;
|
51
|
-
|
52
|
-
// Increment the index in the circular buffer
|
53
|
-
idx = succ(idx);
|
54
|
-
full |= idx == 0;
|
55
|
-
|
56
|
-
return true;
|
57
|
-
}
|
58
|
-
|
59
|
-
template <Config Conf>
|
60
|
-
bool LBFGS<Conf>::update_sy(crvec s, crvec y, real_t pₙₑₓₜᵀpₙₑₓₜ, bool forced) {
|
61
|
-
return update_sy_impl(s, y, pₙₑₓₜᵀpₙₑₓₜ, forced);
|
62
|
-
}
|
63
|
-
|
64
|
-
template <Config Conf>
|
65
|
-
bool LBFGS<Conf>::update(crvec xₖ, crvec xₙₑₓₜ, crvec pₖ, crvec pₙₑₓₜ,
|
66
|
-
Sign sign, bool forced) {
|
67
|
-
const auto s = xₙₑₓₜ - xₖ;
|
68
|
-
const auto y = (sign == Sign::Positive) ? pₙₑₓₜ - pₖ : pₖ - pₙₑₓₜ;
|
69
|
-
real_t pₙₑₓₜᵀpₙₑₓₜ = params.cbfgs ? pₙₑₓₜ.squaredNorm() : 0;
|
70
|
-
return update_sy_impl(s, y, pₙₑₓₜᵀpₙₑₓₜ, forced);
|
71
|
-
}
|
72
|
-
|
73
|
-
template <Config Conf>
|
74
|
-
bool LBFGS<Conf>::apply(rvec q, real_t γ) const {
|
75
|
-
// Only apply if we have previous vectors s and y
|
76
|
-
if (idx == 0 && not full)
|
77
|
-
return false;
|
78
|
-
|
79
|
-
// If the step size is negative, compute it as sᵀy/yᵀy
|
80
|
-
if (params.stepsize == LBFGSStepSize::BasedOnCurvature || γ < 0) {
|
81
|
-
auto new_idx = pred(idx);
|
82
|
-
real_t yᵀy = y(new_idx).squaredNorm();
|
83
|
-
γ = 1 / (ρ(new_idx) * yᵀy);
|
84
|
-
}
|
85
|
-
|
86
|
-
foreach_rev([&](index_t i) {
|
87
|
-
α(i) = ρ(i) * s(i).dot(q);
|
88
|
-
q -= α(i) * y(i);
|
89
|
-
});
|
90
|
-
|
91
|
-
// r ← H_0 q
|
92
|
-
q *= γ;
|
93
|
-
|
94
|
-
foreach_fwd([&](index_t i) {
|
95
|
-
real_t β = ρ(i) * y(i).dot(q);
|
96
|
-
q -= (β - α(i)) * s(i);
|
97
|
-
});
|
98
|
-
|
99
|
-
return true;
|
100
|
-
}
|
101
|
-
|
102
|
-
template <Config Conf>
|
103
|
-
bool LBFGS<Conf>::apply_masked_impl(rvec q, real_t γ, const auto &J) const {
|
104
|
-
// Only apply if we have previous vectors s and y
|
105
|
-
if (idx == 0 && not full)
|
106
|
-
return false;
|
107
|
-
const bool fullJ = q.size() == static_cast<index_t>(J.size());
|
108
|
-
|
109
|
-
// Use curvature to compute initial scale
|
110
|
-
if (params.stepsize == LBFGSStepSize::BasedOnCurvature)
|
111
|
-
γ = -1;
|
112
|
-
|
113
|
-
if (params.cbfgs)
|
114
|
-
throw std::invalid_argument("CBFGS check not supported when using "
|
115
|
-
"masked version of LBFGS::apply_masked()");
|
116
|
-
|
117
|
-
// Eigen 3.3.9 doesn't yet support indexing using a vector of indices
|
118
|
-
// so we'll have to do it manually.
|
119
|
-
// TODO: Abstract this away in an expression template / nullary expression?
|
120
|
-
// Or wait for Eigen update?
|
121
|
-
// Update: Eigen 3.4's indexing seems significantly slower, so the manual
|
122
|
-
// for loops stay for now.
|
123
|
-
|
124
|
-
// Dot product of two vectors, adding only the indices in set J
|
125
|
-
const auto dotJ = [&J, fullJ](const auto &a, const auto &b) {
|
126
|
-
if (fullJ) {
|
127
|
-
return a.dot(b);
|
128
|
-
} else {
|
129
|
-
real_t acc = 0;
|
130
|
-
for (auto j : J)
|
131
|
-
acc += a(j) * b(j);
|
132
|
-
return acc;
|
133
|
-
}
|
134
|
-
};
|
135
|
-
// y -= a x, scaling and subtracting only the indices in set J
|
136
|
-
const auto axmyJ = [&J, fullJ](real_t a, const auto &x, auto &y) {
|
137
|
-
if (fullJ) {
|
138
|
-
y -= a * x;
|
139
|
-
} else {
|
140
|
-
for (auto j : J)
|
141
|
-
y(j) -= a * x(j);
|
142
|
-
}
|
143
|
-
};
|
144
|
-
// x *= a, scaling only the indices in set J
|
145
|
-
const auto scalJ = [&J, fullJ](real_t a, auto &x) {
|
146
|
-
if (fullJ) {
|
147
|
-
x *= a;
|
148
|
-
} else {
|
149
|
-
for (auto j : J)
|
150
|
-
x(j) *= a;
|
151
|
-
}
|
152
|
-
};
|
153
|
-
|
154
|
-
foreach_rev([&](index_t i) {
|
155
|
-
// Recompute ρ, it depends on the index set J. Note that even if ρ was
|
156
|
-
// positive for the full vectors s and y, that's not necessarily the
|
157
|
-
// case for the smaller vectors s(J) and y(J).
|
158
|
-
real_t yᵀs = dotJ(s(i), y(i));
|
159
|
-
real_t sᵀs = dotJ(s(i), s(i));
|
160
|
-
ρ(i) = 1 / yᵀs;
|
161
|
-
// Check if we should include this pair of vectors
|
162
|
-
if (not update_valid(params, yᵀs, sᵀs, 0)) {
|
163
|
-
ρ(i) = NaN<config_t>;
|
164
|
-
return; // continue foreach
|
165
|
-
}
|
166
|
-
|
167
|
-
α(i) = ρ(i) * dotJ(s(i), q); // αᵢ = ρᵢ〈sᵢ, q〉
|
168
|
-
axmyJ(α(i), y(i), q); // q -= αᵢ yᵢ
|
169
|
-
|
170
|
-
if (γ < 0) {
|
171
|
-
// Compute step size based on most recent valid yᵀs/yᵀy
|
172
|
-
real_t yᵀy = dotJ(y(i), y(i));
|
173
|
-
γ = 1 / (ρ(i) * yᵀy);
|
174
|
-
}
|
175
|
-
});
|
176
|
-
|
177
|
-
// If all ρ == 0, fail
|
178
|
-
if (γ < 0)
|
179
|
-
return false;
|
180
|
-
|
181
|
-
// r ← H_0 q
|
182
|
-
scalJ(γ, q); // q *= γ
|
183
|
-
|
184
|
-
foreach_fwd([&](index_t i) {
|
185
|
-
if (std::isnan(ρ(i)))
|
186
|
-
return; // continue foreach
|
187
|
-
|
188
|
-
real_t β = ρ(i) * dotJ(y(i), q); // βᵢ = ρᵢ〈yᵢ, q〉
|
189
|
-
axmyJ(β - α(i), s(i), q); // q -= (βᵢ - αᵢ) sᵢ
|
190
|
-
});
|
191
|
-
|
192
|
-
return true;
|
193
|
-
}
|
194
|
-
|
195
|
-
template <Config Conf>
|
196
|
-
bool LBFGS<Conf>::apply_masked(rvec q, real_t γ, crindexvec J) const {
|
197
|
-
return apply_masked_impl(q, γ, J);
|
198
|
-
}
|
199
|
-
|
200
|
-
template <Config Conf>
|
201
|
-
bool LBFGS<Conf>::apply_masked(rvec q, real_t γ,
|
202
|
-
const std::vector<index_t> &J) const {
|
203
|
-
return apply_masked_impl(q, γ, J);
|
204
|
-
}
|
205
|
-
|
206
|
-
template <Config Conf>
|
207
|
-
void LBFGS<Conf>::reset() {
|
208
|
-
idx = 0;
|
209
|
-
full = false;
|
210
|
-
}
|
211
|
-
|
212
|
-
template <Config Conf>
|
213
|
-
void LBFGS<Conf>::resize(length_t n) {
|
214
|
-
if (params.memory < 1)
|
215
|
-
throw std::invalid_argument("LBFGS::Params::memory must be >= 1");
|
216
|
-
sto.resize(n, params.memory);
|
217
|
-
reset();
|
218
|
-
}
|
219
|
-
|
220
|
-
template <Config Conf>
|
221
|
-
void LBFGSStorage<Conf>::resize(length_t n, length_t history) {
|
222
|
-
sto.resize(n + 1, history * 2);
|
223
|
-
}
|
224
|
-
|
225
|
-
template <Config Conf>
|
226
|
-
void LBFGS<Conf>::scale_y(real_t factor) {
|
227
|
-
if (full) {
|
228
|
-
for (index_t i = 0; i < history(); ++i) {
|
229
|
-
y(i) *= factor;
|
230
|
-
ρ(i) *= 1 / factor;
|
231
|
-
}
|
232
|
-
} else {
|
233
|
-
for (index_t i = 0; i < idx; ++i) {
|
234
|
-
y(i) *= factor;
|
235
|
-
ρ(i) *= 1 / factor;
|
236
|
-
}
|
237
|
-
}
|
238
|
-
}
|
239
|
-
|
240
|
-
} // namespace alpaqa
|