2014年3月20日木曜日

SDPA-M for 64bit Windows MATLAB バイナリを作成

SDPA-M の Windows 版については、いままで 32bit しか提供していなかったが、64bit でもコンパイルに成功したので、これをダウンロード可能とした。ファイルは、

https://sourceforge.net/projects/sdpa/files/sdpa/windows/sdpam-7.3.9-windows.zip

に置いてある。

64bit バイナリは、Debian jessie 上のmingw64で MatlabR2014a 用にコンパイルしている。
コンパイルするうえでのポイントは以下の通り。

[1] クロスコンパイラとして x86_64-w64-mingw32 の系統を使う

[2] OpenBLAS の libopenblas.a がなぜか ranlib がかかっていないことがたまにあるので、
$ x86_64-w64-mingw32-ranlib libopenblas.a
を明示的に実行

[3] pthreads は mingw64 でインストールされているので、それを利用できる
(以前のSDPA-Mのコンパイルでは、別途 cvs でダウンロードしてコンパイルしていたが、その必要がなくなった)

[4] mingw の DLL 依存を外すために、
x86_64-w64-mingw32-gcc, x86_64-w64-mingw32-g++, x86_64-w64-mingw32-gfortran には
-static オプションを追加する
なお、sdpa.exe DLL 依存の状況は、
$ x86_64-w64-mingw32-objdump -p sdpa.exe | grep DLL
などとするとわかる。

[5] mex を mingw でコンパイルするときには、Windows の Matlab から
$MATLAB_ROOT/extern/include/*.h と
$MATLAB_ROOT/bin/win64/libmex.dll,$MATLAB_ROOT/bin/win64/libmx.dll をコピーしてくる必要がある。
なお、Windows の Matlab に libmex.lib や libmx.lib があり、これを使ってもコンパイルができてしまうが、実行時に Matlab がハングアップするので、dll と lib の違いには気を付ける。


2014年3月11日火曜日

書籍「はじめての最適化」

今回チェックした書籍は、「はじめての最適化」である。

Amazon へのリンクなら
http://www.amazon.co.jp/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AE%E6%9C%80%E9%81%A9%E5%8C%96-%E9%96%A2%E5%8F%A3-%E8%89%AF%E8%A1%8C/dp/4764904500
である。

内容としては、凸関数から始まり、制約なし最適化、制約付き最適化と非線形最適化問題を見た後に、線形計画問題に移って、変分問題を扱っている。

このうち、非線形最適化問題のあたりは、KKT 条件などのグラフが多く、視覚的な理解が深まりやすいと思う。

また、個人的には双対問題の解釈が分かりやすくて、とてもいいと思う。
双対問題は、定式化からの天下りになりやすいが、栄養問題と食品購入料の不等式を考えるようになっており、よく考えられた説明である。