{"id":20497806,"url":"https://github.com/thowell/non-convex_solver","last_synced_at":"2026-03-19T16:06:35.059Z","repository":{"id":107209096,"uuid":"248840068","full_name":"thowell/non-convex_solver","owner":"thowell","description":null,"archived":false,"fork":false,"pushed_at":"2022-03-29T05:08:05.000Z","size":1167,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-05T18:57:47.594Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thowell.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-20T19:52:09.000Z","updated_at":"2023-06-26T02:37:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"0b34eb9d-eb2b-4aff-8747-a4b70fe67280","html_url":"https://github.com/thowell/non-convex_solver","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thowell/non-convex_solver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thowell%2Fnon-convex_solver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thowell%2Fnon-convex_solver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thowell%2Fnon-convex_solver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thowell%2Fnon-convex_solver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thowell","download_url":"https://codeload.github.com/thowell/non-convex_solver/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thowell%2Fnon-convex_solver/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30185505,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T14:42:24.748Z","status":"ssl_error","status_checked_at":"2026-03-06T14:42:14.925Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-15T18:12:05.449Z","updated_at":"2026-03-06T16:33:14.963Z","avatar_url":"https://github.com/thowell.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"## About\nExperiments combining interior-point and augmented Lagrangian solvers with cone constraints. \n\n## Non-convex solver\n\nThis is an infeasible-start, primal-dual augmented-Lagrangian interior-point solver for non-convex optimization problems. The solver implements key algorithms from [Ipopt](https://link.springer.com/content/pdf/10.1007/s10107-004-0559-y.pdf) to handle inequality constraints and a novel primal-dual augmented Lagrangian is employed for equality constraints. Conic constraints, including second-order and positive semidefinite cones, are coming soon.\n\nProblems of the following form,\n```\nminimize        f(x)\n   x\nsubject to      cI(x) \u003e= 0\n                cE(x)  = 0\n                cA(x)  = 0\n                xL \u003c= x \u003c= xU\n```\n\ncan be solved.\n\n## Features\nAugmented Lagrangian:\n- [ ] penalty feedback update\n\nCones:\n- [ ] second-order cone\n- [ ] positive semidefinite cone\n\nThe following algorithms from Ipopt are implemented:\n- [X] barrier update (eq. 7)\n- [X] fraction to boundary (eqs. 8, 15)\n- [X] \\alpha, \\alpha_z update (eq. 14)\n- [X] z reset (eq. 16)\n- [X] smaller, symmetric linear solve (eq. 13)\n- [X] line-search filter (Algorithm A)\n- [X] filter update (eq. 22)\n- [X] \\alpha min (eq. 23)\n- [X] second-order corrections\n- [X] inertia correction\n- [X] acceleration heuristics (sec. 3.2)\n  - [X] Case 1:\n  - [X] Case 2: watchdog\n- [X] feasibility restoration phase\n- [X] KKT error reduction\n- [X] relaxed bounds (eq. 35)\n  -[X] implemented for restoration mode\n- [X] primal initialization (sec. 3.6)\n- [X] equality constraint multiplier initialization (eq. 36)\n- [X] single bounds damping\n  -[X] implemented for restoration mode\n- [X] automatic scaling of problem statement\n- [X] small search directions\n- [X] iterative refinement on fullspace system\n  - [ ] tolerance\n- [X] round-off error acceptance criteria relaxation\n- [X] MA57\n  - [ ] default pivot tolerance\n\nTODO:\n- [ ] replace MA57 solver\n- [X] restoration mode cleanup\n  - [X] indices/views\n  - [X] single bound damping\n- [ ] iterative refinement rejection\n- [ ] restoration-free version\n- [ ] Quasi-Newton\n - [ ] BFGS\n - [ ] L-BFGS\n - [ ] block-wise BFGS\n- [ ] Schur-complement linear-system solve\n\n## Installation\n```code\ngit clone https://github.com/thowell/non-convex_solver\n```\nRequest [HSL MA57 license](http://www.hsl.rl.ac.uk/download/HSL_MA57/5.2.0/) and install [HSL.jl](https://github.com/JuliaSmoothOptimizers/HSL.jl)\n\n## Example\nWachter problem\n```\nminimize        x1\nx1,x2,x3\nsubject to      x1^2 - x2 - 1.0 = 0\n                x1   - x3 - 0.5 = 0\n                x2, x3 \u003e= 0\n```\nImplementation\n```julia\n# problem dimensions\nn = 3 # decision variables\nm = 2 # constraints\n\n# initial guess\nx0 = [-2.0, 3.0, 1.0]\n\n# bounds\nxL = -Inf*ones(n) # lower bounds\nxL[2] = 0.0\nxL[3] = 0.0\nxU = Inf*ones(n) # upper bounds\n\n# objective\nf_func(x) = x[1]\n\n# constraints\nc_func(x) = [x[1]^2 - x[2] - 1.0;\n             x[1]   - x[3] - 0.5]\n\n# model\nmodel = Model(n,m,xL,xU,f_func,c_func)\n\n# options\nopts = Options{Float64}()\n\n# solver\ns = NCSolver(x0,model,opts=opts)\n\n# solve\nsolve!(s)\n\n# solution\nx = get_solution(s) # x* = [1.0, 0.0, 0.5]\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthowell%2Fnon-convex_solver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthowell%2Fnon-convex_solver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthowell%2Fnon-convex_solver/lists"}