Hi Jianfeng,
I started working on an implementation recently. Actually, I simply ported the implementation from the JMetal Java metaheuristic framework (
http://jmetal.sourceforge.net/). It seems to work, as in the solutions appear converge properly, though not as well as NSGA-IIr or NSGA-II (from what I could observe.) It's also not the most pythonic code since I mostly ported from Java directly. Anyways, you download it from here:
Only major thing missing is being able to compute the weight vectors on the fly. So far, it only works for 2 or 3 objectives, otherwise it requires a weight file specific to your population size and number of objectives. The paper wasn't very specific on how to generate the weight vectors (other than they are uniformly distributed for each objective) and I didn't want to misinterpret the function either, so I didn't try yet. The JMetal version has support to generate the weight vectors for 2 objectives, and the Java implementation of MOEA/D from the author's website (
http://dces.essex.ac.uk/staff/qzhang/moead/moead-java-source.zip) has one for 3 objectives which I added.
There's a modified example of the DEAP sample knapsack problem you can use to test. You can run python knapsack.py SEED for a given random number SEED, or python knapsack.py SEED 3 to try a 3-objective version of the problem.
Have fun with it, and let me know if you figure out how to generate weight vectors for >3 objective problems.