Hi Stéphane, nice post! I have a number of comments and suggestions which 
you may find useful. I accompanied these comments with some demo code, you 
can find here <https://gist.github.com/carlobaldassi/10312215>.

A) Generic to Julia

A.1) as Ivar said, you can use Unicode characters if you want;

A.2) sarting from the next Julia version, an expression like "1 - eye(n)" 
will raise a warning and urge you to use the dotted-minus operator, i.e. "1 
.- eye(n)". Better start getting in the habit of doing that! Also, in Julia 
v0.3 you can write the same expression as "ones(n,n) - I", which is kind of 
nicer maybe;

A.3) nested loops like 

for i = 1:n
    for j = 1:n
        # ...
    end
end

can be written concisely as
for i = 1:n, j=1:n
    # ...
end



B) Specific to GLPK

B.1) it is not advisable to do "using GLPK", it's better to do "import GLPK", 
because of the large number of common names exported by GLPK, which makes 
name collisions likely

B.2) one easy way to get the "ia, ja, ar" vector for the sparse 
representation is to call the function "findnz" on a sparse matrix, i.e. 
you just do
ia,ja,ar = findnz(sparse(A))
Furthermore, the GLPK.jl package does that for you (it's one of the few 
improvements over the native GLPK), so that you can simply call
GLPK.load_matrix(lp, sparse(A))

B.3) Indeed, using GNU MP, GLPK.exact on this problem is as fast as 
GLPK.simplex. The solutiion found is "0.10714285714285714" (the best 
approximation of 3/28 in the 64 bit precision) instead of 
"0.10714285714285715" (which is the next floating point value, i.e. there's 
a 1 ulp difference. It's likely that setting the tolerance will fill this 
gap too. Unfortunately, it's not possible to get the rational value from 
GLPK.exact, and there is no linear programming solver which accepts 
rational arguments in Julia at the moment).

C) On linear programming in Julia

C.1) Instead of using GLPK directly, it's way easier to use a higher level 
Julia package, such as 
MathProgBase<https://github.com/JuliaOpt/MathProgBase.jl>, 
which uses GLPK internally (via a glue 
package<https://github.com/JuliaOpt/GLPKMathProgInterface.jl>) 
but does most of the low-level settings for you. It also has the advantage 
that the same program can use different solvers (GLPK, Clp, Gurobi, CPLEX, 
Mosek, ...) by simply changing a function argument, which I think is pretty 
cool.
In the gist which I linked 
before<https://gist.github.com/carlobaldassi/10312215>there is an example which 
demonstrates how easy and concise and more 
readable the program becomes.

C.2) Going up yet another level, you can use 
JuMP<https://github.com/JuliaOpt/JuMP.jl>, 
which uses MathProgBase itself, but introduces special syntax aimed at 
allowing to express these kind of optimization problems much more 
naturally. Again, it lets you choose which solver you want to use under the 
hood.

Hope this helps, cheers.


On Wednesday, April 9, 2014 7:08:19 PM UTC+2, Stéphane Laurent wrote:
>
> Hello guys, 
>
>  I hope you'll enjoy this article on my 
> blog<http://stla.github.io/stlapblog/posts/KantorovichWithJulia.html>
> .
>
> If you're able to use GNU MP on your machine, would you be able to find 
> *3/28* ? 
>
> Any other comment is welcomed !
>
>

Reply via email to