2018年8月27日月曜日

Julia は関数に入れると高速化できる

最近になってシミュレーテッド・アニーリングのプログラムを作って C と Julia で比較したところ、C は 1.2 秒ぐらいなのに Julia だと 30 秒ぐらいかかっていて、「Julia、遅いなぁ~」と思っていた。

ところが、
https://qiita.com/ceptree/items/b5cfca180e85e61c42a8
によると、「関数に入れないと Julia では速くならない」ということなので、さっそくプログラムの最初に

function test()

と入れて、最後に
end # end of test()
test()

として
@time include("test.jl")
としてみたら、ほぼ C 言語と同じ 1.2 秒台まで短くなった。

何回も繰り返して実行してみると、C言語のほうが速かったり Julia のほうが速かったり、という感じで、言語の差というよりも他プロセスの動作状況のほうが影響が大きい感じだった。




2018年8月22日水曜日

Julia 1.0 が出てた

Julia 1.0 が8月上旬にリリースされていた。
早速インストールしてみたけど、まだまだ使える状態ではないので、Julia 0.6 か 0.7 のほうが良さそう。

Major version up ということで、言語仕様が変わっていて、周りのパッケージがまだ追い付いていない状況であって、さっきやってみた感じでは CPLEX のパッケージなどは使えない。
(いままで is_linux() とかだった関数が Sys.islinux() などに変更になっていたりする。)

あと、Pkg もデフォルトでは import されていないので、
import Pkg
と明示する必要があるようだ。

他にも、いろいろとバグがあるようで、例えば、変数のスコープがおかしくなっているようで、
a = 0; for i=1:3; a += i; end
が実行できない。(0.6 では、もちろん実行できる。)

そのうちに、細かいバグが修正されていくのかもしれない。



2018年8月8日水曜日

ISMP2018の甘い思い出


ISMP2018に参加した人にとっての甘い思い出といえば、これ。







そう、ココナッツ味のお菓子。
パッケージとしてはこんな感じで、トラムAライン沿いにあるショッピングセンターの中のスーパーで売っていた。



 お土産に買ってきたら日本でもそれなりに好評。もっと買ってきても良かった。

2018年8月3日金曜日

アインシュタインの言葉

http://www.mathcs.emory.edu/~vicki/preprint/PsdSosSurvey.pdfのファイルに引用されている言葉に

"In theory, theory and practice are the same. In practice, they are different. - A. Einstein"

というのがあって、「数理最適化もその通りだなぁ」、と思ったりする。

良くあるのは、論文でアルゴリズムでは収束することが証明されているのに、実際にプログラムを作ってみると全然収束しないパターン。
アルゴリズムが証明されることとアルゴリズムが動作することは、結構大きな差があって、非負多項式と Sum of Squares の差なんて小さいもの、と思ったりもする。


アインシュタインの言葉の中には別の本に載っていたものを数理最適化の言葉で考えると「最適化問題は双対問題で考えたほうがいいよ」みたいなもの(実際には、相当別の言葉で書いてあるけど)があって、すごい洞察力だなぁ、と思う。

Julia で単項式列挙

多項式の単項式を列挙するのは結構面倒で手間暇がかかるけど、Julia だと

@polyvar x[1:4]
for i in multiexponents(4,3); println(prod(x.^i)); end

という感じでx_1,x_2,x_3,x_4 の3次の多項式を列挙できる。
(もちろん、Combinatorics などの Package はあらかじめインストールする必要があるけど。)

実行すると

julia> for i in multiexponents(4,3); println(prod(x.^i)); end
x1^3
x1^2x2
x1^2x3
x1^2x4
x1x2^2
x1x2x3
x1x2x4
x1x3^2
x1x3x4
x1x4^2
x2^3
x2^2x3
x2^2x4
x2x3^2
x2x3x4
x2x4^2
x3^3
x3^2x4
x3x4^2
x4^3
となる。

2018年8月2日木曜日

日本、遅れすぎなのでは?

NHKのニュースサイトに
「電気自動車や電動バイク 充電時間短縮へ“電池交換式”に注目」
https://www3.nhk.or.jp/news/html/20180730/k10011555551000.html?utm_int=news_contents_news-main_006
という記事があるが、これに出てきている Gogoro は台湾で実物を見たときに確かに良くできていると思った。
あと、街中でもそれなりに見かけたし(見分け方を教えてもらったので、簡単に Gogoro の電動バイクなのか見分けられるようになった)、Gogoro のショップの前を通るときに電池交換をしている人も多かった(電池交換自体は、コンビニでコーヒーを買うよりも短時間でできる)。

IT関係などを中心に台湾は日本よりも5年ぐらい先に行ってるのかも、と思う。
似たようなところでは、バイクシェアリングのサービスも台湾は便利になっていて、東京も台湾式を取り入れたほうがユーザーにとってはメリットがあるのでは?と思うぐらい。

国際学会で訪れたことのあるバンクーバーやボルドーと比べても、台湾のIT関係の進み具合は強い印象があって、日本も参考になるところが多いな、と個人的には思っている。