Wij volgen optimalisatieonderzoek en dragen bij aan open source
Wiskundige optimalisatie wordt sinds 1947 gepubliceerd, bediscussieerd en verbeterd. Er komen voortdurend nieuwe methoden bij. Wij lezen ze, meten ze op de instanties die onze klanten echt insturen, en wisselen van solver zodra de cijfers dat zeggen. De connectoren tussen de modelleertaal Julia en die solvers zijn open source, en wij onderhouden ze in het openbaar.
- GitHub-organisatie
- NexOR-Optimization
- Geschreven in
- Julia, Python
- Bijdragen
- JuMP-kern en solverbruggen
- Conferenties
- JuMP-dev, Odoo Experience
- Academische banden
- UCLouvain
Tachtig jaar methoden
Acht decennia resultaten, en geen enkele methode die het gehaald heeft. Elke vermelding hieronder is een gedateerde publicatie, met de mensen die het schreven.
Optimalisatie begon als een planningsprobleem in oorlogstijd en groeide uit tot een vakgebied. De simplexmethode verscheen in 1947, en de vijftien jaar daarna leverden het meeste gereedschap op dat vandaag nog draait: dynamisch programmeren, snijvlakken, branch and bound, kortste paden, en de decomposities waarmee één groot probleem als een reeks kleine wordt opgelost.
Toen liet Karp in 1972 zien waarom het werk nooit af zou zijn. Een hele familie gewone planningsproblemen heeft geen bekend efficiënt exact algoritme, en er is er sindsdien geen gevonden. Het antwoord was niet één beter algoritme maar vele, geleend waar ze maar te vinden waren: simulated annealing bij de metallurgie, tabu search bij het idee van een kort geheugen, genetische algoritmen en ant colony optimisation bij de biologie, constraint programming bij de logica, en large neighbourhood search bij de vaststelling dat een goed plan meestal één kleine wijziging van een beter plan verwijderd is.
Geen ervan heeft gewonnen, en dat is precies het punt. Elk is sterk op een vorm van probleem die de andere slecht aankunnen, dus hield het vakgebied ze allemaal en leerde het ze te combineren: exact zoeken gestuurd door heuristieken, constraintpropagatie ondersteund door clause learning, en sinds kort vertakkingsbeslissingen geleerd uit data. De laatste jaren kwamen daar eerste-orde-methoden en GPU's bij, die lineaire programma's heropenen op groottes waarvoor de simplexmethode nooit bedoeld was.
jaren 1940
-
1947Simplex methodDantzig
jaren 1950
-
1954Cutting planes for the TSPDantzig, Fulkerson and Johnson
-
1957Dynamic programmingBellman
-
1958Integer cutting planesGomory
-
1959Shortest pathsDijkstra
-
1959The vehicle routing problemDantzig and Ramser
jaren 1960
-
1960Branch and boundLand and Doig
-
1960Dantzig-Wolfe decompositionDantzig and Wolfe
-
1961Column generationGilmore and Gomory
-
1962Benders decompositionBenders
-
1964Clarke-Wright savingsClarke and Wright
jaren 1970
-
1970Lagrangian relaxationHeld and Karp
-
1972NP-completenessKarp
-
1973Lin-KernighanLin and Kernighan
-
1975Genetic algorithmsHolland
-
1977Arc consistencyMackworth
-
1979Ellipsoid methodKhachiyan
jaren 1980
-
1983Simulated annealingKirkpatrick, Gelatt and Vecchi
-
1984Interior point methodsKarmarkar
-
1986Tabu searchGlover
-
1987Constraint logic programmingJaffar and Lassez
jaren 1990
-
1991Branch and cutPadberg and Rinaldi
-
1992Ant colony optimisationDorigo
-
1994The alldifferent constraintRegin
-
1996Conflict-driven clause learningMarques-Silva and Sakallah
-
1997Variable neighbourhood searchMladenovic and Hansen
-
1998Branch and priceBarnhart and others
-
1998Large neighbourhood searchShaw
jaren 2000
-
2005Feasibility pumpFischetti, Glover and Lodi
-
2006Adaptive large neighbourhood searchRopke and Pisinger
-
2007MiniZincNethercote and others
-
2009Lazy clause generationOhrimenko, Stuckey and Codish
jaren 2010
-
2017JuMPDunning, Huchette and Lubin
-
2019Learned branching heuristicsGasse and others
jaren 2020
-
2020Neural diving for mixed-integer programsNair and others
-
2021First-order methods for large linear programsApplegate and others
-
2023Linear programming on GPUsLu and Yang
Het vakgebied volgen hoort bij het werk
Een groeiende solvercatalogus
Het aantal solvers dat wij ondersteunen blijft toenemen. Elke nieuwe solver komt via dezelfde JuMP-interface in de catalogus, gemeten tegen de solvers die er al staan en gepubliceerd met zijn tarief.
Solverreleases
Elke solverrelease verschuift welke solver het snelst is op welk probleem. Wij draaien onze benchmarkset opnieuw op elke nieuwe versie en verzetten de standaardsolver alleen wanneer de winst op meer dan één instantie standhoudt.
Gepubliceerd onderzoek
Operationeel onderzoek wordt in de openbaarheid gepubliceerd, zodat een methode gelezen en gecontroleerd kan worden voordat iemand erop bouwt. Wij volgen de literatuur over routering en planning en implementeren wat zich op klantgegevens bewijst.
De JuMP-dev-workshop
Op JuMP-dev nemen de mensen die de modelleerlaag en haar solverinterfaces onderhouden het werk van het jaar persoonlijk door. Wij gaan erheen, en wij presenteren er.
De Odoo Experience-conferentie
Odoo Experience brengt de roadmap van Odoo en zijn klanten in één zaal samen. We gaan er luisteren naar wat zij nodig hebben, tonen wat we doen, en houden ons optimalisatiewerk passend bij het platform waarop het draait.
Onze eigen benchmarkset
Een methode verdient haar plaats in de catalogus door te winnen van wat er al staat. Wij meten dat op instanties die wij uit echte klantproblemen bewaren, niet op de benchmarks die de auteurs zelf kozen.
Julia, en de laag waarin het vakgebied modelleert
Julia is waar veel van het huidige optimalisatieonderzoek geschreven wordt. Het draait op de snelheid die solvers nodig hebben en leest dicht bij de wiskunde, zodat een artikel en zijn implementatie herkenbaar hetzelfde blijven.
JuMP ligt daarbovenop. Beschrijf een probleem één keer, in bijna wiskundige syntaxis, en geef het door aan een van de meer dan 30 solvers achter één interface. Het is de de-factostandaard in de Julia-gemeenschap en de ruggengraat van optimalisatieonderzoek aan Europese universiteiten, waaronder UCLouvain, waar een deel van ons team is opgeleid.
Wij werken eraan, niet alleen ermee. Teamleden dienen pull requests in op de kernpakketten, onderhouden solverinterfaces en presenteren op de JuMP-dev-workshop.
Getoond op JuMP-dev
Benoît Legat, een van onze oprichters en kernontwikkelaar van JuMP, toont de stack achter NexOR aan de gemeenschap die JuMP bouwt.
Wat wij openbaar onderhouden
De solverbruggen, de modelleerlagen en de client die onze servers bereikt. Ze blijven op GitHub onder hun eigen licenties.
Hexaly.jl
JuMP-interface naar Hexaly, een commerciële high-performance solver voor constraint programming en metaheuristieken. Laat Julia-modellen Hexaly rechtstreeks aansturen.
MaxiCP.jl
JuMP-interface naar MaxiCP, een academische constraint-programmingsolver die aan UCLouvain onderhouden wordt. Open source, solver inbegrepen.
Vroom.jl
JuMP-interface naar VROOM, een veelgebruikte opensource Vehicle Routing-solver. Brengt VROOM in de gereedschapskist van Julia en JuMP.
OscaRCBLS.jl
JuMP-interface naar OscaR.cbls, een bibliotheek voor constraint-based local search van CETIC. Zet lokaal zoeken achter dezelfde modelleertaal als de exacte solvers.
MathOptVRP.jl
JuMP-uitbreiding voor Vehicle Routing Problems. Modelleert stops, capaciteiten en tijdvensters als een routeringsmodel dat JuMP aan elke solver kan doorgeven.
JuMPy
Een Python-interface naar MathOptInterface. Modellen worden één keer als sjabloon geschreven en in gecompileerde Julia uitgeschreven, zodat een groot model bouwen niet langer meer kost dan het oplossen.
ContractionHierarchies.jl
Kortstepadberekening op OpenStreetMap-grafen met contractiehiërarchieën. Het bouwt de afstands- en reistijdmatrices die een optimalisatiemodel als invoer neemt.
NexOR.jl
Julia-client voor onze solve-API. Een model dat in JuMP geschreven is, wordt op onze servers opgelost in plaats van op de lokale machine, en de resultaten komen terug in dezelfde sessie.
Open wiskunde wint van black-box-wiskunde.
Controleerbare modellen
De solverbruggen staan in code die iedereen kan lezen, en de solvers die ze bereiken ook. De wiskunde is geen black box die u op vertrouwen moet aannemen.
Getoetst door onderzoek
JuMP en zijn solvers worden gebruikt in operations-research labs wereldwijd. De modellen die wij uitbrengen worden kritisch bekeken door de globale community.
Geen vendor lock-in
De bruggen blijven op GitHub onder hun eigen open licenties, wat er ook met ons gebeurt. Uw data en uw database zijn van u en u kunt ze altijd exporteren.
Op maat van de klant
Een solver die uw realiteit niet modelleert, is gewoon trage software. Wij breiden de open packages uit zodra een klantconstraint nog niet wordt ondersteund.
De optimalisatiecode die wij schrijven is open source
github.com/NexOR-Optimization