casadi 3.6.7__cp312-none-win_amd64.whl → 3.7.0__cp312-none-win_amd64.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.pyd +0 -0
- casadi/blasfeo.lib +0 -0
- casadi/casadi-cli.exe +0 -0
- casadi/casadi.lib +0 -0
- casadi/casadi.py +6070 -3038
- casadi/cbc.exe +0 -0
- casadi/clp.exe +0 -0
- casadi/cmake/casadi-config-version.cmake +1 -1
- casadi/cmake/casadi-targets-release.cmake +5 -5
- casadi/cmake/casadi-targets.cmake +5 -5
- casadi/{lib/cmake/tinyxml2/tinyxml2-config-version.cmake → cmake/ghc_filesystem/ghc_filesystem-config-version.cmake} +19 -10
- casadi/cmake/ghc_filesystem/ghc_filesystem-config.cmake +30 -0
- casadi/cmake/ghc_filesystem/ghc_filesystem-targets.cmake +99 -0
- casadi/cmake/highs/highs-config.cmake +1 -0
- casadi/cmake/highs/highs-targets.cmake +2 -2
- casadi/cmake/libzip/libzip-config-version.cmake +48 -0
- casadi/cmake/libzip/libzip-config.cmake +69 -0
- casadi/cmake/libzip/libzip-targets-release.cmake +19 -0
- casadi/{lib/cmake/tinyxml2/tinyxml2-shared-targets.cmake → cmake/libzip/libzip-targets.cmake} +11 -7
- casadi/cmake/libzip/modules/FindMbedTLS.cmake +141 -0
- casadi/cmake/libzip/modules/FindNettle.cmake +141 -0
- casadi/cmake/libzip/modules/Findzstd.cmake +186 -0
- casadi/daqp.lib +0 -0
- casadi/fatrop.lib +0 -0
- casadi/highs.exe +0 -0
- casadi/highs.lib +0 -0
- casadi/hpipm.lib +0 -0
- casadi/include/casadi/casadi.i +194 -44
- casadi/include/casadi/config.h +11 -11
- casadi/include/casadi/core/archiver.hpp +58 -0
- casadi/include/casadi/core/blazing_spline.hpp +47 -0
- casadi/include/casadi/core/calculus.hpp +57 -2
- casadi/include/casadi/core/casadi_common.hpp +37 -0
- casadi/include/casadi/core/casadi_meta.hpp +15 -0
- casadi/include/casadi/core/casadi_misc.hpp +7 -0
- casadi/include/casadi/core/code_generator.hpp +95 -17
- casadi/include/casadi/core/core.hpp +5 -0
- casadi/include/casadi/core/dae_builder.hpp +283 -141
- casadi/include/casadi/core/dm.hpp +3 -0
- casadi/include/casadi/core/filesystem.hpp +58 -0
- casadi/include/casadi/core/fmu.hpp +51 -16
- casadi/include/casadi/core/function.hpp +19 -0
- casadi/include/casadi/core/generic_matrix.hpp +214 -7
- casadi/include/casadi/core/generic_shared.hpp +318 -0
- casadi/include/casadi/core/generic_shared_impl.hpp +214 -0
- casadi/include/casadi/core/generic_shared_internal.hpp +215 -0
- casadi/include/casadi/core/generic_type.hpp +3 -0
- casadi/include/casadi/core/global_options.hpp +10 -0
- casadi/include/casadi/core/integrator.hpp +41 -7
- casadi/include/casadi/core/matrix_decl.hpp +67 -0
- casadi/include/casadi/core/mx.hpp +63 -2
- casadi/include/casadi/core/options.hpp +6 -3
- casadi/include/casadi/core/optistack.hpp +43 -9
- casadi/include/casadi/core/printable.hpp +8 -0
- casadi/include/casadi/core/resource.hpp +107 -0
- casadi/include/casadi/core/runtime/casadi_blazing_1d_boor_eval.hpp +112 -0
- casadi/include/casadi/core/runtime/casadi_blazing_2d_boor_eval.hpp +311 -0
- casadi/include/casadi/core/runtime/casadi_blazing_3d_boor_eval.hpp +645 -0
- casadi/include/casadi/core/runtime/casadi_blazing_de_boor.hpp +101 -0
- casadi/include/casadi/core/runtime/casadi_nlp.hpp +8 -2
- casadi/include/casadi/core/runtime/casadi_printme.hpp +25 -0
- casadi/include/casadi/core/serializer.hpp +12 -4
- casadi/include/casadi/core/serializing_stream.hpp +3 -0
- casadi/include/casadi/core/shared_object.hpp +73 -161
- casadi/include/casadi/core/sparsity.hpp +13 -1
- casadi/include/casadi/core/sparsity_interface.hpp +19 -1
- casadi/include/casadi/core/sx.hpp +41 -0
- casadi/include/casadi/core/sx_elem.hpp +25 -0
- casadi/include/casadi/core/xml_node.hpp +5 -0
- casadi/include/casadi/doc.i +9703 -6539
- casadi/include/casadi/doc_merged.i +6483 -4447
- casadi/include/casadi/valgrind-casadi.supp +138 -0
- casadi/include/casadi/valgrind-python.supp +2470 -0
- casadi/include/fatrop/blasfeo_wrapper/LinearAlgebraBlasfeo.hpp +4 -1
- casadi/include/ghc/filesystem.hpp +6083 -0
- casadi/include/ghc/fs_fwd.hpp +38 -0
- casadi/include/ghc/fs_impl.hpp +35 -0
- casadi/include/ghc/fs_std.hpp +60 -0
- casadi/include/ghc/fs_std_fwd.hpp +63 -0
- casadi/include/ghc/fs_std_impl.hpp +46 -0
- casadi/include/highs/HConfig.h +7 -5
- casadi/include/highs/Highs.h +260 -86
- casadi/include/highs/filereaderlp/reader.hpp +10 -10
- casadi/include/highs/interfaces/highs_c_api.h +195 -22
- casadi/include/highs/io/Filereader.h +4 -6
- casadi/include/highs/io/FilereaderEms.h +0 -3
- casadi/include/highs/io/FilereaderLp.h +0 -3
- casadi/include/highs/io/FilereaderMps.h +0 -3
- casadi/include/highs/io/HMPSIO.h +1 -4
- casadi/include/highs/io/HMpsFF.h +8 -5
- casadi/include/highs/io/HighsIO.h +10 -5
- casadi/include/highs/io/LoadOptions.h +0 -3
- casadi/include/highs/ipm/IpxSolution.h +0 -3
- casadi/include/highs/ipm/IpxWrapper.h +4 -7
- casadi/include/highs/ipm/ipx/control.h +1 -0
- casadi/include/highs/ipm/ipx/ipx_parameters.h +1 -0
- casadi/include/highs/ipm/ipx/lp_solver.h +3 -2
- casadi/include/highs/ipm/ipx/model.h +7 -3
- casadi/include/highs/lp_data/HConst.h +21 -6
- casadi/include/highs/lp_data/HStruct.h +40 -4
- casadi/include/highs/lp_data/HighsAnalysis.h +0 -3
- casadi/include/highs/lp_data/HighsCallback.h +10 -3
- casadi/include/highs/lp_data/HighsCallbackStruct.h +3 -3
- casadi/include/highs/lp_data/HighsDebug.h +0 -3
- casadi/include/highs/lp_data/HighsIis.h +62 -0
- casadi/include/highs/lp_data/HighsInfo.h +50 -43
- casadi/include/highs/lp_data/HighsInfoDebug.h +0 -3
- casadi/include/highs/lp_data/HighsLp.h +2 -3
- casadi/include/highs/lp_data/HighsLpSolverObject.h +0 -3
- casadi/include/highs/lp_data/HighsLpUtils.h +38 -6
- casadi/include/highs/lp_data/HighsModelUtils.h +21 -18
- casadi/include/highs/lp_data/HighsOptions.h +134 -22
- casadi/include/highs/lp_data/HighsRanging.h +0 -3
- casadi/include/highs/lp_data/HighsSolution.h +10 -3
- casadi/include/highs/lp_data/HighsSolutionDebug.h +0 -3
- casadi/include/highs/lp_data/HighsSolve.h +0 -3
- casadi/include/highs/lp_data/HighsStatus.h +0 -3
- casadi/include/highs/mip/HighsCliqueTable.h +3 -3
- casadi/include/highs/mip/HighsConflictPool.h +0 -3
- casadi/include/highs/mip/HighsCutGeneration.h +13 -3
- casadi/include/highs/mip/HighsCutPool.h +0 -3
- casadi/include/highs/mip/HighsDebugSol.h +0 -3
- casadi/include/highs/mip/HighsDomain.h +16 -4
- casadi/include/highs/mip/HighsDomainChange.h +0 -3
- casadi/include/highs/mip/HighsDynamicRowMatrix.h +0 -3
- casadi/include/highs/mip/HighsGFkSolve.h +3 -6
- casadi/include/highs/mip/HighsImplications.h +29 -5
- casadi/include/highs/mip/HighsLpAggregator.h +0 -3
- casadi/include/highs/mip/HighsLpRelaxation.h +0 -3
- casadi/include/highs/mip/HighsMipAnalysis.h +52 -0
- casadi/include/highs/mip/HighsMipSolver.h +11 -4
- casadi/include/highs/mip/HighsMipSolverData.h +67 -6
- casadi/include/highs/mip/HighsModkSeparator.h +1 -4
- casadi/include/highs/mip/HighsNodeQueue.h +0 -3
- casadi/include/highs/mip/HighsObjectiveFunction.h +0 -3
- casadi/include/highs/mip/HighsPathSeparator.h +1 -4
- casadi/include/highs/mip/HighsPrimalHeuristics.h +7 -5
- casadi/include/highs/mip/HighsPseudocost.h +0 -3
- casadi/include/highs/mip/HighsRedcostFixing.h +0 -3
- casadi/include/highs/mip/HighsSearch.h +0 -3
- casadi/include/highs/mip/HighsSeparation.h +0 -3
- casadi/include/highs/mip/HighsSeparator.h +1 -5
- casadi/include/highs/mip/HighsTableauSeparator.h +1 -4
- casadi/include/highs/mip/HighsTransformedLp.h +0 -3
- casadi/include/highs/mip/MipTimer.h +471 -0
- casadi/include/highs/parallel/HighsBinarySemaphore.h +1 -1
- casadi/include/highs/parallel/HighsCacheAlign.h +1 -1
- casadi/include/highs/parallel/HighsCombinable.h +1 -1
- casadi/include/highs/parallel/HighsMutex.h +1 -1
- casadi/include/highs/parallel/HighsRaceTimer.h +1 -1
- casadi/include/highs/parallel/HighsSchedulerConstants.h +1 -1
- casadi/include/highs/parallel/HighsSplitDeque.h +1 -1
- casadi/include/highs/parallel/HighsTaskExecutor.h +68 -55
- casadi/include/highs/pdlp/CupdlpWrapper.h +18 -7
- casadi/include/highs/pdlp/cupdlp/cupdlp_cs.h +2 -3
- casadi/include/highs/pdlp/cupdlp/cupdlp_defs.h +16 -6
- casadi/include/highs/pdlp/cupdlp/cupdlp_linalg.h +10 -4
- casadi/include/highs/pdlp/cupdlp/cupdlp_proj.h +3 -3
- casadi/include/highs/pdlp/cupdlp/cupdlp_restart.h +6 -6
- casadi/include/highs/pdlp/cupdlp/cupdlp_scaling.h +26 -0
- casadi/include/highs/pdlp/cupdlp/cupdlp_solver.h +11 -11
- casadi/include/highs/pdlp/cupdlp/cupdlp_step.h +8 -4
- casadi/include/highs/pdlp/cupdlp/cupdlp_utils.c +253 -172
- casadi/include/highs/presolve/HPresolve.h +50 -10
- casadi/include/highs/presolve/HPresolveAnalysis.h +0 -3
- casadi/include/highs/presolve/HighsPostsolveStack.h +39 -6
- casadi/include/highs/presolve/HighsSymmetry.h +0 -3
- casadi/include/highs/presolve/ICrash.h +0 -3
- casadi/include/highs/presolve/ICrashUtil.h +1 -4
- casadi/include/highs/presolve/ICrashX.h +0 -3
- casadi/include/highs/presolve/PresolveComponent.h +0 -3
- casadi/include/highs/qpsolver/a_asm.hpp +20 -17
- casadi/include/highs/qpsolver/a_quass.hpp +5 -9
- casadi/include/highs/qpsolver/basis.hpp +12 -10
- casadi/include/highs/qpsolver/crashsolution.hpp +4 -3
- casadi/include/highs/qpsolver/dantzigpricing.hpp +3 -2
- casadi/include/highs/qpsolver/devexpricing.hpp +3 -1
- casadi/include/highs/qpsolver/factor.hpp +6 -5
- casadi/include/highs/qpsolver/feasibility_bounded.hpp +31 -29
- casadi/include/highs/qpsolver/feasibility_highs.hpp +94 -70
- casadi/include/highs/qpsolver/gradient.hpp +1 -1
- casadi/include/highs/qpsolver/instance.hpp +1 -1
- casadi/include/highs/qpsolver/pricing.hpp +2 -2
- casadi/include/highs/qpsolver/qpconst.hpp +2 -2
- casadi/include/highs/qpsolver/quass.hpp +2 -2
- casadi/include/highs/qpsolver/runtime.hpp +2 -2
- casadi/include/highs/qpsolver/settings.hpp +20 -8
- casadi/include/highs/qpsolver/steepestedgepricing.hpp +38 -39
- casadi/include/highs/simplex/HApp.h +88 -34
- casadi/include/highs/simplex/HEkk.h +24 -11
- casadi/include/highs/simplex/HEkkDual.h +2 -4
- casadi/include/highs/simplex/HEkkDualRHS.h +0 -3
- casadi/include/highs/simplex/HEkkDualRow.h +0 -3
- casadi/include/highs/simplex/HEkkPrimal.h +1 -5
- casadi/include/highs/simplex/HSimplex.h +0 -3
- casadi/include/highs/simplex/HSimplexDebug.h +0 -3
- casadi/include/highs/simplex/HSimplexNla.h +0 -26
- casadi/include/highs/simplex/HSimplexReport.h +0 -3
- casadi/include/highs/simplex/HighsSimplexAnalysis.h +5 -8
- casadi/include/highs/simplex/SimplexConst.h +10 -11
- casadi/include/highs/simplex/SimplexStruct.h +9 -12
- casadi/include/highs/simplex/SimplexTimer.h +83 -101
- casadi/include/highs/test/DevKkt.h +0 -3
- casadi/include/highs/test/KktCh2.h +0 -3
- casadi/include/highs/util/FactorTimer.h +39 -64
- casadi/include/highs/util/HFactor.h +4 -4
- casadi/include/highs/util/HFactorConst.h +0 -3
- casadi/include/highs/util/HFactorDebug.h +0 -3
- casadi/include/highs/util/HSet.h +0 -3
- casadi/include/highs/util/HVector.h +0 -3
- casadi/include/highs/util/HVectorBase.h +1 -4
- casadi/include/highs/util/HighsCDouble.h +12 -3
- casadi/include/highs/util/HighsComponent.h +0 -3
- casadi/include/highs/util/HighsDataStack.h +0 -3
- casadi/include/highs/util/HighsDisjointSets.h +0 -3
- casadi/include/highs/util/HighsHash.h +9 -12
- casadi/include/highs/util/HighsHashTree.h +15 -11
- casadi/include/highs/util/HighsInt.h +0 -3
- casadi/include/highs/util/HighsIntegers.h +0 -3
- casadi/include/highs/util/HighsLinearSumBounds.h +0 -3
- casadi/include/highs/util/HighsMatrixPic.h +0 -3
- casadi/include/highs/util/HighsMatrixSlice.h +3 -6
- casadi/include/highs/util/HighsMatrixUtils.h +0 -3
- casadi/include/highs/util/HighsMemoryAllocation.h +11 -3
- casadi/include/highs/util/HighsRandom.h +3 -6
- casadi/include/highs/util/HighsRbTree.h +0 -3
- casadi/include/highs/util/HighsSort.h +0 -3
- casadi/include/highs/util/HighsSparseMatrix.h +6 -3
- casadi/include/highs/util/HighsSparseVectorSum.h +0 -3
- casadi/include/highs/util/HighsSplay.h +0 -3
- casadi/include/highs/util/HighsTimer.h +94 -56
- casadi/include/highs/util/HighsUtils.h +10 -3
- casadi/include/highs/util/stringutil.h +14 -12
- casadi/include/licenses/ghc-external/LICENSE +19 -0
- casadi/include/licenses/libz-external/LICENSE +22 -0
- casadi/include/licenses/libz-external/contrib/dotzlib/LICENSE_1_0.txt +23 -0
- casadi/include/licenses/libzip-external/LICENSE +31 -0
- casadi/include/zconf.h +545 -0
- casadi/include/zip.h +528 -0
- casadi/include/zipconf.h +48 -0
- casadi/include/zlib.h +1938 -0
- casadi/ipopt.lib +0 -0
- casadi/lapack.lib +0 -0
- casadi/libCbc-3.dll +0 -0
- casadi/libCbc.dll.a +0 -0
- casadi/libCbcSolver-3.dll +0 -0
- casadi/libCbcSolver.dll.a +0 -0
- casadi/libCgl-1.dll +0 -0
- casadi/libCgl.dll.a +0 -0
- casadi/libClp-1.dll +0 -0
- casadi/libClp.dll.a +0 -0
- casadi/libClpSolver-1.dll +0 -0
- casadi/libClpSolver.dll.a +0 -0
- casadi/libCoinUtils-3.dll +0 -0
- casadi/libCoinUtils.dll.a +0 -0
- casadi/libOsi-1.dll +0 -0
- casadi/libOsi.dll.a +0 -0
- casadi/libOsiCbc-3.dll +0 -0
- casadi/libOsiCbc.dll.a +0 -0
- casadi/libOsiClp-1.dll +0 -0
- casadi/libOsiClp.dll.a +0 -0
- casadi/libOsiCommonTests-1.dll +0 -0
- casadi/libOsiCommonTests.dll.a +0 -0
- casadi/libalpaqa.dll +0 -0
- casadi/libalpaqa.dll.a +0 -0
- casadi/libblasfeo.dll +0 -0
- casadi/libblasfeo.dll.a +0 -0
- casadi/libbonmin-4.dll +0 -0
- casadi/libbonmin.dll.a +0 -0
- casadi/libcasadi-tp-openblas.dll +0 -0
- casadi/libcasadi-tp-openblas.dll.a +0 -0
- casadi/libcasadi.dll +0 -0
- casadi/libcasadi.dll.a +0 -0
- casadi/libcasadi.lib +0 -0
- casadi/libcasadi_archiver_libzip.dll +0 -0
- casadi/libcasadi_archiver_libzip.dll.a +0 -0
- casadi/libcasadi_conic_cbc.dll +0 -0
- casadi/libcasadi_conic_cbc.dll.a +0 -0
- casadi/libcasadi_conic_clp.dll +0 -0
- casadi/libcasadi_conic_clp.dll.a +0 -0
- casadi/libcasadi_conic_cplex.dll +0 -0
- casadi/libcasadi_conic_cplex.dll.a +0 -0
- casadi/libcasadi_conic_daqp.dll +0 -0
- casadi/libcasadi_conic_daqp.dll.a +0 -0
- casadi/libcasadi_conic_fatrop.dll +0 -0
- casadi/libcasadi_conic_fatrop.dll.a +0 -0
- casadi/libcasadi_conic_gurobi.dll +0 -0
- casadi/libcasadi_conic_gurobi.dll.a +0 -0
- casadi/libcasadi_conic_highs.dll +0 -0
- casadi/libcasadi_conic_highs.dll.a +0 -0
- casadi/libcasadi_conic_hpipm.dll +0 -0
- casadi/libcasadi_conic_hpipm.dll.a +0 -0
- casadi/libcasadi_conic_ipqp.dll +0 -0
- casadi/libcasadi_conic_ipqp.dll.a +0 -0
- casadi/libcasadi_conic_nlpsol.dll +0 -0
- casadi/libcasadi_conic_nlpsol.dll.a +0 -0
- casadi/libcasadi_conic_osqp.dll +0 -0
- casadi/libcasadi_conic_osqp.dll.a +0 -0
- casadi/libcasadi_conic_proxqp.dll +0 -0
- casadi/libcasadi_conic_proxqp.dll.a +0 -0
- casadi/libcasadi_conic_qpoases.dll +0 -0
- casadi/libcasadi_conic_qpoases.dll.a +0 -0
- casadi/libcasadi_conic_qrqp.dll +0 -0
- casadi/libcasadi_conic_qrqp.dll.a +0 -0
- casadi/libcasadi_conic_superscs.dll +0 -0
- casadi/libcasadi_conic_superscs.dll.a +0 -0
- casadi/libcasadi_filesystem_ghc.dll +0 -0
- casadi/libcasadi_filesystem_ghc.dll.a +0 -0
- casadi/libcasadi_importer_shell.dll +0 -0
- casadi/libcasadi_importer_shell.dll.a +0 -0
- casadi/libcasadi_integrator_collocation.dll +0 -0
- casadi/libcasadi_integrator_collocation.dll.a +0 -0
- casadi/libcasadi_integrator_cvodes.dll +0 -0
- casadi/libcasadi_integrator_cvodes.dll.a +0 -0
- casadi/libcasadi_integrator_idas.dll +0 -0
- casadi/libcasadi_integrator_idas.dll.a +0 -0
- casadi/libcasadi_integrator_rk.dll +0 -0
- casadi/libcasadi_integrator_rk.dll.a +0 -0
- casadi/libcasadi_interpolant_bspline.dll +0 -0
- casadi/libcasadi_interpolant_bspline.dll.a +0 -0
- casadi/libcasadi_interpolant_linear.dll +0 -0
- casadi/libcasadi_interpolant_linear.dll.a +0 -0
- casadi/libcasadi_linsol_csparse.dll +0 -0
- casadi/libcasadi_linsol_csparse.dll.a +0 -0
- casadi/libcasadi_linsol_csparsecholesky.dll +0 -0
- casadi/libcasadi_linsol_csparsecholesky.dll.a +0 -0
- casadi/libcasadi_linsol_lapacklu.dll +0 -0
- casadi/libcasadi_linsol_lapacklu.dll.a +0 -0
- casadi/libcasadi_linsol_lapackqr.dll +0 -0
- casadi/libcasadi_linsol_lapackqr.dll.a +0 -0
- casadi/libcasadi_linsol_ldl.dll +0 -0
- casadi/libcasadi_linsol_ldl.dll.a +0 -0
- casadi/libcasadi_linsol_lsqr.dll +0 -0
- casadi/libcasadi_linsol_lsqr.dll.a +0 -0
- casadi/libcasadi_linsol_ma27.dll +0 -0
- casadi/libcasadi_linsol_ma27.dll.a +0 -0
- casadi/libcasadi_linsol_mumps.dll +0 -0
- casadi/libcasadi_linsol_mumps.dll.a +0 -0
- casadi/libcasadi_linsol_qr.dll +0 -0
- casadi/libcasadi_linsol_qr.dll.a +0 -0
- casadi/libcasadi_linsol_symbolicqr.dll +0 -0
- casadi/libcasadi_linsol_symbolicqr.dll.a +0 -0
- casadi/libcasadi_linsol_tridiag.dll +0 -0
- casadi/libcasadi_linsol_tridiag.dll.a +0 -0
- casadi/libcasadi_nlpsol_alpaqa.dll +0 -0
- casadi/libcasadi_nlpsol_alpaqa.dll.a +0 -0
- casadi/libcasadi_nlpsol_ampl.dll +0 -0
- casadi/libcasadi_nlpsol_ampl.dll.a +0 -0
- casadi/libcasadi_nlpsol_blocksqp.dll +0 -0
- casadi/libcasadi_nlpsol_blocksqp.dll.a +0 -0
- casadi/libcasadi_nlpsol_bonmin.dll +0 -0
- casadi/libcasadi_nlpsol_bonmin.dll.a +0 -0
- casadi/libcasadi_nlpsol_fatrop.dll +0 -0
- casadi/libcasadi_nlpsol_fatrop.dll.a +0 -0
- casadi/libcasadi_nlpsol_feasiblesqpmethod.dll +0 -0
- casadi/libcasadi_nlpsol_feasiblesqpmethod.dll.a +0 -0
- casadi/libcasadi_nlpsol_ipopt.dll +0 -0
- casadi/libcasadi_nlpsol_ipopt.dll.a +0 -0
- casadi/libcasadi_nlpsol_knitro.dll +0 -0
- casadi/libcasadi_nlpsol_knitro.dll.a +0 -0
- casadi/libcasadi_nlpsol_madnlp.dll +0 -0
- casadi/libcasadi_nlpsol_madnlp.dll.a +0 -0
- casadi/libcasadi_nlpsol_qrsqp.dll +0 -0
- casadi/libcasadi_nlpsol_qrsqp.dll.a +0 -0
- casadi/libcasadi_nlpsol_scpgen.dll +0 -0
- casadi/libcasadi_nlpsol_scpgen.dll.a +0 -0
- casadi/libcasadi_nlpsol_sleqp.dll +0 -0
- casadi/libcasadi_nlpsol_sleqp.dll.a +0 -0
- casadi/libcasadi_nlpsol_snopt.dll +0 -0
- casadi/libcasadi_nlpsol_snopt.dll.a +0 -0
- casadi/libcasadi_nlpsol_sqpmethod.dll +0 -0
- casadi/libcasadi_nlpsol_sqpmethod.dll.a +0 -0
- casadi/libcasadi_nlpsol_worhp.dll +0 -0
- casadi/libcasadi_nlpsol_worhp.dll.a +0 -0
- casadi/libcasadi_rootfinder_fast_newton.dll +0 -0
- casadi/libcasadi_rootfinder_fast_newton.dll.a +0 -0
- casadi/libcasadi_rootfinder_kinsol.dll +0 -0
- casadi/libcasadi_rootfinder_kinsol.dll.a +0 -0
- casadi/libcasadi_rootfinder_newton.dll +0 -0
- casadi/libcasadi_rootfinder_newton.dll.a +0 -0
- casadi/libcasadi_rootfinder_nlpsol.dll +0 -0
- casadi/libcasadi_rootfinder_nlpsol.dll.a +0 -0
- casadi/libcasadi_sundials_common.dll +0 -0
- casadi/libcasadi_sundials_common.dll.a +0 -0
- casadi/libcasadi_xmlfile_tinyxml.dll +0 -0
- casadi/libcasadi_xmlfile_tinyxml.dll.a +0 -0
- casadi/libcoinmetis-2.dll +0 -0
- casadi/libcoinmetis.dll.a +0 -0
- casadi/libcoinmumps-3.dll +0 -0
- casadi/libcoinmumps.dll.a +0 -0
- casadi/libcplex_adaptor.dll +0 -0
- casadi/libdaqp.dll +0 -0
- casadi/libdaqp.dll.a +0 -0
- casadi/libdl.dll +0 -0
- casadi/libdl.dll.a +0 -0
- casadi/libfatrop.dll +0 -0
- casadi/libfatrop.dll.a +0 -0
- casadi/libgurobi_adaptor.dll +0 -0
- casadi/libhighs.dll +0 -0
- casadi/libhighs.dll.a +0 -0
- casadi/libhpipm.dll +0 -0
- casadi/libhpipm.dll.a +0 -0
- casadi/libipopt-3.dll +0 -0
- casadi/libipopt.dll.a +0 -0
- casadi/libmatlab_ipc.dll +0 -0
- casadi/libmatlab_ipc.dll.a +0 -0
- casadi/libosqp.dll +0 -0
- casadi/libosqp.dll.a +0 -0
- casadi/libqdldl.dll +0 -0
- casadi/libqdldl.dll.a +0 -0
- casadi/libsipopt-3.dll +0 -0
- casadi/libsipopt.dll.a +0 -0
- casadi/libsleqp.dll +0 -0
- casadi/libsleqp.dll.a +0 -0
- casadi/libtrlib.dll +0 -0
- casadi/libtrlib.dll.a +0 -0
- casadi/libzip.a +0 -0
- casadi/libzlib.dll +0 -0
- casadi/libzlib.dll.a +0 -0
- casadi/libzlibstatic.a +0 -0
- casadi/matlab_ipc.lib +0 -0
- casadi/osqp.lib +0 -0
- casadi/pkgconfig/casadi.pc +1 -1
- casadi/pkgconfig/highs.pc +1 -1
- casadi/pkgconfig/libzip.pc +14 -0
- casadi/sleqp.lib +0 -0
- casadi/spral_ssids.exe +0 -0
- casadi/std-e414687e404555e5.dll +0 -0
- casadi/tools/__init__.py +3 -1
- casadi/tools/graph/graph.py +1 -1
- casadi/tools/structure3.py +2 -2
- {casadi-3.6.7.dist-info → casadi-3.7.0.dist-info}/METADATA +1 -1
- {casadi-3.6.7.dist-info → casadi-3.7.0.dist-info}/RECORD +434 -393
- casadi/bin/libtinyxml2.dll +0 -0
- casadi/include/tinyxml2.h +0 -2380
- casadi/lib/cmake/tinyxml2/tinyxml2-config.cmake +0 -57
- casadi/lib/cmake/tinyxml2/tinyxml2-shared-targets-release.cmake +0 -19
- casadi/lib/libtinyxml2.dll.a +0 -0
- casadi/lib/pkgconfig/tinyxml2.pc +0 -10
- casadi/libtinyxml2.dll +0 -0
- casadi/tools/structure.py +0 -1446
- {casadi-3.6.7.dist-info → casadi-3.7.0.dist-info}/WHEEL +0 -0
@@ -5,13 +5,13 @@
|
|
5
5
|
#include "qpsolver/a_asm.hpp"
|
6
6
|
#include "qpsolver/crashsolution.hpp"
|
7
7
|
|
8
|
-
static void computeStartingPointBounded(Instance& instance,
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
//
|
8
|
+
static void computeStartingPointBounded(Instance& instance, Settings& settings,
|
9
|
+
Statistics& stats,
|
10
|
+
QpModelStatus& modelstatus,
|
11
|
+
QpHotstartInformation& result,
|
12
|
+
HighsTimer& timer) {
|
13
|
+
// compute initial feasible point for problems with bounds only (no general
|
14
|
+
// linear constraints)
|
15
15
|
|
16
16
|
// compute Qx + c = 0 --> x = Q^-1c
|
17
17
|
std::vector<double> L;
|
@@ -19,16 +19,18 @@ static void computeStartingPointBounded(Instance& instance,
|
|
19
19
|
|
20
20
|
// compute cholesky factorization of Q
|
21
21
|
for (size_t col = 0; col < (size_t)instance.num_var; col++) {
|
22
|
-
for (size_t idx = instance.Q.mat.start[col];
|
22
|
+
for (size_t idx = instance.Q.mat.start[col];
|
23
|
+
idx < (size_t)instance.Q.mat.start[col + 1]; idx++) {
|
23
24
|
double sum = 0;
|
24
|
-
size_t row = instance.Q.mat.index[idx];
|
25
|
+
size_t row = instance.Q.mat.index[idx];
|
25
26
|
if (row == col) {
|
26
27
|
for (size_t k = 0; k < row; k++)
|
27
28
|
sum += L[k * instance.num_var + row] * L[k * instance.num_var + row];
|
28
29
|
L[row * instance.num_var + row] = sqrt(instance.Q.mat.value[idx] - sum);
|
29
30
|
} else {
|
30
31
|
for (size_t k = 0; k < row; k++)
|
31
|
-
sum +=
|
32
|
+
sum +=
|
33
|
+
(L[k * instance.num_var + col] * L[k * instance.num_var + row]);
|
32
34
|
L[row * instance.num_var + col] =
|
33
35
|
(instance.Q.mat.value[idx] - sum) / L[row * instance.num_var + row];
|
34
36
|
}
|
@@ -37,7 +39,7 @@ static void computeStartingPointBounded(Instance& instance,
|
|
37
39
|
|
38
40
|
// solve for c
|
39
41
|
QpVector res = -instance.c;
|
40
|
-
for (HighsInt r = 0; r <res.dim; r++) {
|
42
|
+
for (HighsInt r = 0; r < res.dim; r++) {
|
41
43
|
for (HighsInt j = 0; j < r; j++) {
|
42
44
|
res.value[r] -= res.value[j] * L[j * instance.num_var + r];
|
43
45
|
}
|
@@ -59,27 +61,27 @@ static void computeStartingPointBounded(Instance& instance,
|
|
59
61
|
std::vector<HighsInt> initialinactive;
|
60
62
|
std::vector<BasisStatus> atlower;
|
61
63
|
|
62
|
-
for (int i=0; i<instance.num_var; i++) {
|
63
|
-
if (res.value[i] > 0.5/settings.hessianregularizationfactor
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
} else if (res.value[i] < 0.5/settings.hessianregularizationfactor
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
64
|
+
for (int i = 0; i < instance.num_var; i++) {
|
65
|
+
if (res.value[i] > 0.5 / settings.hessianregularizationfactor &&
|
66
|
+
instance.var_up[i] == std::numeric_limits<double>::infinity() &&
|
67
|
+
instance.c.value[i] < 0.0) {
|
68
|
+
modelstatus = QpModelStatus::kUnbounded;
|
69
|
+
return;
|
70
|
+
} else if (res.value[i] < 0.5 / settings.hessianregularizationfactor &&
|
71
|
+
instance.var_lo[i] == std::numeric_limits<double>::infinity() &&
|
72
|
+
instance.c.value[i] > 0.0) {
|
73
|
+
modelstatus = QpModelStatus::kUnbounded;
|
74
|
+
return;
|
73
75
|
} else if (res.value[i] <= instance.var_lo[i]) {
|
74
|
-
|
75
|
-
|
76
|
-
|
76
|
+
res.value[i] = instance.var_lo[i];
|
77
|
+
initialactive.push_back(i + instance.num_con);
|
78
|
+
atlower.push_back(BasisStatus::kActiveAtLower);
|
77
79
|
} else if (res.value[i] >= instance.var_up[i]) {
|
78
|
-
|
79
|
-
|
80
|
-
|
80
|
+
res.value[i] = instance.var_up[i];
|
81
|
+
initialactive.push_back(i + instance.num_con);
|
82
|
+
atlower.push_back(BasisStatus::kActiveAtUpper);
|
81
83
|
} else {
|
82
|
-
|
84
|
+
initialinactive.push_back(i + instance.num_con);
|
83
85
|
}
|
84
86
|
if (fabs(res.value[i]) > 1e-4) {
|
85
87
|
x0.value[i] = res.value[i];
|
@@ -5,15 +5,11 @@
|
|
5
5
|
#include "qpsolver/a_asm.hpp"
|
6
6
|
#include "qpsolver/crashsolution.hpp"
|
7
7
|
|
8
|
-
static void computeStartingPointHighs(
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
HighsModelStatus& highs_model_status,
|
14
|
-
HighsBasis& highs_basis,
|
15
|
-
HighsSolution& highs_solution,
|
16
|
-
HighsTimer& timer) {
|
8
|
+
static void computeStartingPointHighs(
|
9
|
+
Instance& instance, Settings& settings, Statistics& stats,
|
10
|
+
QpModelStatus& modelstatus, QpHotstartInformation& result,
|
11
|
+
HighsModelStatus& highs_model_status, HighsBasis& highs_basis,
|
12
|
+
HighsSolution& highs_solution, HighsTimer& timer) {
|
17
13
|
bool have_starting_point = false;
|
18
14
|
const bool debug_report = false;
|
19
15
|
if (highs_solution.value_valid) {
|
@@ -28,24 +24,26 @@ static void computeStartingPointHighs(Instance& instance,
|
|
28
24
|
double sum_con_infeasibilities = 0;
|
29
25
|
double max_con_residual = 0;
|
30
26
|
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
27
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
28
|
+
assessQpPrimalFeasibility(
|
29
|
+
instance, primal_feasibility_tolerance, highs_solution.col_value,
|
30
|
+
highs_solution.row_value, num_var_infeasibilities,
|
31
|
+
max_var_infeasibility, sum_var_infeasibilities, num_con_infeasibilities,
|
32
|
+
max_con_infeasibility, sum_con_infeasibilities, max_con_residual,
|
33
|
+
sum_con_residuals);
|
34
|
+
|
35
|
+
if (debug_report)
|
36
|
+
printf(
|
37
|
+
"computeStartingPointHighs highs_solution has (num / max / sum) "
|
38
|
+
"var (%d / %g / %g) and "
|
39
|
+
"con (%d / %g / %g) infeasibilities "
|
40
|
+
"with (max = %g; sum = %g) residuals\n",
|
41
|
+
int(num_var_infeasibilities), max_var_infeasibility,
|
42
|
+
sum_var_infeasibilities, int(num_con_infeasibilities),
|
43
|
+
max_con_infeasibility, sum_con_infeasibilities, max_con_residual,
|
44
|
+
sum_con_residuals);
|
45
|
+
have_starting_point = num_var_infeasibilities == 0 &&
|
46
|
+
num_con_infeasibilities == 0 && highs_basis.valid;
|
49
47
|
}
|
50
48
|
// compute initial feasible point
|
51
49
|
HighsBasis use_basis;
|
@@ -53,16 +51,18 @@ static void computeStartingPointHighs(Instance& instance,
|
|
53
51
|
if (have_starting_point) {
|
54
52
|
use_basis = highs_basis;
|
55
53
|
use_solution = highs_solution;
|
54
|
+
// Have to assume that the supplied basis is feasible
|
55
|
+
modelstatus = QpModelStatus::kNotset;
|
56
56
|
} else {
|
57
57
|
Highs highs;
|
58
58
|
|
59
59
|
// set HiGHS to be silent
|
60
60
|
highs.setOptionValue("output_flag", false);
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
61
|
+
highs.setOptionValue("presolve", kHighsOnString);
|
62
|
+
// Set the residual time limit
|
63
|
+
const double use_time_limit =
|
64
|
+
std::max(settings.time_limit - timer.read(), 0.001);
|
65
|
+
highs.setOptionValue("time_limit", use_time_limit);
|
66
66
|
|
67
67
|
HighsLp lp;
|
68
68
|
lp.a_matrix_.index_ = instance.A.mat.index;
|
@@ -81,11 +81,11 @@ static void computeStartingPointHighs(Instance& instance,
|
|
81
81
|
// create artificial bounds for free variables: false by default
|
82
82
|
assert(!settings.phase1boundfreevars);
|
83
83
|
if (settings.phase1boundfreevars) {
|
84
|
-
for (HighsInt i=0; i<instance.num_var; i++) {
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
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
89
|
}
|
90
90
|
}
|
91
91
|
|
@@ -96,18 +96,18 @@ static void computeStartingPointHighs(Instance& instance,
|
|
96
96
|
HighsBasis basis;
|
97
97
|
basis.alien = true; // Set true when basis is instantiated
|
98
98
|
for (HighsInt i = 0; i < instance.num_con; i++) {
|
99
|
-
|
99
|
+
basis.row_status.push_back(HighsBasisStatus::kNonbasic);
|
100
100
|
}
|
101
101
|
|
102
102
|
for (HighsInt i = 0; i < instance.num_var; i++) {
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
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
111
|
}
|
112
112
|
|
113
113
|
highs.setBasis(basis);
|
@@ -116,19 +116,37 @@ static void computeStartingPointHighs(Instance& instance,
|
|
116
116
|
}
|
117
117
|
|
118
118
|
HighsStatus status = highs.run();
|
119
|
-
if (status
|
119
|
+
if (status == HighsStatus::kError) {
|
120
120
|
modelstatus = QpModelStatus::kError;
|
121
121
|
return;
|
122
122
|
}
|
123
123
|
|
124
|
-
stats.phase1_iterations = highs.getInfo().simplex_iteration_count;
|
125
|
-
|
126
124
|
HighsModelStatus phase1stat = highs.getModelStatus();
|
127
|
-
|
128
|
-
|
129
|
-
|
125
|
+
switch (phase1stat) {
|
126
|
+
case HighsModelStatus::kOptimal:
|
127
|
+
modelstatus = QpModelStatus::kNotset;
|
128
|
+
break;
|
129
|
+
case HighsModelStatus::kInfeasible:
|
130
|
+
modelstatus = QpModelStatus::kInfeasible;
|
131
|
+
break;
|
132
|
+
case HighsModelStatus::kTimeLimit:
|
133
|
+
modelstatus = QpModelStatus::kTimeLimit;
|
134
|
+
break;
|
135
|
+
case HighsModelStatus::kInterrupt:
|
136
|
+
modelstatus = QpModelStatus::kInterrupt;
|
137
|
+
break;
|
138
|
+
default:
|
139
|
+
modelstatus = QpModelStatus::kError;
|
130
140
|
}
|
131
141
|
|
142
|
+
stats.phase1_iterations = highs.getInfo().simplex_iteration_count;
|
143
|
+
|
144
|
+
if (modelstatus != QpModelStatus::kNotset) return;
|
145
|
+
|
146
|
+
// Should only get here if feasibility problem is solved to
|
147
|
+
// optimality - hence there is a feasible basis
|
148
|
+
assert(phase1stat == HighsModelStatus::kOptimal);
|
149
|
+
|
132
150
|
use_basis = highs.getBasis();
|
133
151
|
use_solution = highs.getSolution();
|
134
152
|
}
|
@@ -155,14 +173,16 @@ static void computeStartingPointHighs(Instance& instance,
|
|
155
173
|
num_small_ra++;
|
156
174
|
}
|
157
175
|
}
|
158
|
-
if (debug_report && num_small_x0+num_small_ra)
|
159
|
-
printf(
|
160
|
-
|
176
|
+
if (debug_report && num_small_x0 + num_small_ra)
|
177
|
+
printf(
|
178
|
+
"feasibility_highs has %d small col values and %d small row values\n",
|
179
|
+
int(num_small_x0), int(num_small_ra));
|
161
180
|
std::vector<HighsInt> initial_active;
|
162
181
|
std::vector<HighsInt> initial_inactive;
|
163
182
|
std::vector<BasisStatus> initial_status;
|
164
183
|
|
165
|
-
const HighsInt num_highs_basis_status =
|
184
|
+
const HighsInt num_highs_basis_status =
|
185
|
+
HighsInt(HighsBasisStatus::kNonbasic) + 1;
|
166
186
|
std::vector<HighsInt> debug_row_status_count;
|
167
187
|
debug_row_status_count.assign(num_highs_basis_status, 0);
|
168
188
|
for (HighsInt i = 0; i < HighsInt(use_basis.row_status.size()); i++) {
|
@@ -178,7 +198,7 @@ static void computeStartingPointHighs(Instance& instance,
|
|
178
198
|
// Shouldn't happen, since free rows are basic in a logical
|
179
199
|
// basis and remain basic, or are removed by presolve and
|
180
200
|
// restored as basic in postsolve
|
181
|
-
assert(111==222);
|
201
|
+
assert(111 == 222);
|
182
202
|
// That said, a free row that is nonbasic in the Highs basis
|
183
203
|
// must be counted as inactive in the QP basis for accounting
|
184
204
|
// purposes
|
@@ -212,7 +232,7 @@ static void computeStartingPointHighs(Instance& instance,
|
|
212
232
|
initial_active.push_back(instance.num_con + i);
|
213
233
|
initial_status.push_back(BasisStatus::kActiveAtLower);
|
214
234
|
}
|
215
|
-
|
235
|
+
|
216
236
|
} else if (status == HighsBasisStatus::kUpper) {
|
217
237
|
if (isfreevar(instance, i)) {
|
218
238
|
initial_inactive.push_back(instance.num_con + i);
|
@@ -220,7 +240,7 @@ static void computeStartingPointHighs(Instance& instance,
|
|
220
240
|
initial_active.push_back(instance.num_con + i);
|
221
241
|
initial_status.push_back(BasisStatus::kActiveAtUpper);
|
222
242
|
}
|
223
|
-
|
243
|
+
|
224
244
|
} else if (status == HighsBasisStatus::kZero) {
|
225
245
|
initial_inactive.push_back(instance.num_con + i);
|
226
246
|
} else if (status != HighsBasisStatus::kBasic) {
|
@@ -233,29 +253,33 @@ static void computeStartingPointHighs(Instance& instance,
|
|
233
253
|
|
234
254
|
if (debug_report) {
|
235
255
|
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]));
|
256
|
+
for (HighsInt k = 0; k < num_highs_basis_status; k++)
|
257
|
+
printf("%s%d", k == 0 ? "" : " / ", int(debug_col_status_count[k]));
|
238
258
|
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]));
|
259
|
+
for (HighsInt k = 0; k < num_highs_basis_status; k++)
|
260
|
+
printf("%s%d", k == 0 ? "" : " / ", int(debug_row_status_count[k]));
|
241
261
|
printf(")\n");
|
242
262
|
}
|
243
263
|
|
244
|
-
|
245
|
-
|
264
|
+
// This used to be an assert
|
265
|
+
if ((HighsInt)(initial_active.size() + initial_inactive.size()) !=
|
266
|
+
instance.num_var) {
|
267
|
+
modelstatus = QpModelStatus::kError;
|
268
|
+
return;
|
269
|
+
}
|
246
270
|
|
247
271
|
if (!have_starting_point) {
|
248
272
|
// When starting from a feasible basis, there will generally be
|
249
273
|
// inactive variables in the basis that aren't free
|
250
274
|
for (HighsInt ia : initial_inactive) {
|
251
275
|
if (ia < instance.num_con) {
|
252
|
-
|
253
|
-
|
254
|
-
|
276
|
+
// printf("free row %d\n", (int)ia);
|
277
|
+
assert(instance.con_lo[ia] == -kHighsInf);
|
278
|
+
assert(instance.con_up[ia] == kHighsInf);
|
255
279
|
} else {
|
256
|
-
|
257
|
-
|
258
|
-
|
280
|
+
// printf("free col %d\n", (int)ia);
|
281
|
+
assert(instance.var_lo[ia - instance.num_con] == -kHighsInf);
|
282
|
+
assert(instance.var_up[ia - instance.num_con] == kHighsInf);
|
259
283
|
}
|
260
284
|
}
|
261
285
|
}
|
@@ -6,8 +6,8 @@
|
|
6
6
|
class Pricing {
|
7
7
|
public:
|
8
8
|
virtual HighsInt price(const QpVector& x, const QpVector& gradient) = 0;
|
9
|
-
virtual void update_weights(const QpVector& aq, const QpVector& ep,
|
10
|
-
HighsInt q) = 0;
|
9
|
+
virtual void update_weights(const QpVector& aq, const QpVector& ep,
|
10
|
+
HighsInt p, HighsInt q) = 0;
|
11
11
|
virtual void recompute() = 0;
|
12
12
|
virtual ~Pricing() {}
|
13
13
|
};
|
@@ -5,7 +5,7 @@
|
|
5
5
|
enum class QpSolverStatus { OK, NOTPOSITIVDEFINITE, DEGENERATE };
|
6
6
|
|
7
7
|
enum class QpModelStatus {
|
8
|
-
kNotset,
|
8
|
+
kNotset, // 0
|
9
9
|
kUndetermined,
|
10
10
|
kOptimal,
|
11
11
|
kUnbounded,
|
@@ -13,6 +13,7 @@ enum class QpModelStatus {
|
|
13
13
|
kIterationLimit,
|
14
14
|
kTimeLimit,
|
15
15
|
kLargeNullspace,
|
16
|
+
kInterrupt,
|
16
17
|
kError
|
17
18
|
};
|
18
19
|
|
@@ -23,5 +24,4 @@ enum class BasisStatus {
|
|
23
24
|
kInactiveInBasis
|
24
25
|
};
|
25
26
|
|
26
|
-
|
27
27
|
#endif
|
@@ -10,11 +10,11 @@
|
|
10
10
|
struct Quass {
|
11
11
|
Quass(Runtime& rt);
|
12
12
|
|
13
|
-
void solve(const QpVector& x0, const QpVector& ra, Basis& b0,
|
13
|
+
void solve(const QpVector& x0, const QpVector& ra, Basis& b0,
|
14
|
+
HighsTimer& timer);
|
14
15
|
|
15
16
|
private:
|
16
17
|
Runtime& runtime;
|
17
|
-
|
18
18
|
};
|
19
19
|
|
20
20
|
#endif
|
@@ -1,11 +1,11 @@
|
|
1
1
|
#ifndef __SRC_LIB_RUNTIME_HPP__
|
2
2
|
#define __SRC_LIB_RUNTIME_HPP__
|
3
3
|
|
4
|
-
#include "util/HighsTimer.h"
|
5
4
|
#include "instance.hpp"
|
5
|
+
#include "qpsolver/qpconst.hpp"
|
6
6
|
#include "settings.hpp"
|
7
7
|
#include "statistics.hpp"
|
8
|
-
#include "
|
8
|
+
#include "util/HighsTimer.h"
|
9
9
|
|
10
10
|
struct Runtime {
|
11
11
|
Instance instance;
|
@@ -18,14 +18,26 @@ struct Settings {
|
|
18
18
|
|
19
19
|
PricingStrategy pricing = PricingStrategy::Devex;
|
20
20
|
|
21
|
-
double pnorm_zero_threshold =
|
22
|
-
|
23
|
-
|
24
|
-
double
|
25
|
-
|
21
|
+
double pnorm_zero_threshold =
|
22
|
+
1e-11; // if ||p|| < this threshold, p is determined to not be an
|
23
|
+
// improving search direction
|
24
|
+
double improvement_zero_threshold =
|
25
|
+
1e-4; // if p^t gradient < this threshold, p is determined to not be an
|
26
|
+
// improving search direction
|
27
|
+
double d_zero_threshold = 1e-12; // minimal value for pivot, will declare
|
28
|
+
// degeneracy if no larger pivot is found
|
29
|
+
double lambda_zero_threshold =
|
30
|
+
1e-9; // used for pricing / optimality checking
|
31
|
+
double pQp_zero_threshold =
|
32
|
+
1e-7; // if p'Qp < this, p is determined to not have curvature, a
|
33
|
+
// simplex-like iteration is performed.
|
26
34
|
|
27
|
-
bool hessianregularization =
|
28
|
-
|
35
|
+
bool hessianregularization =
|
36
|
+
false; // if true, a small multiple of the identity matrix will be added
|
37
|
+
// to the Hessian
|
38
|
+
double hessianregularizationfactor =
|
39
|
+
1e-7; // multiple of identity matrix added to hessian in case of
|
40
|
+
// regularization
|
29
41
|
|
30
42
|
Phase1Strategy phase1strategy = Phase1Strategy::HIGHS;
|
31
43
|
bool phase1movefreevarsbasic = false;
|
@@ -37,7 +49,7 @@ struct Settings {
|
|
37
49
|
Eventhandler<HighsInt&> nullspace_limit_log;
|
38
50
|
|
39
51
|
HighsInt nullspace_limit = 4000;
|
40
|
-
|
52
|
+
|
41
53
|
HighsInt reinvertfrequency = 1000;
|
42
54
|
HighsInt gradientrecomputefrequency = 100;
|
43
55
|
HighsInt reducedgradientrecomputefrequency =
|
@@ -57,22 +57,21 @@ class SteepestEdgePricing : public Pricing {
|
|
57
57
|
basis(bas),
|
58
58
|
redcosts(rc),
|
59
59
|
weights(std::vector<double>(rt.instance.num_var, 1.0)) {
|
60
|
-
|
61
|
-
|
60
|
+
compute_exact_weights();
|
61
|
+
};
|
62
62
|
|
63
63
|
HighsInt price(const QpVector& x, const QpVector& gradient) {
|
64
64
|
HighsInt minidx = chooseconstrainttodrop(redcosts.getReducedCosts());
|
65
65
|
return minidx;
|
66
66
|
}
|
67
67
|
|
68
|
-
|
69
68
|
double compute_exact_weight(HighsInt i) {
|
70
69
|
QpVector y_i = basis.btran(QpVector::unit(runtime.instance.num_var, i));
|
71
70
|
return y_i.dot(y_i);
|
72
71
|
}
|
73
72
|
|
74
73
|
void compute_exact_weights() {
|
75
|
-
for (int i=0; i<runtime.instance.num_var; i++) {
|
74
|
+
for (int i = 0; i < runtime.instance.num_var; i++) {
|
76
75
|
weights[i] = compute_exact_weight(i);
|
77
76
|
}
|
78
77
|
}
|
@@ -80,24 +79,24 @@ class SteepestEdgePricing : public Pricing {
|
|
80
79
|
bool check_weight(HighsInt i) {
|
81
80
|
double weight_is = weights[i];
|
82
81
|
double weight_comp = compute_exact_weight(i);
|
83
|
-
if(fabs(weight_comp - weight_is) > 1e-2) {
|
84
|
-
//printf("weights[%d] = %lf, should be %lf\n", i, weight_is,
|
82
|
+
if (fabs(weight_comp - weight_is) > 1e-2) {
|
83
|
+
// printf("weights[%d] = %lf, should be %lf\n", i, weight_is,
|
84
|
+
// weight_comp);
|
85
85
|
return false;
|
86
86
|
}
|
87
87
|
return true;
|
88
88
|
}
|
89
89
|
|
90
90
|
bool check_weights() {
|
91
|
-
|
92
91
|
std::vector<int> correct_weights;
|
93
92
|
std::vector<int> incorrect_weights;
|
94
|
-
for (int i=0; i<runtime.instance.num_var; i++) {
|
93
|
+
for (int i = 0; i < runtime.instance.num_var; i++) {
|
95
94
|
bool correct = check_weight(i);
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
95
|
+
if (correct) {
|
96
|
+
correct_weights.push_back(i);
|
97
|
+
} else {
|
98
|
+
incorrect_weights.push_back(i);
|
99
|
+
}
|
101
100
|
}
|
102
101
|
|
103
102
|
printf("correct weights: ");
|
@@ -113,53 +112,53 @@ class SteepestEdgePricing : public Pricing {
|
|
113
112
|
printf("\n");
|
114
113
|
|
115
114
|
return incorrect_weights.size() == 0;
|
116
|
-
}
|
117
|
-
|
118
|
-
void recompute() {
|
119
|
-
compute_exact_weights();
|
120
115
|
}
|
121
116
|
|
117
|
+
void recompute() { compute_exact_weights(); }
|
118
|
+
|
122
119
|
void update_weights(const QpVector& aq, const QpVector& ep, HighsInt p,
|
123
120
|
HighsInt q) {
|
124
121
|
HighsInt rowindex_p = basis.getindexinfactor()[p];
|
125
|
-
//printf("Update weights, p = %d, rowindex = %d, q = %d\n", p, rowindex_p,
|
122
|
+
// printf("Update weights, p = %d, rowindex = %d, q = %d\n", p, rowindex_p,
|
123
|
+
// q);
|
126
124
|
|
127
|
-
//if (!check_weights()) {
|
128
|
-
//
|
129
|
-
//
|
130
|
-
//}
|
125
|
+
// if (!check_weights()) {
|
126
|
+
// printf("weight check failed\n");
|
127
|
+
// exit(1);
|
128
|
+
// }
|
131
129
|
|
132
130
|
QpVector delta = basis.ftran(aq);
|
133
131
|
|
134
|
-
//double old_weight_p_updated = weights[rowindex_p];
|
135
|
-
//
|
132
|
+
// double old_weight_p_updated = weights[rowindex_p];
|
133
|
+
// exact weight coming in needs to come in before update.
|
136
134
|
double old_weight_p_computed = ep.dot(ep);
|
137
135
|
|
138
|
-
//if (fabs(old_weight_p_computed - old_weight_p_updated) >= 1e-2) {
|
139
|
-
//
|
140
|
-
//
|
136
|
+
// if (fabs(old_weight_p_computed - old_weight_p_updated) >= 1e-2) {
|
137
|
+
// printf("old weight[p] discrepancy: updated = %lf, computed=%lf\n",
|
138
|
+
// old_weight_p_updated, old_weight_p_computed);
|
139
|
+
// }
|
141
140
|
|
142
141
|
double weight_p = old_weight_p_computed;
|
143
142
|
|
144
|
-
|
145
143
|
double t_p = aq.value[rowindex_p];
|
146
144
|
for (HighsInt i = 0; i < runtime.instance.num_var; i++) {
|
147
145
|
if (i != rowindex_p) {
|
148
146
|
double t_i = aq.value[i];
|
149
|
-
weights[i] = weights[i]
|
150
|
-
|
151
|
-
|
152
|
-
//printf("weights[%d] = %lf\n", i, weights[i]);
|
147
|
+
weights[i] = weights[i] - 2 * (t_i / t_p) * delta.value[i] +
|
148
|
+
((t_i * t_i) / (t_p * t_p)) * weight_p;
|
149
|
+
// printf("weights[%d] = %lf\n", i, weights[i]);
|
153
150
|
}
|
154
151
|
}
|
155
|
-
//QpVector new_ep = basis.btran(QpVector::unit(runtime.instance.num_var,
|
156
|
-
//double computed_weight = new_ep.dot(new_ep);
|
152
|
+
// QpVector new_ep = basis.btran(QpVector::unit(runtime.instance.num_var,
|
153
|
+
// rowindex_p)); double computed_weight = new_ep.dot(new_ep);
|
157
154
|
double new_weight_p_updated = weight_p / (t_p * t_p);
|
158
|
-
|
159
|
-
//if (fabs(updated_weight - computed_weight) > 1e-4) {
|
160
|
-
//
|
161
|
-
//
|
162
|
-
//
|
155
|
+
|
156
|
+
// if (fabs(updated_weight - computed_weight) > 1e-4) {
|
157
|
+
// printf("updated weight %lf vs computed weight %lf. aq[p] = %lf\n",
|
158
|
+
// updated_weight, computed_weight, t_p); printf("old weight = %lf, aq[p]
|
159
|
+
// = %lf, ^2 = %lf, new weight = %lf\n", weight_p, t_p, t_p*t_p,
|
160
|
+
// updated_weight);
|
161
|
+
// }
|
163
162
|
weights[rowindex_p] = new_weight_p_updated;
|
164
163
|
}
|
165
164
|
};
|