2010年4月30日金曜日

本の復習

今日は、いろいろと仕事があったり、時間があまり取れなかったので、いま読んでいる本の復習をした。

基本的なところは簡単に思い出せるが、やはりちょっとでもランクアップすると知識として身についてないのが解かる。あと何回か読み直せば、それなりに力になりそうだ。

あと、連休に向けて、読むべき資料などを整理した。
ちなみに、SDPARA の原稿は昨日のうちに修正を反映しているので、現在は他のひとにチェックをお願いしている段階。

今日の作業内容:本の復習 2h
今日のBGM: everywhere [1-2]
今日のランチ: ジョーナン サンドイッチ、コーン、アップルパイ
明日の予測作業時間: 2h

2010年4月28日水曜日

椅子、壊れた

仕事をしている午後に椅子の背もたれにもたれたら、椅子が壊れた。。。
どうやら背もたれが元の位置に戻らなくなったらしい。

それはさておき、SDPARA の原稿について。
数値実験は一通り終了した。
今回の原稿の数値実験は4月6日にスタートしているので、ざっと22日といったところか。
これまでのノウハウがあったので、前よりも効率的に数値実験を進められるようになった。
この数値実験結果をある程度文章に起こしたので、明日のうちに校正をしておこう。

今日の作業内容: SDPARA 原稿 2h
今日のBGM: MADLAX OST [1-2]
今日のランチ: たちばな スズキ
明日の予測作業時間: 2h

2010年4月27日火曜日

簡単に解けるSDPへの帰着、難しい

今日は、朝がすっきりと起きれなかったので(レム催眠にうまく起きれなかった)、午前中がどうにも動きが鈍かった。
こういうときもたまにあるので、こういうときに時間を有効利用できるような作業にどういったものがあるか、考えておこうと思う。

今日はクラスタが SDPARA を実行中なので、その間に昨日の続きで量子化学の SDP が簡単に解ける SDP に帰着できるか考えてみた。
ただ、やはり一筋縄では行かなかった。
定式化にいろいろな可能性があるので、ひょっとしたらうまく行く方法があるのかもしれない。

あと、SDPARA の原稿については、英語の校正。
少しずつだけど、ブラッシュアップしていかなければ。

今日の作業内容: SDP の帰着 3h + SDPARA 原稿 2h
今日のBGM: 特になし
今日のランチ: いろは 豚汁定食
明日の予測作業時間: 4h

2010年4月26日月曜日

簡単に解けるSDP

今日はいろんな論文をチェックしていたが、どうやら SDP には簡単に解けるクラスがあるようだ。
量子化学の問題がこれに当てはまればバッチリ、と思ったがいまひとつ定式化がうまくいかず。
出来るのか出来ないのか、明日もひきつづき考えてみよう。

あと、SDPARA のもうひとつの原稿の英語の校正。
この原稿は明日もう一度目を通し直して、全体をチェックしよう。

今日の作業内容: SDPARA 原稿 2h + 論文読み 4h
今日のBGM: everywhere [1-2], FF10 OST [1-4]
今日のランチ: らく ネギとろ丼
明日の予測作業時間: 6h

2010年4月23日金曜日

本が届いた!! & Matlab で SDPA の実行結果を読み取り

今日は、注文しておいた本がついに届いた。
すでに絶版になっていたために簡単に購入できず、インターネット上で4日間ぐらい探してしまった。
結局、古本屋さんで数冊だけ奇跡的に残っており、今回は関西からの取り寄せとなった。

これだけ苦労したので、頑張って読んでいこうと思う。

あと、今日はちょっと疲れが出たので(金曜日はいつもより忙しい)、原稿の続きは後回しにして、メールで問い合わせが来ていたプログラムを実装した。
内容は簡単で、SDPA が出力したファイルから x,X,Y を Matlab 上に読み込むというもの。
だいたい2時間半程度で実装完了。
これによって、
$ ./sdpa -ds example1.dat-s -o example1.output
と解いた結果を
>> [objVal,x,X,Y,INFO] = read_output('example1.out',mDIM,nBLOCK,bLOCKsTRUCT);
の形式で読み込むようにした。
さらに、これを経由することで
>> [x,y,info] = read_outputSedumi('example1.out',length(b),K);
とすると sedumi で解いたときのように x,y,info が設定される。(info は SDPA ベースなので一部のみ)

ただし、SDPA はデフォルトで %8.3e の精度で x,X,Y を出力するので、param.sdpa で %8.16e などに変更しないと数値精度が悪くなってしまう。

あと、途中でバグにはまって1時間ぐらいかかった。

mwSize* blockStruct;
... 途中 ...
if (blockStruct[l] > 0) {
printf("PLUS: %zd",blockStruct[l]);
} else {
printf("MINUS: %zd",blockStruct[l]);
}
とすると、blockStruct[l] がマイナスのときにも if が成立して else に入らない。
しかも、printf では blockStruct[l] はマイナスで表示される。

原因は気がつけば簡単なことで、mwSize が size_t で格納されているため、
blockStruct[l] > 0 が size_t での比較となり、size_t だから必ずプラスか0の値になっているためだった。
これは、今後気をつけよう。

今日の作業内容: Matlab プログラム 2.5h
今日の BGM: MADLAX OST [1-2]
今日のランチ: ジョーナン メロンパン,スイートポテト,カレーパン,胡麻クロワッサンx2
明日の予測作業時間: 4h

2010年4月22日木曜日

SDPARA 原稿校正

今日は、昨日書き足したところを一度校正してみた。
昨日からであまり時間が経っていないため、それほどバッサリと行うのはまだまだ難しい。
あと、数値実験についてももう少し書き足したいところだ。

あと、ローマについても少し調べた。
飛行機の都合で一泊するだけなので、あまり駅から遠くないホテルを選びたいところだ。

今日は本読みが進まなかったので、明日は本読みも頑張ろう


今日の作業内容: 原稿校正 2h + ホテルチェック 1h
今日のBGM: Xenosaga III OST [1-2]
今日のランチ: 角笛 ポークロッソ
明日の予測作業時間: 3h

2010年4月21日水曜日

SDPARA の原稿の続き

昨日 TeX に書き足した数値実験結果について、今日は文章を書き足した。
今日一日で2ページほど進んだので、それなり進んだか。
まだ一部実験が終わっていないので、その部分は空欄になっている。
数値実験が終わったら、このあたりも進めていきたい。

あとは、本読みを進めている。
全体の3分の1ほど来ているのでだいぶ難しくなっているが、次の章は統計の内容で SDP にはあまり関係なさそうなので、そこをスキップしようと考えている。
必要だったら、また戻ればいいし。

今日の作業内容: SDPARA 原稿 3h + 本読み 1h
今日のBGM: FF12 OST [1-4]
今日のランチ: 久絵 煮魚定食
明日の予測作業時間: 3h

2010年4月20日火曜日

量子化学のSDPのサイズ

今日は、原稿をまとめるにあたって SDP の大きさを整理していたが、量子化学の rank が与えられたときの SDP の大きさをまとめて出力できる Matlab プログラムを作った。

function chem_comp
for K=5:18
m = 3*K^4/4 - K^3 /2 + 9*K^2/4 + K/2;
fprintf('** K=%02d, 2K=%02d, m = %d\n',K,2*K,m);
if 0
fprintf('PQG = [1 x -%2d, %d x4, %d x4, %d x2, %d x1]\n',...
(K*(K+1)+5)*2,K,K^2,K*(K-1)/2,2*K^2);
end
fprintf('K.s(PQGT1T2) = [1 x -%2d, %d x4, %d x4, %d x2, %d x1, ',...
(K*(K+1)+5)*2,K,K^2,K*(K-1)/2,2*K^2);
fprintf('%d x2, %d x4, %d x2]\n',...
K*(K-1)*(K-2)/6, K^2*(K-1)/2, (K^2)*(3*K-1)/2+K);

end
実行すると、以下のように各 rank での制約の本数と SDP のブロック対角行列のそれぞれのブロックの大きさが出力される。
>> chem_comp
** K=05, 2K=10, m = 465
K.s(PQGT1T2) = [1 x -70, 5 x4, 25 x4, 10 x2, 50 x1, 10 x2, 50 x4, 180 x2]
** K=06, 2K=12, m = 948
K.s(PQGT1T2) = [1 x -94, 6 x4, 36 x4, 15 x2, 72 x1, 20 x2, 90 x4, 312 x2]
** K=07, 2K=14, m = 1743
K.s(PQGT1T2) = [1 x -122, 7 x4, 49 x4, 21 x2, 98 x1, 35 x2, 147 x4, 497 x2]
** K=08, 2K=16, m = 2964
K.s(PQGT1T2) = [1 x -154, 8 x4, 64 x4, 28 x2, 128 x1, 56 x2, 224 x4, 744 x2]
** K=09, 2K=18, m = 4743
K.s(PQGT1T2) = [1 x -190, 9 x4, 81 x4, 36 x2, 162 x1, 84 x2, 324 x4, 1062 x2]
** K=10, 2K=20, m = 7230
K.s(PQGT1T2) = [1 x -230, 10 x4, 100 x4, 45 x2, 200 x1, 120 x2, 450 x4, 1460 x2]
** K=11, 2K=22, m = 10593
K.s(PQGT1T2) = [1 x -274, 11 x4, 121 x4, 55 x2, 242 x1, 165 x2, 605 x4, 1947 x2]
** K=12, 2K=24, m = 15018
K.s(PQGT1T2) = [1 x -322, 12 x4, 144 x4, 66 x2, 288 x1, 220 x2, 792 x4, 2532 x2]
** K=13, 2K=26, m = 20709
K.s(PQGT1T2) = [1 x -374, 13 x4, 169 x4, 78 x2, 338 x1, 286 x2, 1014 x4, 3224 x2]
** K=14, 2K=28, m = 27888
K.s(PQGT1T2) = [1 x -430, 14 x4, 196 x4, 91 x2, 392 x1, 364 x2, 1274 x4, 4032 x2]
** K=15, 2K=30, m = 36795
K.s(PQGT1T2) = [1 x -490, 15 x4, 225 x4, 105 x2, 450 x1, 455 x2, 1575 x4, 4965 x2]
** K=16, 2K=32, m = 47688
K.s(PQGT1T2) = [1 x -554, 16 x4, 256 x4, 120 x2, 512 x1, 560 x2, 1920 x4, 6032 x2]
** K=17, 2K=34, m = 60843
K.s(PQGT1T2) = [1 x -622, 17 x4, 289 x4, 136 x2, 578 x1, 680 x2, 2312 x4, 7242 x2]
** K=18, 2K=36, m = 76554
K.s(PQGT1T2) = [1 x -694, 18 x4, 324 x4, 153 x2, 648 x1, 816 x2, 2754 x4, 8604 x2]


このうち、rank28ぐらいまでは SDPARA なら問題なく解ける。
rank34は、まだ実行したことがないので解からない。

あと、今日は SDPARA に小さいバグが発見された。
ただし、このバグはデバッグ用の関数の中であるため、デバッグしているとき、しかも1台で実行しているときにだけ起きるバグであった。
普段の実行結果には影響していない。

SDPARA については、数値実験を表にまとめたので、あとどれくらいの実験が必要か、だいたい見積もることができた。
ざっと1週間程度といったところかと見ている。
ただ、それだと原稿の文章が間に合わないので、明日からさきに文章をあらかじめ書くことにする。

今日の作業内容: SDPARA の数値結果整理 4h + 本読み 2h
今日のBGM: FF10 OST [1-4]
今日のランチ: らく まぐろのづけ丼
明日の予測作業時間: 5h

2010年4月19日月曜日

ローマを1日にして成らさねば

7月の頭にいくことになった Erice 2010 であるが、フライトをそろそろ確保しようと考えている。
(ちなみに、Erice2010は〆切が延長されたので、まだ参加可能である。)

Erice 2010 はその名の通りシチリア島のErice という小さい街(村?)で行われるので、シチリア島まで飛行機で行くことになるが、日本からの直通便はやはりないので、ローマ経由になりそうである。
しかし、普通に飛んで行くと、パレルモに着くのが夜遅くなってしまい、あまり安全でないので、ローマに一泊するスケジュールにしようと考えている。
ただ、ローマに着くのが19:00で出るのが次の日の15:00となると、一日にしてならないローマをなんとか半日だけで堪能しなければローマ人に申し訳がない。
ここに、滞在時間が決まっている中でどれだけ堪能できるか、という最適化問題が発生する。
これは難問中の難問である。

それはさておき、今日は SDPARA の原稿用の問題の選定にあたっている。
ある程度解いてから、文章にもっとも適した問題を選択するが、今回は POP でスレッド数が増えると遅くなる、という現象があった。
行列の X, Z の積という、GotoBLAS にお任せしてあったところが遅くなっていた。
よくよく調べたら、X,Z は 10x10 の行列が 5000 ぐらいある対角ブロック行列になっていた。
やはり、10x10 程度の行列をマルチスレッドで計算するのは無理があるようだ。

今日の作業内容: SDPARA 数値実験 3h + SDPARA 原稿準備 3h
今日のBGM: everywhere [1-2], MADLAX OST [1-2]
今日のランチ: 信華園 かた焼きそば
明日の予測作業時間: 6h

2010年4月16日金曜日

量子情報理論の論文読み

SDPARA の実験は進行中。大きめの問題でかなり時間がかかるようだ。
あと、問題生成も並行して進行中。SDPARA で 数時間で解ける問題の生成に半日とか一日かかるのが痛い。

あと、今日は量子情報理論の論文をチェックしてみた。
量子条件を満たす状態になっているかどうかを判断するのに SDP を解いているようである。
ポイントとしては、半正定値行列と Farkas の Lemma が効いている。

他の論文だと Kullbackダイバージェンスが出てきていて、こっちはまだ目を通していないが面白そうだ。

今日の作業内容: SDPARA 実験確認 1h + 論文チェック 2h
今日のBGM: MADLAX OST [1-2]
今日のランチ: ヒンメル エッグサンド,ZWLIGE,ブラオケーゼ
明日の予測作業時間: 3h

2010年4月15日木曜日

SDPARA 数値実験再開

今日は、SDPARA の数値実験を再開した。
とはいっても、昨日までも数値実験していたわけだが、前回の分は結局1週間程度かかってしまったので、仕切り直しに近い感じだ。

まずは、SDPLIB を解いたが、やはり以前では解けなかった maxG32 なども簡単に解けるようになった。もともと SDPARA はメモリが 1GB で開発しているので(今も)、maxG32 は big として別扱いにしてあったが、20GB 以上のメモリがあるところでは、とても簡単に解ける。
ただ、SDPLIB の問題は簡単に解けてしまって、並列計算による高速化があまり解からない。

他に、この前生成しておいた問題も解いている。こちらは今まで解いたことが無かったが、予想以上に速くとけるようなので、別にもっと大きなサイズも生成している。
明日、数値実験を確認するとともに、生成中の問題も解いてみよう。


あと、ATLAS の 64bit について調査。
Ubuntu 系列の ATLAS, LAPACK, ScaLAPACK はどうだろうか、調べてみた。
最初に Eco Linux で調べたところ、Eco Linux は Ubuntu の中でも 32bit 版だった、ということに気がついた。
そのあと、Ubuntu 10.04 で確認。
ヘッダーファイルなどを見てみると、やはり行列のサイズは int であるようだ。
このままだと、Matlab の MKL とで同じプログラムを使うのが難しい。

今日の作業内容: SDPARA 数値実験 2h + ATLAS チェック 1h
今日のランチ: いろは チキンカツ
明日の予測作業時間: 3h

2010年4月14日水曜日

80070020

最近、Windows Vista の Windows Update でひとつどうしてもインストールできないのがあったので、今日はそれに挑戦してみたところ、やっぱりうまくいかなくて、一日それだけで終わってしまった。

ちなみに、エラーコードは 80070020 で、Windows Update がアップデートしようとしているファイルを別のプロセスがロックしているために起きている現象のようだ。

しかも、どのファイルをどのプロセスがロックしているかを効率的に見つける方法が Vista の場合には存在しない。openfiles もあるが、表示したりしなかったりと、いまひとつ不安定である。

ウィルスソフトを停止したり、再起動なども何回もやったがダメだった。
(たぶん、再起動は今日だけで20回以上だと思う)

この Update でセキュリティが強化されるようだが、ウィルス対策ソフトを停止してたりとか、セキュリティ面では逆効果な気がする。

あと、Windows Update で気がついた点をまとめておくと、
1. 80070020 でマイクロソフトのページに行くと、セーフモードで実行するように指示されるが、実はセーフモードでは、Windows Update のサービスが実行されず Windows Update が起動できない。
2. 途中で Windows のバージョンチェックをしているらしく、インターネットに接続しないと実行できない。ウィルス対策ソフトを停止させておきながら、インターネットに接続しなければならないのでかなり危険。断念したあとに、ウィルス対策ソフトに完全チェックをかけさせている。

今日の作業内容: 80070020 6h
今日のBGM: everywhere [1-2]
今日のランチ: 鶏こまち チキンカレー
明日の予測作業時間: 3h

2010年4月13日火曜日

ATLAS 64bit 化、難しい

SDPA が 64bit で動くかどうかを調べるのに、ATLAS を 64bit でコンパイルしようとしたが、あまりうまくいかなかった。
-Dint=long
で一発変換かと思ったら、Cのヘッダーファイルの short int, long long int などが引っかかってコンパイルエラー続出だった。

ちなみに、lapack の 64bit 化は簡単だった。

SDPARA の場合、一番問題になるのは、Schur complement matrix だが、ここを回避するだけなら 'sdpa_newton.cpp' と 'sdpa_tool.h の sdpa_dset' を 10 行程度変更してコンパイルしなおせば、問題ないはずである。
(手元に手頃な大きさの問題が無いので試していないが)


あと、今日は本読みも進めた。
この本は、とても勉強になって面白い。

今日の作業内容: 本読み 3h + SDPA 3h
今日のBGM: Saga OST [1-2], MADLAX OST [1-2], everywhere [1-2]
今日のランチ: 信華園 肉野菜炒め
明日の予測作業時間: 5h

2010年4月12日月曜日

本を探し中

いま、図書室から借りてきている本を読んでいるが、この本が結構面白いので、自分でも1冊買おうかと思っているのだが、どうやら重版などがないようで、どこの本屋さんも売切れらしい。
できれば、自宅用と仕事場用の2冊ほしいのだが、1冊も手に入らないかもしれない。

あと、今日は原稿チェックと SDPARA の数値実験の途中結果の確認。
SDPARA のは3日ぐらいに量子化学が終わりそうなので、そうしたら生成しておいた別の問題に取り組むことになりそうだ。

今日の作業内容: 原稿チェック 1h + SDPARA チェック 1h + 本探し 1h
今日のBGM: everywhere [1-2]
今日のランチ: しなの カレー南蛮
明日の予測作業時間: 5h

2010年4月9日金曜日

筒、消える と GAMESS

今日は、

応用に役立つ50の最適化問題

に目を通した。
さまざまなトピックについて紹介されているので、「数理最適化」にどのような研究があるのかを把握したいときなどには有益そうだ。
定式化なども標準的なものが多いようで、解りやすい。
あと、最後の章で SDPARA についても書いてもらっている(というのをさっき知った)。

ところで、この本は「筒」が有名、と聞いていたが、第2刷になるときに誤植としてきちんと削除されたらしく、確認することができなかった。
ちなみに、この本の後ろにある参考文献で、45,46 がまったく同じタイトルで別の雑誌だったので、一瞬「二重投稿か?」と思ってしまったが、単純に 45 のタイトルが誤植なようだ。
あと、SDPA のホームページの URL が古いままになっているが、現在の URL は
http://sdpa.indsys.chuo-u.ac.jp/sdpa/
である。(Mac のページは、Mac がサービスを止めてしまったのでアクセスするとおかしなところが表示される。)



あと、今日は GAMESS のインストールをした。
ベースとして読んでいるのは、
すぐできる量子化学計算ビギナーズマニュアル
だが、GAMESS のインストールはバージョンアップからか微妙に違っているので(TARGET がlinux-pc から linux32 または linux64 になっているなど)、インターネットでも検索しながらインストールをしてみた。
とりあえず、64ページの H2O の SCF 計算までは実行できたので、インストールは正しくできたようだ。(途中、並列計算がうまくいかなかったので、そこは1台に設定した。 )
ただ、どうやら HDD のアクセスが大きいため /home と別パーティションに一時ファイルをおいたほうがいい、とのことなので、そういうようになっている別の計算機にインストールしなおそうと考えている。

SDPARA の問題生成はだいたいのメドが立ったところ。
今回の POP の問題は小さいconeが大量にあるタイプのため、SDPA のマルチスレッドでは遅くなるのだが、SDPARA ではこの部分の実装が一部異なるため、並列計算の効果が出る。
ただ、今まで作っていた問題は、思っていたよりも高速に解けてしまうため(1分以内)、並列計算用に大きい問題を生成している。

今日の作業内容: 本チェック 1h + GAMESS 2h + SDPARA 問題生成 1h + 事務処理 1h
今日のBGM: everywhere [1-2] を2回
今日のランチ: 味庵 豚の角煮と里芋煮
明日の予測作業時間: 3h

2010年4月8日木曜日

問題生成

今日は、SDPARA の問題生成。
SFSDP から発生する問題はノイズがある問題にしているので、通常のパラメータよりも実行可能性を緩和して解くように設定するが、このパラメータ調整も行った。
あとで、POP の問題についても小規模の問題を解いてみて、その特徴をあらかじめ抑えて置く
なお、SDPARA の数値実験は量子化学のものを実行中。

また、今日はこれと並行して書類作成を行った。

今日の作業内容: SDPARA 問題生成 3h
今日のBGM: everywhere [1-2], FF7 Reunion
今日のランチ: シッダルータ チキンとマッシュルームのカレー
明日の予測作業時間: 6h

2010年4月7日水曜日

事務処理な一日

今日は、事務処理がメインになってしまったため、SDPARA の数値実験の途中結果を確認しただけに終わった。

ただ、スレッド数と8から4に減らしたほうが量子化学の問題を速く解けるときがある。
8だと5万秒かかるのが4だと3万5千秒になる。
一部に複数スレッドの競合が起きているのかもしれない。

明日は、POP の問題生成を進めよう。

今日の作業内容: SDPARA 確認 0.5h
今日のBGM: かぜよみ
今日のランチ: つかさ 大根と魚のあらに
明日の予測作業時間: 4h

2010年4月6日火曜日

バグ取れた

昨日あった SparseCoLO のバグは、今日無事に取れた。
SparseCoLO では、複数のクリークのどちらに入力行列の値を置くか、に自由度があるため、SDPA の F3 式が効果的に動くように配置するヒューリスティクスが入っている。
この部分で配置するときに (i,j) 要素と (j,i) 要素が別のクリークになってしまい不具合を起こしていた。
比較的簡単に取れるバグで良かった。
(この mex ファイルは、メモリ周りが最小限ギリギリで高速に動くように設計してあるので、複雑なコードになっている)

あと、SDPARA の数値実験用に POP の問題を生成して試しに解いてみた。(これと並行して、別の問題を SDPARA で解いている。)
ただ、やはりうまく解けないことが多いようだ。
もともと POP を SDP relaxation するのは、数学的な定式化にかなり無理をしているので、主双対内点法ではまず解けない、と心得ておいたほうが気が楽である。
SDPA の場合には、ある程度パラメータをコントロールする必要がある。
今日生成したのは、パラメータコントロールでは限界があったので、別の問題を生成することにする。
明日も、書類作成と並行して POP でいろいろと生成してみよう。

今日の作業内容: SparseCoLO デバッグ 3h + POP 2h
今日の BGM: FF10-2 OST [1-2], FF5 Dear Friends
今日のランチ: らく 海鮮丼
明日の予測作業時間: 5h

2010年4月5日月曜日

バグ取り開始

だいたいの入力はうまくいくが、SparseCoLO は、たまに変な挙動を示すことがあり、これのバグ取りを開始した。
どうやらある程度の規模の問題を解かないと発生しないバグのようで、バグがあるところまで実行するだけでも数分かかってしまう。
とりあえず、どこにバグがあるのかを確認するために mex ファイルを読み直しているが、プログラムを作ってからだいぶ経ってしまっているため、細かいところを思い出すのに時間がかかっている。
やはり、デバッグ用の出力をプログラムに残しておく、ということはとても大事だとわかる。

今日の作業内容: バグ取りスタート
今日のBGM: SKY OST [1-2], FF6 Grand Finale, Xenosaga III OST [1-2]
今日のランチ: 角笛 ボンゴレビアンコ
明日の予測作業時間: 4h