{"id":23451409,"url":"https://github.com/coloquinte/roadef2020","last_synced_at":"2025-04-10T13:18:55.432Z","repository":{"id":41283530,"uuid":"311106565","full_name":"Coloquinte/Roadef2020","owner":"Coloquinte","description":null,"archived":false,"fork":false,"pushed_at":"2022-06-30T08:50:32.000Z","size":480,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-04T16:14:04.447Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Coloquinte.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-11-08T16:35:06.000Z","updated_at":"2021-11-01T15:15:55.000Z","dependencies_parsed_at":"2022-07-05T21:32:20.075Z","dependency_job_id":null,"html_url":"https://github.com/Coloquinte/Roadef2020","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Coloquinte%2FRoadef2020","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Coloquinte%2FRoadef2020/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Coloquinte%2FRoadef2020/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Coloquinte%2FRoadef2020/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Coloquinte","download_url":"https://codeload.github.com/Coloquinte/Roadef2020/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248225656,"owners_count":21068078,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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-12-24T00:25:56.379Z","updated_at":"2025-04-10T13:18:55.392Z","avatar_url":"https://github.com/Coloquinte.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# A hybrid exact/heuristic approach for the ROADEF 2020 challenge\n\nThe subject of the ROADEF 2020 challenge features a complex objective function. It is both computationally expensive, with up to 600 different scenarios, and highly non-convex, which makes it a challenge for exact approaches using MILP solvers.\nAt the same time, the simplest case, with only one scenario, is a relatively simple packing problem, which is a good match for these solvers.\n\nWe use a hybrid approach to leverage the power of MILP solvers on the simplest problems without sacrificing solution quality in the most complex case.\nOur MILP model uses a custom lazy constraint generation routine: it is complete, proves optimality on simple instances and is able to provide solutions for large instances.\nSimultaneously, our heuristic method uses beam search with a simple bounding procedure, and allows us to intensify the search for good solutions.\n\n## MILP model\n\nWe implemented a typical MILP model with indicator variables to model the quantiles exactly. This is, of course, extremely difficult to solve.\nIn order to obtain faster solution times, we chose not to model the risk per scenario directly, and the function's landscape is built on-demand using lazy constraints when an incumbent solution is found.\nWe then introduce new cutting plane families that allow us to strengthen the relaxation at the root node.\n\nTo reproduce the conditions of the paper, use the options:\n* ```py/milp.py -p INSTANCE.json -o SOL.txt -v3 --no-root-constraints --full -v3``` for the full model (Full)\n* ```py/milp.py -p INSTANCE.json -o SOL.txt -v3 --root-constraints --full -v3``` for the full model with additional \"subset constraints\" (Full+S)\n* ```py/milp.py -p INSTANCE.json -o SOL.txt -v3 --polyhedral-cuts --no-root-constraints --full -v3``` for the full model with cutting planes for the quantile function at the root node (Full+C)\n* ```py/milp.py -p INSTANCE.json -o SOL.txt -v3 --no-root-constraints -v3``` for the constraint generation method (CGen)\n* ```py/milp.py -p INSTANCE.json -o SOL.txt -v3 --root-constraints -v3``` for the constraint generation method with additional \"subset constraints\" (CGen+S)\n* ```py/milp.py -p INSTANCE.json -o SOL.txt -v3 --subset-cuts --no-root-constraints -v3```  for the constraint generation method with the best \"subset constraints\" at the root node (very slow) (Full+C)\n\n## Beam search\n\nThe beam search we use is comparatively simple. It makes use of various backtracking methods, restart choices and node choice heuristics. Additionally, we only compute an estimate of the objective function at some stages in order to save time.\n\n\n# Requirements\n\n* Python3\n* Numpy\n* CPLEX (used from the Python API)\n\n# Executing the program\n\nLaunching\n```bash\npython3 roadef2020_J3.py -p INSTANCEFILE -o SOLUTIONFILE\n```\nwill execute the auxiliary scripts and export the solution.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoloquinte%2Froadef2020","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoloquinte%2Froadef2020","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoloquinte%2Froadef2020/lists"}