LocalSolver


LocalSolver keeps on breaking records! // 22 Nov 2020

This post presents how LocalSolver can help to optimize the design of assembly lines by solving the Assembly Line Balancing Problem. Different versions of this problem exist. We will focus on SALBP-1 as defined by Prof. Dr. Armin Scholl. The instances provided come from Alena Otto.

We have to complete a set of tasks on an assembly line. Each task corresponds to adding a part to a semi-finished product. The tasks can be grouped and performed in the same station. When the tasks are completed, the semi-finished product moves to the next station. Each task requires a certain processing time. Moreover, some tasks cannot be realized if some others are not completed before. Finally, the sum of the processing times of the tasks in each station cannot exceed a given limit. The goal is to minimize the number of stations.

We can see this problem as a scheduling problem. Imagine you have a production line such that each task is a step in the manufacturing process. Furthermore, some tasks must be realized before others in the production procedure. A worker cannot work more than 8 hours in a day. So you have to set up a plan establishing the sequence of consecutive workers and their respective tasks to minimize the total number of workers in the process.

Production Line


We challenged LocalSolver on instances of 3 sizes: small, medium, and large for respectively 20, 50, and 100 tasks, from the benchmark data sets of Otto and al. (2013). For each category, we ran the benchmark on 20 instances (consisting of 4 randomly chosen instances for difficulty levels from 1 to 5). The figure below presents the mean relative gap between LocalSolver and the optimal solutions (or the best-known solutions if the optimum is not available). LocalSolver finds good solutions in a few seconds for most of the instances. Within 5 minutes, the mean relative gap is lower than 5%.

30 sec 5 min 1 hour
Small 1.7% 0.0% 0.0%
Medium 4.9% 3.2% 0.0%
Large 6.4% 3.7% 2.8%

Average gap to best known solution


Then, we ran our LocalSolver model for 5 minutes on every open instance of medium and large size. As there are open instances, the optimal solutions are not known yet, only feasible solutions and lower bounds are available. Within 5 minutes, LocalSolver enhances best-known solutions for 257 instances over 639. For 81 instances, the solution is even shown to be optimal since LocalSolver solution reaches the lower bound.


Instances Best-known solution in the literature Solution found by LocalSolver Best-known lower bound
instance_n=100_57 58 56 53
instance_n=100_60 57 55 53
instance_n=100_137 57 55 50
instance_n=100_208 60 58 56
instance_n=100_214 56 55 53
instance_n=100_218 56 54 52
instance_n=100_276 63 62 58
instance_n=100_277 61 58 53
instance_n=100_278 60 58 55
instance_n=100_279 58 55 52
instance_n=100_282 63 60 57
instance_n=100_285 57 56 52
instance_n=100_286 60 59 55
instance_n=100_288 59 56 53
instance_n=100_289 65 63 61
instance_n=100_290 59 56 52
instance_n=100_293 56 54 50
instance_n=100_295 60 58 55
instance_n=100_297 61 59 54
instance_n=100_300 57 56 51
instance_n=100_429 61 58 57
instance_n=100_432 59 57 54
instance_n=100_434 59 57 55
instance_n=100_436 55 53 49
instance_n=100_442 56 53 48
instance_n=100_444 56 54 51
instance_n=100_448 60 57 54
instance_n=100_449 57 55 52
instance_n=100_502 67 64 60
instance_n=100_504 62 60 55
instance_n=100_505 62 61 55
instance_n=100_507 60 59 55
instance_n=100_509 60 59 53
instance_n=100_510 60 58 54
instance_n=100_514 60 58 54
instance_n=100_522 60 59 54
instance_n=100_523 58 56 52

New best-known solutions found by LocalSolver on large open instances


This last figure represents the optimal solution found for a medium instance with 50 tasks. For each station, we plot the sum of the processing times of the tasks. We can notice that the processing times are well balanced over the stations.

Assembly Line Balancing with 50 tasks


This problem has a trivial upper bound for the number of stations equal to the number of tasks. This comes from the naive solution where each task is contained in a different station. We state:

maxNbStations = nbTasks;

The LocalSolver model, written here in LSP, defines a sequence of integer variables called assignedStation. The corresponding assignedStation decision represents the station that will perform the task. Proceeding that way, each task necessarily has a station.

// Decision variables: assignedStation[i] is the number of the station to which task i belongs
assignedStation[i in 0..nbTasks-1] <- int(0, maxNbStations-1);

Then, we introduce an intermediate Boolean expression stationUsed for each station, which equals 1 if the station contains a task, 0 otherwise. To do this, we use the non-linear operator or offered by LocalSolver.

stationUsed[s in 0..maxNbStations-1] <- or[i in 0..nbTasks-1](assignedStation[i] == s);

Thus, we compute the number of stations used, which is the objective we aim to minimize.

nbUsedStations <- sum[s in 0..maxNbStations-1](stationUsed[s]);
minimize nbUsedStations;

The cycle time constraint is written with a sum over all the tasks using a boolean condition on assignedStation to select only the tasks which belong to the regarded station.

// All stations must respect the cycleTime constraint
timeStations[s in 0..maxNbStations-1] <- 
          sum[i in 0..nbTasks-1]((assignedStation[i] == s) * processingTime[i]);
for[s in 0..maxNbStations-1]
	constraint timeStations[s] <= cycleTime;

The succession constraint verifies that its station's number is inferior or equal to its successors' ones for each task.

// The stations must respect the succession's order of the tasks
for[i in 0..nbTasks-1][j in successors[i]]
	constraint assignedStation[i] <= assignedStation[j];

Note that LocalSolver allows you to initialize the resolution with a given solution. For example, we can start the search from the naive solution previously mentioned.

// Initialize with a naive solution: each task belongs to one separate station
for [i in 0..nbTasks-1]
	assignedStation[i].value = i;


You can download the LocalSolver model of the Assembly Line Balancing written in Python. The model is also available written using LocalSolver Programming language, namely LSP. We are at your disposal to accompany you in the discovery of LocalSolver. Just ask for your free trial license by registering here. In the meantime, don't hesitate to contact us for any further information or support.


Other blog posts

2020

LocalSolver keeps on breaking records! // 22 Nov 2020

Here is another piece of evidence that LocalSolver is the best solver to tackle scheduling problems. Using a straightforward modeling approach, LocalSolver improves some of the best-known solutions of the Assembly Line Balancing Problem.

Interested in doing an internship at LocalSolver? // 06 Nov 2020

Are you passionate about Operations Research and Mathematical Optimization? Have a look at our internship offers for the year 2021.

Modeling and solving the Aircraft Landing Problem // 12 Oct 2020

LocalSolver is the solver of choice to tackle large-scale scheduling problems. As an example, we show here how the Aircraft Landing Problem can be easily modeled and efficiently solved using LocalSolver.

Global Optimization with LocalSolver // 22 Sep 2020

We are pleased to announce the defense of the doctoral thesis of Simon Boulmier, optimization engineer at LocalSolver. This presentation will conclude our doctoral student's 3 years of research on the theme of Global Optimization with LocalSolver.

Broken records for the Movie Shoot Scheduling Problem // 09 Sep 2020

We present a new modeling example illustrating the strength of LocalSolver’s external functions to concisely model and efficiently solve complex optimization problems.

Solution Repair by Inequality Network Propagation in LocalSolver // 31 Aug 2020

Léa, optimization expert at LocalSolver, will give a talk on Solution Repair by Inequality Network Propagation in LocalSolver at the Sixteenth International Conference on Parallel Problem Solving from Nature (PPSN 2020).

LocalSolver at SMAI-MODE 2020 // 15 Jul 2020

LocalSolver will participate in the 2020 workshop on Mathematics for Optimization and Decision (MODE), part of the French Society for Applied and Industrial Mathematics (SMAI), September 7-9, 2020.

LocalSolver modeling guide for Vehicle Routing Problems // 15 Jun 2020

LocalSolver is a generic optimization solver with a simple and powerful formalism. Its genericity offers unlimited possibilities to model and solve real-life vehicle routing problems.

Huge vehicle routing instances // 18 May 2020

We analyze the performance of LocalSlover on huge instances of the Capacitated Vehicle Routing Problem (CVRP). The instances come from a paper by Arnold, Gendreau, Sörensen published in July 2019.

LocalSolver extension for Visual Studio Code // 16 Apr 2020

Need to quickly prototype? Use the LocalSolver Programming language (LSP) through Visual Studio Code. LSP makes the modeling of your problem easier and faster.

Non-convex quadratic models // 18 Mar 2020

We present results obtained on non-convex quadratic models recently discussed on Erwin Kalvelagen's blog. LocalSolver is shown to be much easier to use, but also much better and faster, than Cplex and Gurobi.

New release: LocalSolver 9.5 // 02 Mar 2020

LocalSolver 9.5 comes with big novelties. Have a look to the new features and performance improvements it offers. And try it for free now!

2019

LocalSolver sponsors Dataquitaine 2020 // 09 Dec 2019

LocalSolver sponsors Dataquitaine, February 13, in Bordeaux, about the practice and impact of optimization and operations research in business and industry.

LocalSolver at ORBEL34 // 14 Nov 2019

LocalSolver is glad to sponsor ORBEL34, the 34th annual conference of Belgian Operational Research Society at UCL-CORE, in January 30-31.

LocalSolver sponsors ROADEF 2020 // 02 Oct 2019

LocalSolver will sponsor the conference ROADEF 2020, February 19-21. Come to meet us on our booth, to discover LocalSolver 9.5 new features and applications.

Interested in doing an internship with us? // 01 Sep 2019

Are you passionate about Operations Research and Computer Science? Have a look to our internship offers for the year 2020. Then join us!

LocalSolver opens 3 positions as Optimization Engineer // 01 Sep 2019

Passionate about optimization? Join a small, fast-growing tech company which is changing the game in the world of optimization.

We are hiring our Marketing & Communication Manager // 01 Sep 2019

Do you love communicating about science and technology? Then join a highly-skilled, fast-growing team to push forward the most innovative software project in the field.

LocalSolver at OR2019 in Dresden // 23 Aug 2019

LocalSolver team will be at OR2019 in Dresden, June 23-26. Come to meet the team and discover the next 9.0 version.

New release: LocalSolver 9.0 // 01 Aug 2019

This new release offers better solutions and better bounds for many optimization problems, especially combinatorial problems (packing, routing, scheduling) as well as nonlinear continuous problems. Try it for free now!

LocalSolver at EURO 2019 in Dublin // 22 Jun 2019

LocalSolver team will be at EURO 2019 in Dublin, June 23-26. Come to meet the team and discover the next 9.0 version.

LocalSolver at ROADEF 2019 // 18 Feb 2019

The team will be at the conference ROADEF 2019, February 19-21. Come to meet us on our booth, to discover LocalSolver 8.5 new features and applications.

New release: LocalSolver 8.5 // 29 Jan 2019

This new release offers better bounds for bool, int, and float-based models and better solutions for set and list-based models. Try it for free now!

2018

LocalSolver will be at OR2018 in Brussels // 03 Sep 2018

The team will be at the conference OR2018 in Brussels, September 12-14. Come to meet us on our booth, to discover LocalSolver 8.0 new features and applications.

New release: LocalSolver 8.0 // 02 Aug 2018

We are pleased to announce the release of LocalSolver 8.0, which introduces set variables in addition to list variables. Try it for free now!

LocalSolver at ISMP 2018 in Bordeaux // 02 Jul 2018

LocalSolver team will be at ISMP 2018 in Bordeaux, July 2-6. Come to our exhibit booth to meet the team and discover the next 8.0 version.

LocalSolver is hiring a Numerical Optimization Engineer // 23 Jun 2018

Passionate about numerical optimization? Join a small, fast-growing tech company which is changing the game in the world of optimization.

LocalSolver is hiring a Full-Stack Developer // 30 May 2018

Passionate about computer programming? Join a small, fast-growing tech company which is changing the game in the world of optimization.

LocalSolver finalist at Les PROS de la RO // 28 Mar 2018

We are glad to be selected as finalist of the French Operations Research Society competition for the best OR project in industry.

2017

New release: LocalSolver 7.5 // 20 Nov 2017

We are pleased to announce the release of LocalSolver 7.5, which comes with big novelties. Try it for free now!

Interested in doing an internship at LocalSolver? // 04 Oct 2017

Are you passionate about Operations Research and Mathematical Optimization? Have a look to our internship offers for the year 2018. Then join us!

LocalSolver sponsors OR2017 in Berlin // 31 Aug 2017

The team will be at the conference OR2017 in Berlin, September 6-8. Come to meet us on our booth, to discover LocalSolver 7.0 new features and applications.

New release: LocalSolver 7.0 // 02 May 2017

LocalSolver 7.0 offers new features and performance improvements for a bunch of combinatorial and numerical problems. Try it for free now!

2016

Welcome to our new clients // 31 Oct 2016

Several organizations have recently chosen LocalSolver to solve their most challenging optimization problems. Discover companies and institutions who trust us.

New release: LocalSolver 6.5 // 29 Jul 2016

LocalSolver 6.5 offers big performance improvements for routing & scheduling problems, as well as for almost-linear problems. Check it out for free now!

Solving a problem with 8 million boolean decisions // 15 Jun 2016

This is the number of binary decisions of the supply chain optimization problem solved in minutes by Pasco Shikishima and Future Architect, using LocalSolver.

We search for a business developer // 16 Mar 2016

Interested in selling mathematical software? Interested in joining a fast-growing tech company? Have a look to this open position at Innovation 24 & LocalSolver.

Welcome to our new clients // 01 Mar 2016

Several organizations have recently chosen LocalSolver to solve their most challenging optimization problems. Discover companies and institutions who trust us.

New release: LocalSolver 6.0 // 09 Feb 2016

LocalSolver 6.0 offers new unique, powerful features: solve routing & scheduling problems at hand using list variables, plug external functions easily to your optimization models, analyze efficiently why your model is infeasible, ...

LocalSolver sponsors ROADEF 2016 // 03 Feb 2016

LocalSolver 6.0 will be unveiled at ROADEF 2016, the annual congress of the French Operations Research Society, in Compiègne, 10-12th February 2016.

LocalSolver sponsors ORBEL // 25 Jan 2016

LocalSolver is glad to sponsor ORBEL30, the 30th annual conference of Belgian Operationnal Research Society at UCL-CORE, January 28-29, 2016.

2015

FICO Kaggle Challenge: Santa's Stolen Sleigh // 10 Dec 2015

The analytics company FICO has launched an optimization challenge on Kaggle: Santa's Stolen Sleigh. Julien Darlay, from LocalSolver R&D, proposes a simple optimization approach based on LocalSolver to solve this problem nearly optimally.

LocalSolver at PGMO DAYS 2015 // 25 Sep 2015

LocalSolver will be at PGMO DAYS 2015. Discover how LocalSolver solves a real-life network optimization problem with 14,000 nodes and 180,000 edges in minutes.

LocalSolver sponsors OR2015 in Vienna // 16 Jul 2015

LocalSolver sponsors OR2015 in Vienna. Come on our booth to meet the us and discover the big novelties released in LocalSolver 5.5 version!

LocalSolver 5.5 is released // 11 Jul 2015

Have a look to this new version which offers new modeling features, as well as performance improvements for a bunch of hard problems.

Welcome to our new clients // 03 Jul 2015

Several organizations have newly chosen LocalSolver to solve their most challenging optimization problems. Discover the corporations and institutions who trust us.

LocalSolver sponsors EURO 2015 // 30 Jun 2015

LocalSolver sponsors the biggest OR event in Europe: EURO 2015. Come on our booth to meet the us and discover the big novelties coming in LocalSolver 5.5 version!

LocalSolver at MIC 2015 // 15 Apr 2015

Julien Darlay will give a plenary talk at 11th Metaheuristics International Conference (MIC 2015) in Agadir, Morocco, from the 7 to 10th June 2015.

Applications of Optimization 2015 // 31 Mar 2015

Frédéric Gardi will give a talk at the Applications of Optimization 2015 workshop organized by the Danish Operations Research Society (DORS).

New release: LocalSolver 5.0 // 19 Jan 2015

LocalSolver 5.0 is out. Have a look to this new version which offers new modeling features, as well as performance improvements for a bunch of hard problems.

Je suis Charlie // 11 Jan 2015

We are shocked and depressed by the terrible events that occurred in recent days in France. We have a thought for the victims and their families. #JeSuisCharlie

2014

Welcome to our new clients // 20 Dec 2014

Several organizations have newly chosen LocalSolver to solve their most challenging optimization problems. Discover the corporations and institutions who trust us.

LocalSolver hires: welcome to Clément! // 10 Nov 2014

LocalSolver hires: our team is pleased to welcome Clément Pajean, graduated from ENSTA ParisTech, one of the French "Grandes Ecoles".

Plugging LocalSolver to the R language // 12 Aug 2014

Our Polish partner and reseller WLOG Solutions has developed the localsolver package for the R language.

New release: LocalSolver 4.5 // 21 Jul 2014

We invite all our users to install LocalSolver 4.5. This new version offers new modeling features, as well as performance and numerical precision improvements.

LocalSolver sponsors OR 2014 // 25 Jun 2014

LocalSolver sponsors OR 2014 in Aachen in Germany, from 2 to 5th September 2014. Come to our booth to discover LocalSolver and meet the team!

LocalSolver at EUROPT 2014 // 07 May 2014

LocalSolver will be presented at the 12th EUROPT Workshop on Advances in Continuous Optimization, July 10-12 2014, in Perpignan, France.

LocalSolver welcomes new clients // 23 Apr 2014

Several organizations have recently chosen LocalSolver as premier mathematical optimization solver: discover them!

LocalSolver at SMAI-MODE 2014 // 30 Mar 2014

The team was invited to present LocalSolver at the 2014 workshop on Mathematics for Optimization and Decision (MODE), part of the French Society for Applied and Industrial Mathematics (SMAI), March 26-28th 2014 in Rennes, France.

LocalSolver sponsors INFORMS 2014 // 14 Mar 2014

The LocalSolver team will have a booth and talk at INFORMS 2014 in Boston, Massachusetts. Come to meet us.

LocalSolver at Paris Machine Learning Meetup // 12 Mar 2014

LocalSolver team was recently invited to the Paris Machine Learning Meetup organized by Igor Caron, to talk about large-scale optimization related to machine learning.

Thierry Benoist's Habilitation // 06 Mar 2014

Thierry Benoist, member of the LocalSolver team, will defend his Habilitation Thesis on March 11th 2014 at Ecole des Mines de Nantes (France).

LocalSolver sponsors JFPC-JIAF 2014 // 01 Mar 2014

LocalSolver sponsors the French Meeting on Constraint Programming and Articficial Intelligence, from 11th to 13th June 2014 in Angers, France.

LocalSolver at ROADEF 2014 // 27 Jan 2014

LocalSolver will be at ROADEF 2014, the annual congress of the French Operations Research Society, in Bordeaux from 26th to 28th February. Come to meet the team!

LocalSolver at Workshop ORO 2013 // 03 Jan 2014

Frédéric Gardi was invited as plenary speaker to the ORO Workshop in Nantes. He spoke about his research line on "how industrializing local search-based OR software?" which leads to the genesis of LocalSolver.

2013

Merry Christmas: LocalSolver 4.0 is released! // 25 Dec 2013

We wish a Merry Christmas to all our clients and users: LocalSolver 4.0 is out! This new version allows to tackle large-scale mixed-variable non-convex optimization problems.

Frédéric Gardi's Habilitation // 25 Nov 2013

Frédéric Gardi, member of the LocalSolver team, has defended his Habilitation Thesis on November 25th 2013 at Université Pierre et Marie Curie (Paris 6, Jussieu).

Innovation 24, the parent company of LocalSolver // 17 Oct 2013

Discover Innovation 24, the parent company of LocalSolver, also offering expert services in business analytics and operations research.

LocalSolver wins on some of the hardest MIPLIB instances // 15 Oct 2013

LocalSolver wins against both Gurobi and IBM ILOG Cplex on some of the hardest MIPLIB instances. Have a look!

LocalSolver wins against MILP, MIQP, and CP solvers on QAPLIB // 01 Oct 2013

While MILP, MIQP or CP solvers are out of scope, LocalSolver reaches state-of-the-art results within 5 minutes on Quadratic Assignment Problem.

Welcome to our new clients // 24 Sep 2013

We welcome our new clients: Hitachi, MediaTransports (Publicis), NIES, Nanjin University.

LocalSolver tutorial in IFORS Newsletter // 23 Sep 2013

IFORS is the International Federation of Operational Research Societies. A tutorial on LocalSolver appears in the last IFORS Newsletter.

Welcome to our new partners // 19 Sep 2013

We are glad to welcome new LocalSolver partners.

LocalSolver at the Summer School "Francesco Turco" 2013 // 10 Sep 2013

Our Italian partner LAC is sponsoring of Summer School "Francesco Turco" 2013. LocalSolver will be presented during the event.

LocalSolver at OR55 in Exeter (UK) // 13 Aug 2013

LocalSolver is sponsoring OR55 in Exeter (UK), 3-5th September 2013. Come to our booth to meet the team!

LocalSolver at OR 2013 in Rotterdam // 30 Jul 2013

LocalSolver is sponsoring OR 2013 in Rotterdam, 3-6th September 2013. Come to our booth to meet the team!

LocalSolver 3.1 is out // 28 Jun 2013

LocalSolver 3.1 is now available. Enjoy it!

LocalSolver at EURO-INFORMS 2013 // 15 Jun 2013

LocalSolver sponsors EURO-INFORMS 2013 in Rome. Don't miss the presentations made by the team!

Speed dating with LocalSolver // 06 Jun 2013

A nice post about LocalSolver by the OR blogger Marc-André Carle.

LocalSolver at ECCO 2013 // 30 Apr 2013

Don't miss the presentation of LocalSolver at ECCO 2013 in Paris.

Welcome to our new clients // 02 Apr 2013

We welcome our new clients: Air Liquide, Armée de Terre, Fujitsu.

LocalSolver at ROADEF 2013 // 18 Feb 2013

Retrieve all presentations about LocalSolver given at ROADEF 2013.

2012

LocalSolver 3.0 is out // 03 Dec 2012

Want better solutions faster? Download LocalSolver 3.0 now!

Customers & Partners // 14 Nov 2012

Welcome to our new customers & partners!

LocalSolver in Japanese // 08 Oct 2012

LocalSolver now speaks Japanese thanks to our partner MSI.

Logistics & Automation Consulting chooses LocalSolver // 24 Sep 2012

The Italian company Logistics & Automation Consulting (LAC) chooses LocalSolver as mathematical programming partner.

LocalSolver now in OR education // 10 Sep 2012

LocalSolver appears as complement of classical MIP and CP solvers in OR courses in French universities and high schools.

LocalSolver at ISMP 2012 // 15 Aug 2012

LocalSolver was at ISMP 2012, the world congress in mathematical programming, held in Berlin. Here are the (provocative!) slides.

Customers & Partners // 02 Aug 2012

Welcome to our new customers & partners!

New release: LocalSolver 2.1 // 06 Jul 2012

LocalSolver 2.1 was released the 6th July 2012. All users of LocalSolver 2.0 can take advantage of this new version for free.

LocalSolver at EURO 2012 // 27 Jun 2012

LocalSolver is a sponsor of EURO 2012 in Vilnius (8-11 July). Come on exhibition booth #20 to discover LocalSolver and the team!

Last results on Google ROADEF Challenge // 12 Jun 2012

We have submitted a LocalSolver-based solution for the final round of Google ROADEF Challenge. Here are given our results.

LocalSolver in Optimization Days 2012 // 04 May 2012

LocalSolver was presented in Optimization Days 2012 in Montreal. You can download the slides of the presentation.

Frédéric Gardi wins the 2012 Robert Faure Prize // 16 Apr 2012

This prize is awarded every 3 years by the French OR society to a worthy young researcher. This is the first time it has been awarded to an engineer working in industry and not to an academic.

LocalSolver at ROADEF 2012 // 08 Apr 2012

LocalSolver sponsorizes ROADEF 2012 congress. LocalSolver 2.0 will be presented in industrial semi-plenary session. Come to discover it!

LocalSolver available on Mac // 26 Mar 2012

Good news for Apple fans: LocalSolver is now available on Mac.

Official launch of LocalSolver 2.0 at Bouygues Headquarters // 11 Mar 2012

LocalSolver team invites you to the official launch of the commercial version of its new-generation solver: Tuesday March 13 2012.

LocalSolver tackles B instances on Google ROADEF Challenge // 24 Feb 2012

LocalSolver is able to solve some of the ultra-large instances from set B. Here are given some results.

LocalSolver succeeds on Google ROADEF Challenge // 08 Feb 2012

Ranked 25th among 82 teams from 33 countries, LocalSolver is the sole math programming solver qualified for the final round.

LocalSolver at Aussois 2012 // 09 Jan 2012

LocalSolver was presented at 16th Aussois Combinatorial Optimization Workshop.

Contact us - Disclaimer - Privacy policy - Copyright 2020 LocalSolver