[...] a carefully designed application-program interface for Internet optimization services would do much to encourage development of client applications- Fourer, Goux
larsbeck

OR superheroes

by Lars on November 5, 2011

I did post this on G+ before, but I thought to share this with all non G+ users too:

The other day, when a few people from our group had their coffee break together, they thought that it was a shame, that we OR people so far don’t have super heroes…and this is what we came up with:

The setting of our story is the modern, but enormously dark city of Dantzig, Poland :)

The good guys (aka iForce):
- Optiman (Superhero; weapon of choice: Feasibility pumpgun, vehicle: Hyper plane)
- Heuristic boy (Sidekick)
- Obiwan Gurobi (old guy you go to when you have a hard to solve problem – the only sentence he knows though still helpful every time: “May the iForce be with you”)

The bad guys:
- Dr. LocOpt (Villain; weapon of choice: his “Degeneration” powers (think of the Quake3 voice, saying “Regeneration” – http://fliiby.com/file/6193/obtcmihvjz.html)
- Poly hydra (Dr. LocOpt’s dangerous snake monster with many heads)
- N.P. Hard (Villain; weapon of choice: Infeasibility cloak, also: the guy who makes every easy problem enormously hard to solve, btw. no one knows his real first and middle name, only the initials)
- Two Phase (using the simplest possible decision support system ever – a coin)

The neutral characters (sometimes good, sometimes bad):
- Cutwoman (sometimes she can help by using her cuts, e.g. her director’s cut, but sometimes eliminates feasible solutions…she always has her own agenda)
- simpLex Luther (not the most clever guy, but very successful and everybody knows him)
- Cylce-Ops (drives simpLex Luther nuts)

Polititians:
- Al GOR

Guest stars:
Bender (Futurama), MethodMan (rapping: “We are the column generation”) and of course the one and only MIP Jagger

Here is an image of our whiteboard:

Characters proposed from people who commented on the G+ post:
- Nash-man (already knows what you’re going to do, the only way to defeat him is to think irrationally…) – as proposed by Vincent Knight
- Sad L. Point (villain): gives users false hope of a solution, then depresses them by dashing that hope – as proposed by Paul Rubin
- Swapman (who is protecting your neighbourhood from innefficient solutions) – as proposed by Tim Schöneberg

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • Live
  • MisterWong
  • MySpace
  • Netvibes
  • PDF
  • Twitter

jpkempkes

Demo: Genetic Algorithms

by jp on September 17, 2011

I’ve watched it several times (you probably too), but it’s still fun:
http://boxcar2d.com/ Shows a demo of a genetic algorithm that builds and evaluates cars.
Cool stuff. Watch the color of the parts changing, and get a deeper insight on the subpage “the algorithm”.

Best,
jp – orconomy.de

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • Live
  • MisterWong
  • MySpace
  • Netvibes
  • PDF
  • Twitter

Here is how it works:

  1. Join our LinkedIn group before September 30th, which can be found here: APMOD2012 LinkedIn group
  2. Wait until you receive an EMail with a promotion code – you should find it in your inbox shortly after September 30th
  3. Whenever you decide to register for APMOD2012 provide the promotion code and get a 10% discount

Note: By joining the LinkedIn group you DO NOT commit to register for APMOD2012. Joining the LinkedIn group before September 30th simply enables you to save 10% of the registration fee in case you decide to register for APMOD2012.

Why are we doing this?

The results of a survey at OR-Exchange on “what conference properties are important to you?” showed that your peers who are attending a conference are rather important to you. In order to give you the chance to see who is actually interested in coming, we try to bring everybody together in our LinkedIn group.

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • Live
  • MisterWong
  • MySpace
  • Netvibes
  • PDF
  • Twitter

larsbeck

IFORS 2011 – Meet us there

by Lars on July 11, 2011

IFORS Registration

From left to right: Franz Wesselmann, Lucian Ionescu, Max Gerlach, Corinna Dohle, Lars Beckmann

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • Live
  • MisterWong
  • MySpace
  • Netvibes
  • PDF
  • Twitter

admin

APMOD – Call for papers

by DSOR on April 26, 2011

Dear readers,

It is our pleasure to invite you submitting papers to the International Conference

APMOD – APplied mathematical programming and MODelling

The conference will take place in Paderborn during March 28-30, 2012 and is focused on but not limited to the following topics:

Optimization methods and software

  • Linear programming
  • Mixed-integer programming
  • Stochastic programming
  • Modelling systems
  • Modelling languages
  • Metaheuristics
  • Online optimization

Applications in

  • Finance
  • Transportation
  • Energy
  • Supply chain
  • Production
  • Logistics

The conference webpage

http://www.apmod.org

provides all necessary information. You are kindly invited to submit an extended abstract of 3-5 pages until October 31, 2011. Selected papers will be published as special issues in journals such as Flexible Services and Manufacturing Journal, Journal of Asset Management and OR Spectrum.

Important Dates are:

  • 31-Oct-2011 – Extended abstract deadline
  • 15-Dec-2011 – Acceptance notification
  • 28-Mar-2012 – Conference starts

Sincerely yours,

The APMOD team

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • Live
  • MisterWong
  • MySpace
  • Netvibes
  • PDF
  • Twitter

larsbeck

Gurobi 4.5 released

by Lars on April 22, 2011

Gurobi released a new version of their solver software.

Highlights include:

  • Substantial performance improvements in our MIP and Barrier solvers:
    A 31% improvement in overall MIP performance, with a 75 % improvement on models that take more than 100 seconds to solve.
    A 14% improvement in overall barrier performance, with a 23 % improvement on models that take more than 100 seconds to solve.
  • Pay-By-The-Day licensing: A new short-term, low-cost licensing option that gives you the ability to dynamically adjust the number of licenses available to you in order to cope with variations in demand. The minimum license period is just one calendar day.
  • A new default automatic setting for choosing the algorithms used to solve LP and QP models: The new default uses the concurrent optimizer for LP models and the Barrier solver for QP models. The new defaults provide substantially improved overall performance.
  • A new heuristic for finding feasible solutions to difficult MIP models: This heuristic can be quite useful in cases where other approaches are unable to find a feasible solution.
  • Additional information is now provided for infeasible and unbounded models: Advanced users can now obtain an unbounded ray for unbounded models and an infeasibility proof for infeasible models.

I personally like the idea of a per-day-use because it allows you to use Gurobi in a very flexible short term way. Cloud computing scenarios (which I am working on with our framework) come to mind…

For more information on the latest version of Gurobi go to their website.

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • Live
  • MisterWong
  • MySpace
  • Netvibes
  • PDF
  • Twitter

In our first tutorial we explain how you can use the framework in order to build a sudoku solver.

To download the source code click here

To see the source code click read the full article.

Credits to my brother Nils, who cut this video for me. I know this is a lot of work, thanks!
[click to continue…]

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • Live
  • MisterWong
  • MySpace
  • Netvibes
  • PDF
  • Twitter

You can now request features and submit bug reports to the Optimization.Framework project at http://youtrack.optimizationzen.com
The screenshot shows how to do that:

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • Live
  • MisterWong
  • MySpace
  • Netvibes
  • PDF
  • Twitter

We just released our Optimization.Framework, which lets you formulate mathematical models in C# and use a number (in the current release we have interfaces to Gurobi and Cplex) of solvers to solve them.
In the next weeks we will post a few “Howto” screencasts in which we will demonstrate how we think our framework is used best and explain the main features we think are important to know.
Until then you can play around with the latest bits yourself. I will quickly show you how you can get the framework and what you need to be aware of in order to use it.

1. Prerequisites

In order to use a solver you will need to download the solver software and install it. Also you will need a license for the solver in order to use it. We assume that you have installed and configured the solvers you want to use.
In order to use Gurobi you will need the ‘Gurobi40.NET.dll’ and in order to use Cplex you will need the ‘ILOG.CPLEX.dll’ and the ‘ILOG.CONCERT.dll’. These libraries can be found in the installation directories of the corresponding products.

2. Downloading Optimization.Framework

Option 1) – Nuget Package Manager

Using NuGet Package Manager has one advantage over getting the framework via a simple zip-file download (which is option 2). Once you have the package manager installed it is very simple for you to always have the latest version of the framework because from within Visual Studio you will see when there is a new version available so that with one click you will always be up-to-date.
First you need to get the NuGet Package Manager if you do not have it installed already. And here is how you do that:
Click on Tools->Extension Manager

Click on ‘Online Gallery’ on the left

Click on ‘Search Online Gallery’ on the top right and type ‘nuget’

Download NuGet Package Manager and follow the installation procedure.

After the installation reboot Visual Studio.
Create a new project and right click on ‘References’ where you find a new item called ‘Add Library Package Reference’, which you click.

In this dialog click on ‘Online’ and in the same manner as before now search for ‘Optimization.Framework’

Install ‘Optimization.Framework’

NuGet now installs the assemblies you need and also adds the Documentation.chm as well as an XSD file which we will cover in a later screencast. For now you can ignore this file.

You can now go on and read section “Using the Optimization.Framework”.

Option 2) – Zip-File

As you are reading this post you are already on www.optimizationzen.com. On the right side you will find a link named ‘Optimization.Framework.zip’, which is the direct download link to the latest version of the framework. You can simply download this file and unzip it to your harddrive. When you reference the framework make sure to reference all included libraries except the ‘Optimization.Framework.Contracts.dll’.

You can now go on and read section “Using the Optimization.Framework”.

3. Using the Optimization.Framework

Now that you have a new project with the Optimization.Framework referenced you can start modelling. Try inserting the following code:

var model=new Model();
var x1=new Variable();
var x2=new Variable();
model.AddConstraint(x1<=x2);

When you hover over the class 'Model' you should see a little helper tooltip that allows you to add the missing using-statement to the namespace 'Optimization'.
When you now try to build the solution you might be presented with an error message like the one in the screenshot below:

If you see this build error that is because you have targeted a different version of the .NET framework than '.NET 4.0', for example '.NET 4.0 Client profile'. To resolve this, simply change the targeted framework version in the project settings:

The project should now build without errors. Now try adding the following line:

var solver=new GurobiSolver();
solver.Solve(model);

and let Visual Studio add the using statement for the namespace 'Optimization.Solver.Gurobi'.
When you now run this, you will see an error message saying that the assembly 'Gurobi40.NET,...' could not be found. That is because you haven't referenced it yet in the project. Note that when you try to use Cplex as a solver (the class is 'CplexSolver') you will get the same error messages only for the assemblies 'ILOG.Concert' and 'ILOG.CPLEX'.

Simply go and add the reference to the missing assembly which can be found in the installation folder (more precisely in the bin directory) of Gurobi:

Since Gurobi every now and then releases a new version of their solver you might find that Visual Studio tells you that there is a conflict between different versions of the same dependent assembly. You can just double click this warning and let Visual Studio resolve this issue for you:

When you now run the project you might come accross three more issues. The first one is a 'DllNotFoundException', which simply tells you that the native gurobi40.dll could not be found, which is due to the fact that the path to this library is not in you environments path variable, so you should go and add it.

The second issue you might get is an 'BadImageFormatException', which tells you that the native 'gurobi40.dll' was compiled for a different platform than your project is targeting (x86 vs. x64). You can simply change your targeted platform to 'AnyCPU'. To do so, go to 'Build->Configuration Manager' and under 'Platform' choose 'AnyCPU' or if it doesn't show this option, create a new target platform which then should be 'AnyCPU'.

The third issue can occur when you don't have a license installed or it is not in the right place. Then you will get this error:

You should be able to solve this by copying your license file to the gurobi installation folder or setting the 'GUROBI_LICENSE' environment variable so that it points to the license file (not the directory, but the file itself!).

When you now run the project, you should see the Gurobi console output, like so:

As you see, installing the framework itself is fairly easy. When it comes to installing the solver it can get tricky. Therefore we are working on a solution that will make this process as smooth as installing a package so that you don't need to deal with any solver specific configuration tasks.

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • Live
  • MisterWong
  • MySpace
  • Netvibes
  • PDF
  • Twitter

We are working on improving the Optimization Framework.
Lately we were searching for a way to speed up the performance of the mps-importer.
We had the idea that it could be worthwhile to change the construction of a HashSet or a Dictionary.
How big would the difference be, creating a Dictionary knowing the final size and expanding the size continuously to the final size by adding items?
So I wrote two little methods, which take the time to construct 1.000.000 constraints and variables and add them to the Dictionary.
The difference was very little. Over a runtime of 10 seconds, there was only less than one second difference.
Here is the code, written in C#:

static void Main(string[] args){
      DictionaryWithoutDimension();
      DictionaryWithDimension();
      Console.ReadLine();
 }

 private static void fillDictionary(IDictionary<String, IConstraint> con, IDictionary<String, IVariable> vari){
      for (int i = 0; i < 1000000; i++){
           Constraint c = new Constraint("constraint_With_Number_" + i,
                double.NegativeInfinity, new Expression(), double.PositiveInfinity);
           con.Add(c.Name, c);
      }
      for (int i = 0; i < 1000000; i++){
           Variable v = new Variable { Name = "x" + i, LowerBound = double.NegativeInfinity,
                Type = VariableType.Continuous, UpperBound = double.PositiveInfinity, StochasticStage = 1 };
           IConstraint c = con["constraint_With_Number_" + i];
           c.Expression = (Expression)c.Expression + v;
           vari.Add(v.Name, v);
      }
 }

 private static void DictionaryWithoutDimension(){
      DateTime start = DateTime.Now;
      Dictionary<String, IVariable> hsv = new Dictionary<String, IVariable>();
      Dictionary<String, IConstraint> hsc = new Dictionary<String, IConstraint>();

      fillDictionary(hsc, hsv);
      TimeSpan ts = ((TimeSpan)(DateTime.Now - start));
      Console.WriteLine(ts);
 }

 private static void DictionaryWithDimension(){
      DateTime start = DateTime.Now;
      Dictionary<String, IVariable> hsv = new Dictionary<String, IVariable>(1000000);
      Dictionary<String, IConstraint> hsc = new Dictionary<String, IConstraint>(1000000);

      fillDictionary(hsc, hsv);
      TimeSpan ts = ((TimeSpan)(DateTime.Now - start));
      Console.WriteLine(ts);
 }

Adding each variable into a random constraint didn’t change anything regarding the performance, apart from the effort of getting the random numbers. You can test it by adding/changing the following two lines:

Random rand = new Random();
IConstraint c = con["constraint_With_Number_" + (rand.Next() % 1000000)];
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • Live
  • MisterWong
  • MySpace
  • Netvibes
  • PDF
  • Twitter