Parallel models in Gurobi - parallel-processing

I am working in a benders decomposition for a MILP using Gurobi. I usually use LazyCuts to add new constrains to the Master Problem. However, this decomposition gives me the opportunity to solve for each index independently and I try to parallelize the process to give better computational times.
I tried to use multiscenarios approach from Gurobi for my problem, but I havent been able to get it to work properly.
Do you have any suggestion of how to solve in parallel the same problem for different indices?
Thank you in advance for any help.
Ricardo

Related

What can be approaches(algorithms) to solve the Atmospheric Turbulation problem?

Problem:
Atmospheric turbulation problem occurs due to foze,temperature variations, looking at to long distances with camera. There is a problem sample below
Example:
What I tried so far:
When I searched, I found this article which suggests to use
Dual Tree Complex Wavelet Transform(DTCWT). I followed through the
article and it seems like a good way to apply. Then I found this
implementation of the article in python code. I have run it and
seen the results but not as expected well.
I have simply took the average of some frames(let say 10), and get a result. I did it because the shaking pixels will be mostly true ones at any time. My results seems not bad after averaging.
What I need:
After searching much I am sure that this solution needs more frame to get one good frame. To do that I need a good image fusion algorithm.
I kindly request that you can suggest me any algorithm or any approaches I can try and go throuh to solve problem.
Note: I am familiar with OpenCV and C++ so priority is on these.

How to solve 3SAT using brute force and N.D.M

I have been studying and trying to solve 3SAT using brute force and N.D.M but could not do so. can anyone please explain these to me in detail and tell me basic algorithm to solve 3SAT using brute force and N.D.M ? thanks
One Brute Force solution is simply to try all possible inputs. So to try and solve (A|B)&(~A|C)&(~B)&(~C) try 000,001,010,011,100,101,110,111 where xyz is A=x,B=y,C=z.
If by NDM you mean Non-Deterministic Machine as in https://en.wikipedia.org/wiki/Non-deterministic_Turing_machine there are different ways of thinking about this. One is to suppose that you have to pay for computing time, but there is a loophole in the contract, where if you try all possible inputs you only get charged for the longest run of these tries - all the others are free.

lpsolve feedback during solve

I am using lpsolver inside RStudio to solve a supply chain network optimization problem. The MILP model I am trying to solve is taking a lot of time. I want to know if it is possible to get some feedback from the model when it is solving. Feedback like current objective, current upper bound, etc should be sufficient for me.

Flow Free Like Random Level Generation with only one possible solution?

I've implemented the algorithms marked as the correct answer in this question: What to use for flow free-like game random level creation?
However, using that method will create boards that may have multiple solutions. I was wondering if there is any simple restrictions or modification that can be made to the algorithm to make sure that there is only one possible solution?
Creating unique Numberlink/Flow Free is very difficult. If you look at my algorithm proposal in the mentioned thread, you'll find an algorithm that lets you create puzzles with the necessary condition that solutions must not have a 2x2 square of the same color. The discussion at http://forum.ukpuzzles.org/viewtopic.php?f=3&t=41, however, shows that this is insufficient, since there are also many non-trivial non-unique puzzles.
From my looking into this problem, it seems the only way to solve this problem is to have a separate algorithm for testing uniqueness, and discarding bad instances. One solver that's made precisely for uniqueness testing algorithm is Imo's solver.
Another option is to use multiple different solvers and check that they come up with the same solution.
I think you should implement the solver, which finds all the solutions for some level. The simplest way is backtracking.
When you have many levels, take one by one and look for solutions. As soon as you find the second solution for some level, throw that level away.

Which algorithm(s) can solve this constraint programming problem?

I need to solve a job affectation problem and I would like to find preferably efficient algorithms to solve this problem.
Let's say there are some workers that can do several kind of tasks. We also have a pool of tasks which must be done every week. Each task takes some time. Each task must be taken by someone. Each worker must work between N an P hours a week.
This first part of the problem seems to be a good candidate for a constraint programming algorithm.
But here is the complication: because a worker can do different tasks they may also have preferences (or wishes). If one want to satisfy all wishes for everyone there is no solution to the problem (too many constraints).
So I need an algorithm to solve this problem. I don't want to reinvent the wheel if the perfect wheel already exists.
The algorithm must be fair (if one can define this word) so for example I should be able to add a constraint like "try to satisfy at least one wish per people". I'm not sure that this problem can be solved by Constraint Hierarchies methods described here: Constraint Herarchies. In fact I'm not sure that "fairness" and wishes can be expressed by valid constraints for this category of algorithms.
Is there a constraint programming expert to give me some advices ? Do I need to develop a new wheel with some heuristics instead of using efficient CP algorithms ?
Thanks !
Your problem is complex enough that a general solution will probably require formulating as a linear-integer problem. If on the other hand you are able to relax certain requirements, you may be able to use a simpler approach. For example, bipartite matching would allow you to schedule multiple workers to multiple jobs, and can even handle preferences, but would not be able to enforce general 'fairness' constraints. See e.g. this related SO question. Vertex colouring has efficient algorithms for enforcing job separation constraints.
Other posters have mentioned simplex and job shop scheduling. Simplex is an optimisation algorithm - it traverses a solution space seeking to maximise some objective function. Formulating the objective function can certainly be done, but is non-trivial. Classical job shop scheduling, like bipartite matching, can model some aspects of your problem, but not all. There are no precedence constraints, for example. There are extended versions that can handle some constraints, for example placing time bounds on tasks.
If you're interested in existing implementations, the Python networkx library has an implementation of this matching algorithm. An example of an open source timetabling program that might be of interest is Tablix.
I've done timetabling, which can be considered a form of constraint programming. You have hard (inviolable) constraints and soft constraints (such as interval preferences).
Linear integer programming usually becomes useless after more than 30 variables, and this can also be said about simplex.
It was trough domain-specific optimizations of heuristic algorithms that a solution was found.
The heuristic algorithms used were simmulated annealing, genetic algorithms, metaheuristic algorithms and similar, but in the end the best result were provided by an "intelligent" domain customized greedy search algorithm.
Basically, you might get some decent results with one of the heuristics here, but the main problem is being able to discern when a problem is overconstrained.
A great open-source tool for research is the HeuristicLab.
I agree with what have been proposed here. However, MIP (Mixed Integer Programming problems) of very large size (far beyond 30 variables !) are practically solved nowadays thanks to commercial codes (Xpress, Cplex, Gurobi) or open-source (Coin-Or/Cbc). Furthermore, fancy modeling languages such as OPL Studio, GAMS, AMPL, Flop ... allow to write easily mathematic models instead of using APIs.
You can take advantage of NEOS server (http://neos.mcs.anl.gov/neos/solvers/index.html) to try very esaily different MIPs available. You send your model in AMPL format . Although AMPL comes as a free limited version, NEOS can handle unlimited instances.
Modeling languages exist also for CP (COMET / OPL Studio) and Local Search (COMET).
Feel free to get in touch with me through my web site www.rostudel.com ('contact' page)
David
This sounds like job shop scheduling.

Resources