2016年4月5日火曜日

CUTEr/CUTEst の Matlab 用ファイル

問題ライブラリ集である CUTEr/CUTEst は、Matlab 用にデータを変換できるツールがあるので、以下の流れに沿うと Matlab 用に一括変換できる。



実際の手順は以下のサイトに書かれている通りである。
http://ccpforge.cse.rl.ac.uk/gf/project/cutest/wiki/

mkdir ~/cuter
cd ~/cuter
git clone https://github.com/optimizers/archdefs-mirror.git
git clone https://github.com/optimizers/sifdecode-mirror.git
git clone https://github.com/optimizers/cutest-mirror.git
git clone https://github.com/optimizers/mastsif-mirror.git
git clone https://github.com/optimizers/maros-meszaros-mirror.git

export ARCHDEFS=${HOME}/cuter/archdefs-mirror
export SIFDECODE=${HOME}/cuter/sifdecode-mirror
export CUTEST=${HOME}/cuter/cutest-mirror
export MYMATLAB=/usr/local

export ARCHDEFS="${HOME}/cuter/archdefs-mirror"
export SIFDECODE="${HOME}/cuter/sifdecode-mirror"
export CUTEST="${HOME}/cuter/cutest-mirror"
export PATH="${SIFDECODE}/bin:${PATH}"
export PATH="${CUTEST}/bin:${PATH}"
export MANPATH="${SIFDECODE}/man:${MANPATH}"
export MANPATH="${CUTEST}/man:${MANPATH}"

export MYARCH="pc64.lnx.gfo"
export MYMATLABARCH="pc64.lnx.gfo"

export MATLABPATH="${CUTEST}/src/matlab:$MATLABPATH"
export MASTSIF="${HOME}/cuter/mastsif-mirror"

cd ~/cuter/cutest-mirror
./install_cutest
  いろいろとメッセージが出てくるので、それに答える
  自分のところでは、(6) PC with generic 64-bit processor を選択して進めた
  あとは、Matlab を利用できるように設定もした
 
cd ~/cuter/cutest-mirror/src/matlab
以下のシェルスクリプトを行う

#!/bin/sh -x
mkdir mastsif
for SIF_FILE in `ls ${HOME}/cuter/mastsif-mirror/*.SIF`
do
    echo Processing $SIF_FILE
    SIF=`basename $SIF_FILE .SIF`
    cutest2matlab $SIF
    matlab -r "prob = cutest_setup(); save('a.mat','prob'); exit"
    mv a.mat mastsif/$SIF.mat
done

これで mastsif に *.mat が出来上がる。
例えば、LUBRIFC.mat を読み込むと
>> load LUBRIFC.mat

prob というデータが入っていて、この中に問題が格納されている。

実際のデータ構造は、
http://tracsvn.mathappl.polymtl.ca/trac/cuter/wiki/NewMatlabInterface
に詳しく書かれている。


2016年3月28日月曜日

タイムリーなメール

最近、海外の研究者から
「こんな論文があるから読んでみるといいよ」
というメールがきた。
たしかに、今やっている内容に密接に関係している内容で、こんなにタイムリーにメールで送ってくれるとはビックリ。
さっそく、その論文を読み込んでみている。

2016年3月18日金曜日

OR学会でいろいろと聞いてきて

シンポジウムを含めて3日間の学会でいろいろと聞いてきて勉強になった。

特別講演では、
1.「もんだ」をやめる
2.「こども」になる
3.「自分」を信じる
といった内容を聞くことができた。普段接することのない視点での内容で、とても勉強になった。

また、DC programming のところを聞いていたら、自分の今の内容にどういった Lemma を作ればいいのか、というヒントがあったりで参考になった。
帰りの電車で考えてみたところ、Lemma の証明の概略も分かったので、また一歩前進かと思う。


2016年3月9日水曜日

行き詰るって面白い

最近検討していたことが、うっかり制約式を一つ見落としていて、想定どおりにいかないことが判明。
なかなかに行き詰ってもいるが、ここをうまくクリアできれば、それなりに面白い展開にもできそうで、行き詰っているってこと自体がなかなかに面白い。

2016年2月25日木曜日

ログを見るのに watch コマンドが便利

screen 環境で実行しているログから定期的にどうなっているかを自動的に表示させるのに watch コマンドを使と非常に便利。

例えば、
watch -d -n 5 'grep iteration screenlog.0 | tail -10'
とすると、screenlog.0 から iteration という文字列を含む最後の10行だけを、5秒間隔で更新しながら表示してくれる。


2016年2月18日木曜日

多項式最適化問題の SDP 緩和の最適解の rank は 1 か 2 である

最近見つけた論文によると、

多項式最適化問題を SDP 緩和してできた SDP については、最適解集合の中に rank が 1 または 2 のものがある

ということらしい。
もし自分の読み違いでなければ、かなり強力なことを言っているはず。

rank 1 であれば、それは最適解になっているし、rank 2 であっても、randomization をするにあたっては rank が 2 という性質をもちいての randomization を使えば例えば Goemans and Williamson の比を改善できる可能性もあるのでは?と思う。

2016年2月8日月曜日

Julia で一括しての Pkg.add と reload

Julia でいくつかのパッケージをまとめてインストールするには、
以下のように for 文で行ったりすると一括でできる。

 for i = ["Optim","JuMP","NLopt","Clp","Convex","Ipopt"]; Pkg.add(i); end

ちなみに、インストールされているものを一括して reload するのであれば
for i = collect(keys(Pkg.installed()));  reload(i); end

でできる。