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
@@ -0,0 +1,270 @@
|
|
1
|
+
#ifndef __SRC_LIB_FEASIBILITYHIGHS_HPP__
|
2
|
+
#define __SRC_LIB_FEASIBILITYHIGHS_HPP__
|
3
|
+
|
4
|
+
#include "Highs.h"
|
5
|
+
#include "qpsolver/a_asm.hpp"
|
6
|
+
#include "qpsolver/crashsolution.hpp"
|
7
|
+
|
8
|
+
static void computeStartingPointHighs(Instance& instance,
|
9
|
+
Settings& settings,
|
10
|
+
Statistics& stats,
|
11
|
+
QpModelStatus& modelstatus,
|
12
|
+
QpHotstartInformation& result,
|
13
|
+
HighsModelStatus& highs_model_status,
|
14
|
+
HighsBasis& highs_basis,
|
15
|
+
HighsSolution& highs_solution,
|
16
|
+
HighsTimer& timer) {
|
17
|
+
bool have_starting_point = false;
|
18
|
+
const bool debug_report = false;
|
19
|
+
if (highs_solution.value_valid) {
|
20
|
+
// #1350 add primal_feasibility_tolerance to settings
|
21
|
+
const double primal_feasibility_tolerance = settings.lambda_zero_threshold;
|
22
|
+
|
23
|
+
HighsInt num_var_infeasibilities = 0;
|
24
|
+
double max_var_infeasibility = 0;
|
25
|
+
double sum_var_infeasibilities = 0;
|
26
|
+
HighsInt num_con_infeasibilities = 0;
|
27
|
+
double max_con_infeasibility = 0;
|
28
|
+
double sum_con_infeasibilities = 0;
|
29
|
+
double max_con_residual = 0;
|
30
|
+
double sum_con_residuals = 0;
|
31
|
+
|
32
|
+
assessQpPrimalFeasibility(instance, primal_feasibility_tolerance,
|
33
|
+
highs_solution.col_value, highs_solution.row_value,
|
34
|
+
num_var_infeasibilities, max_var_infeasibility, sum_var_infeasibilities,
|
35
|
+
num_con_infeasibilities, max_con_infeasibility, sum_con_infeasibilities,
|
36
|
+
max_con_residual, sum_con_residuals);
|
37
|
+
|
38
|
+
if (debug_report) printf("computeStartingPointHighs highs_solution has (num / max / sum) "
|
39
|
+
"var (%d / %g / %g) and "
|
40
|
+
"con (%d / %g / %g) infeasibilities "
|
41
|
+
"with (max = %g; sum = %g) residuals\n",
|
42
|
+
int(num_var_infeasibilities), max_var_infeasibility, sum_var_infeasibilities,
|
43
|
+
int(num_con_infeasibilities), max_con_infeasibility, sum_con_infeasibilities,
|
44
|
+
max_con_residual, sum_con_residuals);
|
45
|
+
have_starting_point =
|
46
|
+
num_var_infeasibilities == 0 &&
|
47
|
+
num_con_infeasibilities == 0 &&
|
48
|
+
highs_basis.valid;
|
49
|
+
}
|
50
|
+
// compute initial feasible point
|
51
|
+
HighsBasis use_basis;
|
52
|
+
HighsSolution use_solution;
|
53
|
+
if (have_starting_point) {
|
54
|
+
use_basis = highs_basis;
|
55
|
+
use_solution = highs_solution;
|
56
|
+
} else {
|
57
|
+
Highs highs;
|
58
|
+
|
59
|
+
// set HiGHS to be silent
|
60
|
+
highs.setOptionValue("output_flag", false);
|
61
|
+
|
62
|
+
highs.setOptionValue("presolve", "on");
|
63
|
+
|
64
|
+
highs.setOptionValue("time_limit", settings.time_limit -
|
65
|
+
timer.readRunHighsClock());
|
66
|
+
|
67
|
+
HighsLp lp;
|
68
|
+
lp.a_matrix_.index_ = instance.A.mat.index;
|
69
|
+
lp.a_matrix_.start_ = instance.A.mat.start;
|
70
|
+
lp.a_matrix_.value_ = instance.A.mat.value;
|
71
|
+
lp.a_matrix_.format_ = MatrixFormat::kColwise;
|
72
|
+
lp.col_cost_.assign(instance.num_var, 0.0);
|
73
|
+
// lp.col_cost_ = runtime.instance.c.value;
|
74
|
+
lp.col_lower_ = instance.var_lo;
|
75
|
+
lp.col_upper_ = instance.var_up;
|
76
|
+
lp.row_lower_ = instance.con_lo;
|
77
|
+
lp.row_upper_ = instance.con_up;
|
78
|
+
lp.num_col_ = instance.num_var;
|
79
|
+
lp.num_row_ = instance.num_con;
|
80
|
+
|
81
|
+
// create artificial bounds for free variables: false by default
|
82
|
+
assert(!settings.phase1boundfreevars);
|
83
|
+
if (settings.phase1boundfreevars) {
|
84
|
+
for (HighsInt i=0; i<instance.num_var; i++) {
|
85
|
+
if (isfreevar(instance, i)) {
|
86
|
+
lp.col_lower_[i] = -1E5;
|
87
|
+
lp.col_upper_[i] = 1E5;
|
88
|
+
}
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
highs.passModel(lp);
|
93
|
+
// Make free variables basic: false by default
|
94
|
+
assert(!settings.phase1movefreevarsbasic);
|
95
|
+
if (settings.phase1movefreevarsbasic) {
|
96
|
+
HighsBasis basis;
|
97
|
+
basis.alien = true; // Set true when basis is instantiated
|
98
|
+
for (HighsInt i = 0; i < instance.num_con; i++) {
|
99
|
+
basis.row_status.push_back(HighsBasisStatus::kNonbasic);
|
100
|
+
}
|
101
|
+
|
102
|
+
for (HighsInt i = 0; i < instance.num_var; i++) {
|
103
|
+
// make free variables basic
|
104
|
+
if (instance.var_lo[i] == -kHighsInf &&
|
105
|
+
instance.var_up[i] == kHighsInf) {
|
106
|
+
// free variable
|
107
|
+
basis.col_status.push_back(HighsBasisStatus::kBasic);
|
108
|
+
} else {
|
109
|
+
basis.col_status.push_back(HighsBasisStatus::kNonbasic);
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
113
|
+
highs.setBasis(basis);
|
114
|
+
|
115
|
+
highs.setOptionValue("simplex_strategy", kSimplexStrategyPrimal);
|
116
|
+
}
|
117
|
+
|
118
|
+
HighsStatus status = highs.run();
|
119
|
+
if (status != HighsStatus::kOk) {
|
120
|
+
modelstatus = QpModelStatus::kError;
|
121
|
+
return;
|
122
|
+
}
|
123
|
+
|
124
|
+
stats.phase1_iterations = highs.getInfo().simplex_iteration_count;
|
125
|
+
|
126
|
+
HighsModelStatus phase1stat = highs.getModelStatus();
|
127
|
+
if (phase1stat == HighsModelStatus::kInfeasible) {
|
128
|
+
modelstatus = QpModelStatus::kInfeasible;
|
129
|
+
return;
|
130
|
+
}
|
131
|
+
|
132
|
+
use_basis = highs.getBasis();
|
133
|
+
use_solution = highs.getSolution();
|
134
|
+
}
|
135
|
+
|
136
|
+
HighsInt num_small_x0 = 0;
|
137
|
+
HighsInt num_small_ra = 0;
|
138
|
+
const double zero_activity_tolerance = have_starting_point ? 0 : 1e-4;
|
139
|
+
QpVector x0(instance.num_var);
|
140
|
+
QpVector ra(instance.num_con);
|
141
|
+
for (HighsInt i = 0; i < x0.dim; i++) {
|
142
|
+
if (fabs(use_solution.col_value[i]) > zero_activity_tolerance) {
|
143
|
+
x0.value[i] = use_solution.col_value[i];
|
144
|
+
x0.index[x0.num_nz++] = i;
|
145
|
+
} else if (fabs(use_solution.col_value[i]) > 0) {
|
146
|
+
num_small_x0++;
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
for (HighsInt i = 0; i < ra.dim; i++) {
|
151
|
+
if (fabs(use_solution.row_value[i]) > zero_activity_tolerance) {
|
152
|
+
ra.value[i] = use_solution.row_value[i];
|
153
|
+
ra.index[ra.num_nz++] = i;
|
154
|
+
} else if (fabs(use_solution.row_value[i]) > 0) {
|
155
|
+
num_small_ra++;
|
156
|
+
}
|
157
|
+
}
|
158
|
+
if (debug_report && num_small_x0+num_small_ra)
|
159
|
+
printf("feasibility_highs has %d small col values and %d small row values\n",
|
160
|
+
int(num_small_x0), int(num_small_ra));
|
161
|
+
std::vector<HighsInt> initial_active;
|
162
|
+
std::vector<HighsInt> initial_inactive;
|
163
|
+
std::vector<BasisStatus> initial_status;
|
164
|
+
|
165
|
+
const HighsInt num_highs_basis_status = HighsInt(HighsBasisStatus::kNonbasic)+1;
|
166
|
+
std::vector<HighsInt> debug_row_status_count;
|
167
|
+
debug_row_status_count.assign(num_highs_basis_status, 0);
|
168
|
+
for (HighsInt i = 0; i < HighsInt(use_basis.row_status.size()); i++) {
|
169
|
+
HighsBasisStatus status = use_basis.row_status[i];
|
170
|
+
debug_row_status_count[HighsInt(status)]++;
|
171
|
+
if (status == HighsBasisStatus::kLower) {
|
172
|
+
initial_active.push_back(i);
|
173
|
+
initial_status.push_back(BasisStatus::kActiveAtLower);
|
174
|
+
} else if (status == HighsBasisStatus::kUpper) {
|
175
|
+
initial_active.push_back(i);
|
176
|
+
initial_status.push_back(BasisStatus::kActiveAtUpper);
|
177
|
+
} else if (status == HighsBasisStatus::kZero) {
|
178
|
+
// Shouldn't happen, since free rows are basic in a logical
|
179
|
+
// basis and remain basic, or are removed by presolve and
|
180
|
+
// restored as basic in postsolve
|
181
|
+
assert(111==222);
|
182
|
+
// That said, a free row that is nonbasic in the Highs basis
|
183
|
+
// must be counted as inactive in the QP basis for accounting
|
184
|
+
// purposes
|
185
|
+
initial_inactive.push_back(i);
|
186
|
+
} else if (status != HighsBasisStatus::kBasic) {
|
187
|
+
assert(status == HighsBasisStatus::kNonbasic);
|
188
|
+
// Surely an error, but not a problem before, since simplex
|
189
|
+
// solver cannot return a HighsBasisStatus::kNonbasic
|
190
|
+
// variable. Does matter now, since a saved QP basis will
|
191
|
+
// generally have such variables.
|
192
|
+
//
|
193
|
+
// initial_inactive.push_back(instance.num_con + i);
|
194
|
+
//
|
195
|
+
// A HighsBasisStatus::kNonbasic variable corresponds one-to-one
|
196
|
+
// with being inactive in the QP basis
|
197
|
+
initial_inactive.push_back(i);
|
198
|
+
} else {
|
199
|
+
assert(status == HighsBasisStatus::kBasic);
|
200
|
+
}
|
201
|
+
}
|
202
|
+
|
203
|
+
std::vector<HighsInt> debug_col_status_count;
|
204
|
+
debug_col_status_count.assign(num_highs_basis_status, 0);
|
205
|
+
for (HighsInt i = 0; i < HighsInt(use_basis.col_status.size()); i++) {
|
206
|
+
HighsBasisStatus status = use_basis.col_status[i];
|
207
|
+
debug_col_status_count[HighsInt(status)]++;
|
208
|
+
if (status == HighsBasisStatus::kLower) {
|
209
|
+
if (isfreevar(instance, i)) {
|
210
|
+
initial_inactive.push_back(instance.num_con + i);
|
211
|
+
} else {
|
212
|
+
initial_active.push_back(instance.num_con + i);
|
213
|
+
initial_status.push_back(BasisStatus::kActiveAtLower);
|
214
|
+
}
|
215
|
+
|
216
|
+
} else if (status == HighsBasisStatus::kUpper) {
|
217
|
+
if (isfreevar(instance, i)) {
|
218
|
+
initial_inactive.push_back(instance.num_con + i);
|
219
|
+
} else {
|
220
|
+
initial_active.push_back(instance.num_con + i);
|
221
|
+
initial_status.push_back(BasisStatus::kActiveAtUpper);
|
222
|
+
}
|
223
|
+
|
224
|
+
} else if (status == HighsBasisStatus::kZero) {
|
225
|
+
initial_inactive.push_back(instance.num_con + i);
|
226
|
+
} else if (status != HighsBasisStatus::kBasic) {
|
227
|
+
assert(status == HighsBasisStatus::kNonbasic);
|
228
|
+
initial_inactive.push_back(instance.num_con + i);
|
229
|
+
} else {
|
230
|
+
assert(status == HighsBasisStatus::kBasic);
|
231
|
+
}
|
232
|
+
}
|
233
|
+
|
234
|
+
if (debug_report) {
|
235
|
+
printf("QP solver initial basis: (Lo / Bs / Up / Ze / Nb) for cols (");
|
236
|
+
for (HighsInt k = 0; k < num_highs_basis_status; k++)
|
237
|
+
printf("%s%d", k==0 ? "" : " / ", int(debug_col_status_count[k]));
|
238
|
+
printf(") and rows (");
|
239
|
+
for (HighsInt k = 0; k < num_highs_basis_status; k++)
|
240
|
+
printf("%s%d", k==0 ? "" : " / ", int(debug_row_status_count[k]));
|
241
|
+
printf(")\n");
|
242
|
+
}
|
243
|
+
|
244
|
+
assert((HighsInt)(initial_active.size() + initial_inactive.size()) ==
|
245
|
+
instance.num_var);
|
246
|
+
|
247
|
+
if (!have_starting_point) {
|
248
|
+
// When starting from a feasible basis, there will generally be
|
249
|
+
// inactive variables in the basis that aren't free
|
250
|
+
for (HighsInt ia : initial_inactive) {
|
251
|
+
if (ia < instance.num_con) {
|
252
|
+
// printf("free row %d\n", (int)ia);
|
253
|
+
assert(instance.con_lo[ia] == -kHighsInf);
|
254
|
+
assert(instance.con_up[ia] == kHighsInf);
|
255
|
+
} else {
|
256
|
+
// printf("free col %d\n", (int)ia);
|
257
|
+
assert(instance.var_lo[ia - instance.num_con] == -kHighsInf);
|
258
|
+
assert(instance.var_up[ia - instance.num_con] == kHighsInf);
|
259
|
+
}
|
260
|
+
}
|
261
|
+
}
|
262
|
+
|
263
|
+
result.status = initial_status;
|
264
|
+
result.active = initial_active;
|
265
|
+
result.inactive = initial_inactive;
|
266
|
+
result.primal = x0;
|
267
|
+
result.rowact = ra;
|
268
|
+
}
|
269
|
+
|
270
|
+
#endif
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#ifndef __SRC_LIB_GRADIENT_HPP__
|
2
|
+
#define __SRC_LIB_GRADIENT_HPP__
|
3
|
+
|
4
|
+
#include "runtime.hpp"
|
5
|
+
#include "qpvector.hpp"
|
6
|
+
|
7
|
+
class Gradient {
|
8
|
+
Runtime& runtime;
|
9
|
+
|
10
|
+
QpVector gradient;
|
11
|
+
bool uptodate;
|
12
|
+
HighsInt numupdates = 0;
|
13
|
+
|
14
|
+
public:
|
15
|
+
Gradient(Runtime& rt)
|
16
|
+
: runtime(rt), gradient(QpVector(rt.instance.num_var)), uptodate(false) {}
|
17
|
+
|
18
|
+
void recompute() {
|
19
|
+
runtime.instance.Q.vec_mat(runtime.primal, gradient);
|
20
|
+
gradient += runtime.instance.c;
|
21
|
+
uptodate = true;
|
22
|
+
numupdates = 0;
|
23
|
+
}
|
24
|
+
|
25
|
+
QpVector& getGradient() {
|
26
|
+
if (!uptodate ||
|
27
|
+
numupdates >= runtime.settings.gradientrecomputefrequency) {
|
28
|
+
recompute();
|
29
|
+
}
|
30
|
+
return gradient;
|
31
|
+
}
|
32
|
+
|
33
|
+
void update(QpVector& buffer_Qp, double stepsize) {
|
34
|
+
gradient.saxpy(stepsize, buffer_Qp);
|
35
|
+
numupdates++;
|
36
|
+
}
|
37
|
+
};
|
38
|
+
|
39
|
+
#endif
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#ifndef __SRC_LIB_INSTANCE_HPP__
|
2
|
+
#define __SRC_LIB_INSTANCE_HPP__
|
3
|
+
|
4
|
+
#include <vector>
|
5
|
+
|
6
|
+
#include "matrix.hpp"
|
7
|
+
#include "qpvector.hpp"
|
8
|
+
|
9
|
+
struct SumNum {
|
10
|
+
double sum = 0.0;
|
11
|
+
HighsInt num = 0;
|
12
|
+
};
|
13
|
+
|
14
|
+
struct Instance {
|
15
|
+
HighsInt sense = 1; // Minimization
|
16
|
+
HighsInt num_var = 0;
|
17
|
+
HighsInt num_con = 0;
|
18
|
+
double offset = 0;
|
19
|
+
QpVector c;
|
20
|
+
Matrix Q;
|
21
|
+
std::vector<double> con_lo;
|
22
|
+
std::vector<double> con_up;
|
23
|
+
Matrix A;
|
24
|
+
std::vector<double> var_lo;
|
25
|
+
std::vector<double> var_up;
|
26
|
+
|
27
|
+
Instance(HighsInt nv = 0, HighsInt nc = 0)
|
28
|
+
: num_var(nv),
|
29
|
+
num_con(nc),
|
30
|
+
c(QpVector(nv)),
|
31
|
+
Q(Matrix(nv, nv)),
|
32
|
+
A(Matrix(nc, nv)) {}
|
33
|
+
|
34
|
+
double objval(const QpVector& x) {
|
35
|
+
return c * x + 0.5 * (Q.vec_mat(x) * x) + offset;
|
36
|
+
}
|
37
|
+
|
38
|
+
SumNum sumnumprimalinfeasibilities(const QpVector& x,
|
39
|
+
const QpVector& rowactivity) {
|
40
|
+
SumNum res;
|
41
|
+
for (HighsInt row = 0; row < num_con; row++) {
|
42
|
+
if (rowactivity.value[row] < con_lo[row]) {
|
43
|
+
res.sum += (con_lo[row] - rowactivity.value[row]);
|
44
|
+
res.num++;
|
45
|
+
} else if (rowactivity.value[row] > con_up[row]) {
|
46
|
+
res.sum += (rowactivity.value[row] - con_up[row]);
|
47
|
+
res.num++;
|
48
|
+
}
|
49
|
+
}
|
50
|
+
for (HighsInt var = 0; var < num_var; var++) {
|
51
|
+
if (x.value[var] < var_lo[var]) {
|
52
|
+
res.sum += (var_lo[var] - x.value[var]);
|
53
|
+
res.num++;
|
54
|
+
} else if (x.value[var] > var_up[var]) {
|
55
|
+
res.sum += (x.value[var] - var_up[var]);
|
56
|
+
res.num++;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
return res;
|
60
|
+
}
|
61
|
+
};
|
62
|
+
|
63
|
+
#endif
|
@@ -0,0 +1,335 @@
|
|
1
|
+
#ifndef __SRC_LIB_MATRIX_HPP__
|
2
|
+
#define __SRC_LIB_MATRIX_HPP__
|
3
|
+
|
4
|
+
#include <cassert>
|
5
|
+
#include <vector>
|
6
|
+
|
7
|
+
#include "qpvector.hpp"
|
8
|
+
|
9
|
+
struct MatrixBase {
|
10
|
+
HighsInt num_row;
|
11
|
+
HighsInt num_col;
|
12
|
+
std::vector<HighsInt> start;
|
13
|
+
std::vector<HighsInt> index;
|
14
|
+
std::vector<double> value;
|
15
|
+
|
16
|
+
QpVector& mat_vec(const QpVector& other, QpVector& target) const {
|
17
|
+
return mat_vec_seq(other, target);
|
18
|
+
}
|
19
|
+
|
20
|
+
QpVector& mat_vec_seq(const QpVector& other, QpVector& target) const {
|
21
|
+
target.reset();
|
22
|
+
for (HighsInt i = 0; i < other.num_nz; i++) {
|
23
|
+
HighsInt col = other.index[i];
|
24
|
+
for (HighsInt idx = start[col]; idx < start[col + 1]; idx++) {
|
25
|
+
HighsInt row = index[idx];
|
26
|
+
target.value[row] += value[idx] * other.value[col];
|
27
|
+
}
|
28
|
+
}
|
29
|
+
target.resparsify();
|
30
|
+
return target;
|
31
|
+
}
|
32
|
+
|
33
|
+
QpVector mat_vec(const QpVector& other) {
|
34
|
+
QpVector result(num_row);
|
35
|
+
mat_vec(other, result);
|
36
|
+
return result;
|
37
|
+
}
|
38
|
+
|
39
|
+
QpVector vec_mat(HighsInt* idx, double* val, HighsInt nnz) {
|
40
|
+
QpVector result(num_col);
|
41
|
+
for (HighsInt i = 0; i < num_col; i++) {
|
42
|
+
double dot = 0.0;
|
43
|
+
// HighsInt idx_other = 0;
|
44
|
+
// HighsInt idx_this = start[i];
|
45
|
+
// while (idx_this < start[i+1] && idx_other < nnz) {
|
46
|
+
// if (idx[idx_other] == index[idx_this]) {
|
47
|
+
// dot += val[idx_other] * value[idx_this];
|
48
|
+
// } else if (idx[idx_other] < index[idx_this]) {
|
49
|
+
// idx_other++;
|
50
|
+
// } else {
|
51
|
+
// idx_this++;
|
52
|
+
// }
|
53
|
+
// }
|
54
|
+
|
55
|
+
for (HighsInt j = start[i]; j < start[i + 1]; j++) {
|
56
|
+
// does the vector have an entry for index index[j]?
|
57
|
+
double other_value = 0.0;
|
58
|
+
for (HighsInt k = 0; k < nnz; k++) {
|
59
|
+
if (idx[k] == index[j]) {
|
60
|
+
other_value = val[k];
|
61
|
+
break;
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
dot += other_value * value[j];
|
66
|
+
}
|
67
|
+
|
68
|
+
if (dot != 0.0) {
|
69
|
+
result.value[i] = dot;
|
70
|
+
result.index[result.num_nz] = i;
|
71
|
+
result.num_nz++;
|
72
|
+
}
|
73
|
+
}
|
74
|
+
return result;
|
75
|
+
}
|
76
|
+
|
77
|
+
QpVector& vec_mat(const QpVector& other, QpVector& target) const {
|
78
|
+
return vec_mat_1(other, target);
|
79
|
+
}
|
80
|
+
|
81
|
+
QpVector& vec_mat_1(const QpVector& other, QpVector& target) const {
|
82
|
+
target.reset();
|
83
|
+
for (HighsInt col = 0; col < num_col; col++) {
|
84
|
+
double dot = 0.0;
|
85
|
+
for (HighsInt j = start[col]; j < start[col + 1]; j++) {
|
86
|
+
dot += other.value[index[j]] * value[j];
|
87
|
+
}
|
88
|
+
target.value[col] = dot;
|
89
|
+
}
|
90
|
+
|
91
|
+
target.resparsify();
|
92
|
+
return target;
|
93
|
+
}
|
94
|
+
|
95
|
+
QpVector vec_mat(const QpVector& other) const {
|
96
|
+
QpVector result(num_col);
|
97
|
+
|
98
|
+
return vec_mat(other, result);
|
99
|
+
}
|
100
|
+
|
101
|
+
// computes this * mat, where "this" is a tranposed matrix
|
102
|
+
MatrixBase tran_mat_(const MatrixBase& other) {
|
103
|
+
MatrixBase res;
|
104
|
+
res.num_row = num_col;
|
105
|
+
res.num_col = other.num_col;
|
106
|
+
|
107
|
+
res.start.push_back(0);
|
108
|
+
QpVector buffer_col(other.num_row);
|
109
|
+
QpVector buffer_col_res(num_col);
|
110
|
+
for (HighsInt r = 0; r < other.num_col; r++) {
|
111
|
+
other.extractcol(r, buffer_col);
|
112
|
+
|
113
|
+
vec_mat(buffer_col, buffer_col_res);
|
114
|
+
for (HighsInt i = 0; i < buffer_col_res.num_nz; i++) {
|
115
|
+
res.index.push_back(buffer_col_res.index[i]);
|
116
|
+
res.value.push_back(buffer_col_res.value[buffer_col_res.index[i]]);
|
117
|
+
}
|
118
|
+
res.start.push_back(res.start[r] + buffer_col_res.num_nz);
|
119
|
+
}
|
120
|
+
|
121
|
+
return res;
|
122
|
+
}
|
123
|
+
|
124
|
+
QpVector& extractcol(HighsInt col, QpVector& target) const {
|
125
|
+
assert(target.dim == num_row);
|
126
|
+
target.reset();
|
127
|
+
|
128
|
+
if (col >= num_col) {
|
129
|
+
target.index[0] = col - num_col;
|
130
|
+
target.value[col - num_col] = 1.0;
|
131
|
+
target.num_nz = 1;
|
132
|
+
} else {
|
133
|
+
for (HighsInt i = 0; i < start[col + 1] - start[col]; i++) {
|
134
|
+
target.index[i] = index[start[col] + i];
|
135
|
+
target.value[target.index[i]] = value[start[col] + i];
|
136
|
+
}
|
137
|
+
target.num_nz = start[col + 1] - start[col];
|
138
|
+
}
|
139
|
+
|
140
|
+
return target;
|
141
|
+
}
|
142
|
+
|
143
|
+
QpVector extractcol(HighsInt col) const {
|
144
|
+
QpVector res(num_row);
|
145
|
+
|
146
|
+
return extractcol(col, res);
|
147
|
+
}
|
148
|
+
};
|
149
|
+
|
150
|
+
struct Matrix {
|
151
|
+
private:
|
152
|
+
MatrixBase tran;
|
153
|
+
bool has_transpose = false;
|
154
|
+
|
155
|
+
void transpose() {
|
156
|
+
if (!has_transpose) {
|
157
|
+
std::vector<std::vector<HighsInt>> row_indices(mat.num_row);
|
158
|
+
std::vector<std::vector<double>> row_values(mat.num_row);
|
159
|
+
|
160
|
+
for (HighsInt col = 0; col < mat.num_col; col++) {
|
161
|
+
for (HighsInt entry = mat.start[col]; entry < mat.start[col + 1];
|
162
|
+
entry++) {
|
163
|
+
HighsInt row = mat.index[entry];
|
164
|
+
double val = mat.value[entry];
|
165
|
+
row_indices[row].push_back(col);
|
166
|
+
row_values[row].push_back(val);
|
167
|
+
}
|
168
|
+
}
|
169
|
+
tran.start.clear();
|
170
|
+
tran.index.clear();
|
171
|
+
tran.value.clear();
|
172
|
+
tran.start.reserve(mat.num_row + 1);
|
173
|
+
tran.index.reserve(mat.index.size());
|
174
|
+
tran.value.reserve(mat.value.size());
|
175
|
+
|
176
|
+
tran.start.push_back(0);
|
177
|
+
for (HighsInt row = 0; row < mat.num_row; row++) {
|
178
|
+
tran.index.insert(tran.index.end(), row_indices[row].begin(),
|
179
|
+
row_indices[row].end());
|
180
|
+
tran.value.insert(tran.value.end(), row_values[row].begin(),
|
181
|
+
row_values[row].end());
|
182
|
+
|
183
|
+
tran.start.push_back(tran.start[row] + row_indices[row].size());
|
184
|
+
}
|
185
|
+
|
186
|
+
tran.num_col = mat.num_row;
|
187
|
+
tran.num_row = mat.num_col;
|
188
|
+
}
|
189
|
+
}
|
190
|
+
|
191
|
+
public:
|
192
|
+
MatrixBase mat;
|
193
|
+
|
194
|
+
Matrix(HighsInt nr, HighsInt nc) {
|
195
|
+
mat.num_row = nr;
|
196
|
+
mat.num_col = nc;
|
197
|
+
};
|
198
|
+
|
199
|
+
Matrix(const MatrixBase& m, bool needstran) {
|
200
|
+
mat = m;
|
201
|
+
// if (needstran) {
|
202
|
+
// transpose();
|
203
|
+
// }
|
204
|
+
}
|
205
|
+
|
206
|
+
void append(const QpVector& vec) {
|
207
|
+
if (mat.num_col == 0 && mat.start.size() == 0) {
|
208
|
+
mat.start.push_back(0);
|
209
|
+
}
|
210
|
+
for (HighsInt i = 0; i < vec.num_nz; i++) {
|
211
|
+
mat.index.push_back(vec.index[i]);
|
212
|
+
mat.value.push_back(vec.value[vec.index[i]]);
|
213
|
+
}
|
214
|
+
mat.start.push_back(mat.start[mat.num_col] + vec.num_nz);
|
215
|
+
mat.num_col++;
|
216
|
+
has_transpose = false;
|
217
|
+
}
|
218
|
+
|
219
|
+
void append(HighsInt* idx, double* val, HighsInt nnz) {
|
220
|
+
if (mat.num_col == 0 && mat.start.size() == 0) {
|
221
|
+
mat.start.push_back(0);
|
222
|
+
}
|
223
|
+
for (HighsInt i = 0; i < nnz; i++) {
|
224
|
+
mat.index.push_back(idx[i]);
|
225
|
+
mat.value.push_back(val[i]);
|
226
|
+
}
|
227
|
+
mat.start.push_back(mat.start[mat.num_col] + nnz);
|
228
|
+
mat.num_col++;
|
229
|
+
has_transpose = false;
|
230
|
+
}
|
231
|
+
|
232
|
+
void append(HighsInt num_nz, HighsInt* index, double* value) {
|
233
|
+
if (mat.num_col == 0 && mat.start.size() == 0) {
|
234
|
+
mat.start.push_back(0);
|
235
|
+
}
|
236
|
+
for (HighsInt i = 0; i < num_nz; i++) {
|
237
|
+
mat.index.push_back(index[i]);
|
238
|
+
mat.value.push_back(value[i]);
|
239
|
+
}
|
240
|
+
mat.start.push_back(mat.start[mat.num_col] + num_nz);
|
241
|
+
mat.num_col++;
|
242
|
+
has_transpose = false;
|
243
|
+
}
|
244
|
+
|
245
|
+
void dropcol(HighsInt col) {
|
246
|
+
assert(col < mat.num_col);
|
247
|
+
has_transpose = false;
|
248
|
+
|
249
|
+
mat.index.erase(mat.index.begin() + mat.start[col],
|
250
|
+
mat.index.begin() + mat.start[col + 1]);
|
251
|
+
mat.value.erase(mat.value.begin() + mat.start[col],
|
252
|
+
mat.value.begin() + mat.start[col + 1]);
|
253
|
+
|
254
|
+
HighsInt num_elements_in_col = mat.start[col + 1] - mat.start[col];
|
255
|
+
for (; col < mat.num_col; col++) {
|
256
|
+
mat.start[col] = mat.start[col + 1] - num_elements_in_col;
|
257
|
+
}
|
258
|
+
mat.start.pop_back();
|
259
|
+
mat.num_col--;
|
260
|
+
}
|
261
|
+
|
262
|
+
MatrixBase& t() {
|
263
|
+
if (!has_transpose) {
|
264
|
+
transpose();
|
265
|
+
has_transpose = true;
|
266
|
+
}
|
267
|
+
return tran;
|
268
|
+
}
|
269
|
+
|
270
|
+
Matrix mat_mat(Matrix& other) {
|
271
|
+
Matrix res(mat.num_row, 0);
|
272
|
+
|
273
|
+
QpVector buffer(other.mat.num_row);
|
274
|
+
QpVector buffer2(mat.num_col);
|
275
|
+
for (HighsInt col = 0; col < other.mat.num_col; col++) {
|
276
|
+
res.append(vec_mat(other.mat.extractcol(col, buffer), buffer2));
|
277
|
+
}
|
278
|
+
|
279
|
+
return res;
|
280
|
+
}
|
281
|
+
|
282
|
+
Matrix tran_mat(Matrix& other) {
|
283
|
+
Matrix res(mat.num_col, 0);
|
284
|
+
|
285
|
+
QpVector buffer(other.mat.num_row);
|
286
|
+
QpVector buffer2(mat.num_row);
|
287
|
+
for (HighsInt col = 0; col < other.mat.num_col; col++) {
|
288
|
+
res.append(mat_vec(other.mat.extractcol(col, buffer), buffer2));
|
289
|
+
}
|
290
|
+
return res;
|
291
|
+
}
|
292
|
+
|
293
|
+
QpVector& mat_vec(const QpVector& other, QpVector& target) {
|
294
|
+
return mat.mat_vec(other, target);
|
295
|
+
}
|
296
|
+
|
297
|
+
QpVector mat_vec(const QpVector& other) { return mat.mat_vec(other); }
|
298
|
+
|
299
|
+
QpVector vec_mat(const QpVector& other) const { return mat.vec_mat(other); }
|
300
|
+
|
301
|
+
QpVector& vec_mat(const QpVector& other, QpVector& target) const {
|
302
|
+
return mat.vec_mat(other, target);
|
303
|
+
}
|
304
|
+
|
305
|
+
QpVector vec_mat(HighsInt* index, double* value, HighsInt num_nz) {
|
306
|
+
return mat.vec_mat(index, value, num_nz);
|
307
|
+
}
|
308
|
+
|
309
|
+
void report(std::string name = "") const {
|
310
|
+
if (name != "") {
|
311
|
+
printf("%s:", name.c_str());
|
312
|
+
}
|
313
|
+
printf("[%" HIGHSINT_FORMAT " x %" HIGHSINT_FORMAT "]\n", mat.num_row,
|
314
|
+
mat.num_col);
|
315
|
+
printf("start: ");
|
316
|
+
for (HighsInt i : mat.start) {
|
317
|
+
printf("%" HIGHSINT_FORMAT " ", i);
|
318
|
+
}
|
319
|
+
printf("\n");
|
320
|
+
|
321
|
+
printf("index: ");
|
322
|
+
for (HighsInt i : mat.index) {
|
323
|
+
printf("%" HIGHSINT_FORMAT " ", i);
|
324
|
+
}
|
325
|
+
printf("\n");
|
326
|
+
|
327
|
+
printf("value: ");
|
328
|
+
for (double d : mat.value) {
|
329
|
+
printf("%lf ", d);
|
330
|
+
}
|
331
|
+
printf("\n");
|
332
|
+
}
|
333
|
+
};
|
334
|
+
|
335
|
+
#endif
|