tag:blogger.com,1999:blog-74878923853340840142024-02-02T13:41:25.097+09:00SDPARA を開発しようSDPARA (半正定値計画問題用並列計算ソフトウェア)からスタートして、数理最適化について興味のあることを書いています。
Margarethttp://www.blogger.com/profile/12298449211746079645noreply@blogger.comBlogger1284125tag:blogger.com,1999:blog-7487892385334084014.post-71191191076381328862022-03-30T17:55:00.001+09:002022-03-30T17:55:00.176+09:00Google Colab ってパッケージ開発者にとっていい環境かもしれない<p>Python プログラムの勉強をするときに Google Colab って便利だなぁ、と思ったりしている。</p><p>いろんなパッケージなどが入っていることもそうだけど、やはり一番の理由は「環境構築が必要ない」というところ。pipenv や venv あるいは conda と pip などの「複数ある手法のうちのどれを使えばいいの?」ということがないのが、かなり良いのではないかと思う。</p><p>特にパッケージ開発者の場合は「Google Colab でテストして問題ありませんでした」だけにできれば、pipenv, venv, conda などの複数の環境でテストする必要もなくて、効率的にはなりそう。</p><p>ちなみに、Julia の場合は Google Colab を使ってもいいけど、Julia の環境構築は簡単なのでローカルにインストールするのも大変ではないかな、と思う。<br /></p>Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-39393249818491304582022-02-18T18:09:00.003+09:002022-02-18T18:09:39.048+09:00Julia のベクトル計算高速化<p> Julia についての本ということで「1から始める Julia プログラミング」を読んでみた。タイトルから見ると初心者向けのようにも見えるけど、Julia で基本的なプログラミングができる段階から読んでみると多くの勉強になるかと思う。</p><p> 例えば、ベクトル x = [5; 3] に対して, a = 7, b = 4 のスカラーのときに<br />a*x .+ b<br />とすれば、数式で言うa*x+b*[1; 1] が計算できるわけだけど、これは<br />a.*x .+b あるいは @.(a*x+b)<br />の方が良い。</p><p>これがなぜ良いのか、という理由が分かりやすく書いてある。上の例だと小規模なのであまり影響が出ないが、最急降下法などで反復回数が増えるとパフォーマンスに違いが出そうにも思う。(この違いをコンパイラが最適化で吸収すると、パフォーマンスの違いはなくなるかもしれないけど。)</p><p>他にも、コードを関数の中に入れるだけで Julia は高速化されやすくなるのか、など、高速化の理由が書いてあり勉強になる。</p><p>あと、パッケージ管理や仮想環境などについても触れていたりなどなど、勉強になる点が多い。<br /></p>Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-20663693462437053482021-12-24T11:03:00.000+09:002021-12-24T11:03:12.568+09:00Python が難しすぎる<p>数理最適化のアルゴリズムを実装するにあたって、たまに Python を使うことがあるが、だいぶ Julia に慣れてしまうと Python は難易度が高いように感じる。</p><p>個人的に難しいと思うのは主に3点で</p><p>1. conda と pip が混ざると環境が壊れることがある</p><p>2. python のバージョンが上がったときに対応できないライブラリがあって、複数の python を維持しないといけない</p><p>3. インデントでループ範囲を特定するため、コピー&ペーストが簡単にできない</p><p> </p><p>2番については Julia でも他のライブラリで同じことは起きるので本質的な解決はできないことは同じだが、Pythonのほうがバージョン管理をきちんと行わないといけないような印象がある。</p><p>3番については、どこか別のプログラムで書いた一部分をコピー&ペーストしたときに、ループ範囲のインデントのスペース数が異なるとややこしいことになってしまう。このあたりは、for~end などで特定できると整形はエディタにお任せできるので、だいぶ楽ではある。</p><p><br /></p><p>ただ、Julia が完璧かというとそういうわけでもなくて、例えば using の遅さなどはそのうちに改善されていくのではないかと思っている。Python もパッケージ管理や仮想環境管理は、もっといいものが出てくるのではないかと思っている。</p><p> </p><p><br /></p><p><br /></p>Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-23734455169152300422021-08-31T14:35:00.002+09:002021-08-31T14:35:32.273+09:00SIAM Optimization 2021 と IFORS 2021<p>SIAM Optimization と IFORS 2021 に参加してみた。</p><p>2つともに元々は2020年に開催予定だったものが、延期でオンライン開催になったものだ。</p><p>SIAM Optimization はアメリカ東海岸の時間に合わせて、基本的にはリアルタイムでの参加、IFORS は開催国の韓国の時間に合わせてビデオ上映+リアルタイムでの質疑応答、というスタイルになっていた。</p><p>IFORS については、開催前に発表ビデオをアップロードしておくスタイルだったので「質疑応答をリアルタイムでする意味あるのかな?」と疑問ではあったけど、やってみるとSIAM Optimization のように全部をリアルタイムで行うよりも良いスタイルのように感じた。</p><p>やっぱり発表するというのは、それなりに体力を使うので、そのあとの質疑応答まで続けると、発表者にも疲れが出ていることがあるけど、先に発表の部分をビデオ撮りしているからか質疑応答もテキパキと進んでいる感じがあった。あと、質疑応答の時間だけなら時差があっても何とか乗り越えられる、という印象も多かった。</p><p>開催する側にとってはビデオのアップロードをサポートしたり、それをちゃんと発表時間に合わせて再生したり、などなど手間暇もかかると思うだろうけど、個人的には結構な好印象だった。</p><p>まぁ、IFORSは日本との時差が0時間で体力的に楽だったというのは、あるかもしれない。<br /></p><p> </p><p>いまのところ、2つの学会で収集した論文などの情報を整理しているところで、どの内容が面白いかも、少しずつ確認していきたいところ。</p>Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-32601806633615826432021-04-03T21:35:00.000+09:002021-04-03T21:35:02.650+09:00SDPA with different compilers and linear algebra libraries<p> 2014年とかなり以前の記事だけど、</p><p> SDPA with different compilers and linear algebra libraries</p><p><a href="https://peterwittek.com/2014/08/sdpa-with-different-compilers-and-linear-algebra-libraries/">https://peterwittek.com/2014/08/sdpa-with-different-compilers-and-linear-algebra-libraries/</a> </p><p>という記事を見つけた。</p><p>gcc, icc, pgi というコンパイラでSDPAをコンパイルしたときにどれくらいの差が出るか、というのをまとめてあって、結構コンパイラによっても性能に差が出るのが面白い。</p><p><br /></p><p> </p>Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-36700332964891341472021-03-31T10:27:00.003+09:002021-03-31T10:27:46.337+09:00ダークモードを止めてみた<p> いろんなエディタなどでダークモードがあるので、ダークモードも使ってみたけど、結局はやめることにした。</p><p>一番の理由として「目が疲れる」があった。</p><p>論文を読みながらプログラムを作ったりするわけだけど、論文はPDFなのでフォントを自由に変更することができない。論文のフォントはダークモードを前提にしているものではないので、ダークモードだと読みづらい。結果的にPDFはライトモードでエディタがダークモードだと明暗の差に目を合わせるのが頻繁になってしまって、目が疲れてしまう。</p><p>やはり、PDFはフォントを変えることができないのが長時間読む場合でも辛いので、なんとかならないものかな、と思ったりしている。</p><p><br /></p><p><br /></p>Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-65110404066387648382021-03-20T09:16:00.001+09:002021-03-20T09:16:40.825+09:00RictyやMigu 1Mを試してみたけど<p> それなりにプログラミングをしている時間もあるので、フォントを変更したらもっと便利かもしれない、と思ってやってみたけど、結局ダメだった。</p><p> Ricty Dimished や Migu 1M などが良さそうなので、それを試してみた。(個人的には0は中にドットが入っているものよりもスラッシュが入っているほうが見やすいので、そういうので選んでみた。)</p><p> 確かに見やすくはなったのだけど、これらのフォントでは自分の環境では</p><p> <span style="color: red;">εが正常に表示できなかった。 </span></p><p>自分のプログラムでは0とOやIとlと1を見間違えることはほぼないので、それらの差が見た目で分からなくても対して困らないのだけど、さすがに \epsilon が \cdot になってしまうのは致命的なので、結局フォントはデフォルトに戻した。</p><p>たぶん自分の環境で上手くいかないだけで他の環境では上手く表示できているんだろうけど、逆にどうやって解決したらいいのかが情報収集できず断念。</p><p>個人的には Migu 1Mは見やすいと思う。</p><p><br /></p><p><br /></p>Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-4329304220720791622021-03-04T14:46:00.001+09:002021-03-04T14:46:00.344+09:00ヤマザキ 春の最適化まつり<p>「ヤマザキ 春のパンまつり」では、各パンに点数がついていて合計点数が28点を超えるとお皿を1枚もらえる、ということになっている。</p><p> こうなると最適化の視点では当然のことながら「1枚もらえる最小金額がいくらだろうか ?」というのが気になってくる。</p><p>そこでサクッとJuliaで最適化を行ってみた。</p><p>[1] まずはデータが必要ということで</p><p>https://gameboku.com/archives/21020003.html</p><p>に纏めてくれてあるデータを使わせてもらうことにして</p><p> 【表1】全対象商品(338品) 点数・カロリー効率一覧</p><p>の表部分をExcel にコピー&ペーストして UTF-8 の CSV として保存する。ファイル名については、今回はあまり深く考えずに Book1.csvとしておいた。</p><p>[2] 以下の Julia コードを実行する。</p><p>==========================</p><p>using CSV<br />using DataFrames<br />using JuMP<br />using GLPK<br />using LinearAlgebra<br /><br />df = CSV.File("Book1.csv", header=true, delim=',') |> DataFrame<br /><br />point = df.得点<br />price = df.価格<br />name = df.商品名<br />n = length(price)<br /><br />model = Model()<br />set_optimizer(model, GLPK.Optimizer)<br />@variable(model, x[1:n]>=0, Int) # 商品は整数個<br />@constraint(model, dot(point, x) >= 28) # 合計28点以上<br />@objective(model, Min, dot(price, x)) # 合計金額を最小化<br /><br />optimize!(model)<br /><br />x_value = Int.(value.(x)) # 最適解を得る<br />optimal_value = Int(objective_value(model)) # 最適値を得る<br /><br />nz_index = findall(x_value .!= 0) # 0 個になっていないところのみを抜粋<br /><br />println("--最適合計金額 = $(optimal_value)円")<br />println("--最適解--")<br />for index in nz_index<br /> print("$(name[index])")<br /> print("[$(point[index])ポイント, $(price[index])円]を")<br /> print("$(x_value[index])個購入する")<br /> println()<br />end<br /></p><p>========================== <br /></p><p> [3] 結果を見る</p><p>プログラムにバグとかがなければ、これで求めることができる。</p><p>Julia を使うのが面倒であれば、Excel のソルバーを使っても同様に求めることができる。</p><p>ちなみに、点数が0.5,1.0,1.5,2.0,2.5と0.5点刻みとシンプルなので、最適解も結構シンプルな組合せになるようだ。</p><p><br /></p><span></span>Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-6959955665052466512020-11-26T11:35:00.000+09:002020-11-26T11:35:01.477+09:00TeXLive の10%しか使ってない<p>TeXLive を 2020 に上手く更新できなかったので再インストールすることした。</p><p>scheme を full にして完全インストールすると5GB以上のディスクを消費するが、試しに scheme を basic にしてインストールしてみた。</p><p>もちろん、いろいろと足りないパッケージがあって、例えば algorithm.sty が入ってなかったので、</p><p>$ tlmgr search --global --file algorithm.sty</p><p>として algorithms パッケージを特定して、これをインストールしてみた。</p><p>$ tlmgr install algorithms<br /></p><p>他にも足りないものがあれば逐次インストールして、あと platex も入ってなかったのでplatexもインストールしてみた。<br /></p><p>結果的には500MBぐらいの容量だけで自分が使っているTeXソースをコンパイルできた。</p><p>どうやら、自分のところではTeXLiveの機能の10%だけで十分なようだ。</p><p> </p><p><br /></p>Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-30343914591515755242020-11-18T14:31:00.004+09:002020-11-18T14:31:59.203+09:00ssha (sshでなくて)<p>Termuxを使っているときに気がついたけど、ssh だけでなく ssha というコマンドもあり、これが結構便利。</p><p>ssha の場合は、<a href="https://wiki.termux.com/wiki/Remote_Access">https://wiki.termux.com/wiki/Remote_Access</a>にも 書かれている通り、</p><p>ssh-agent を自動的に処理してくれることになっており、例えば</p><p> $ ssha server01</p><p>としてsshのパスフレーズを入力してserver01 にログインした後に、もう一度 Termux の別のセッションから</p><p> $ ssha server01</p><p>とすると、今度はパスフレーズの入力を省略してログインできる。</p><p><br /></p><p>片方のセッションでエディタを使っていて、もう片方でコマンドラインで実行する、と言ったときに便利。(似たようなことは screen コマンドで複数のウィンドウを使ってもできるけど。)</p><p> </p><p><br /></p>Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-28291958317924005722020-09-25T14:03:00.002+09:002020-09-25T14:03:30.128+09:00Matlab の mex のための gcc 6.3.0 のコンパイル方法<p> Matlab R2020a のmexでコンパイルするには、gcc のバージョンが6.3.0とかなり古いものが必要となるが、gcc 6.3.0 はそのままではgcc 10.1.0 ではコンパイルできなかったので(途中でエラーが出る)、コンパイル方法をメモしておく。</p><p>$ wget http://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-6.3.0/gcc-6.3.0.tar.gz</p><p>$ tar xzf gcc-6.3.0.tar.gz</p><p>$ mv gcc-6.3.0 gcc-6.3.0-source</p><p>$ cd gcc-6.3.0-source</p><p>$ ./contrib/download_prerequisites</p><p>$ cd ..</p><p>$ mkdir -p build</p><p>$ cd build</p><p>$ ../gcc-6.3.0-source/configure --prefix=[インストールパス]/gcc-6.3.0 --disable-multilib --disable-libsanitizer</p><p>$ make</p><p><br /></p><p>make が途中で止まったら、</p><p>emacs +61 x86_64-pc-linux-gnu/libgcc/md-unwind-support.hn</p><p>で</p><p>struct ucontext *uc_ = context->cfa;</p><p>を</p><p>ucontext_t *uc_ = context->cfa;</p><p>とする。</p><p><br /></p><p>これで再度 make をする。</p><p>$ make</p><p>また停止したら、 `find . | grep java-signal.h`</p><p>./include/java-signal.h:31:10: note: forward declaration of ‘struct _Jv_catch_fpe(int, siginfo_t*, void*)::ucontext’</p><p> struct ucontext *_uc = (struct ucontext *)_p; \</p><p>の部分を</p><p> ucontext_t *_uc = (ucontext_t *)_p; \</p><p>にする。 </p><p><br /></p><p>これで再度 make をする。</p><p>$ make</p><p>あとは make install する</p><p>$ make install </p><p><br /></p><p>インストールした後の環境変数の設定方法としては、</p><p>export PATH=[インストールパス]/gcc-6.3.0/bin:$PATH</p><p>export LD_LIBRARY_PATH=[インストールパス]/gcc-6.3.0/lib64/:$LD_LIBRARY_PATH</p><div>とする。</div><div><br /></div>Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-10653086097044733352020-03-11T16:40:00.001+09:002020-03-11T16:40:18.656+09:00Dropbox paperのダークモードDropbox paper が LaTeX 表記を使えるので、他の人に送りたい簡単なメモなどにつかっったりしている。<br />
いつごろかダークモードにできるようになって、自分のPCではダークモードになっているのだが、困ったことに切り替えボタンが見つからない。。。<br />
ダークモードと普通のモードの切り替えができずにどうしたものか。。。<br />
<br />Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-60014548261516224062020-02-19T22:58:00.002+09:002020-02-19T22:58:31.103+09:00Julia の using にかかる時間を先に precompile するJulia でプログラムを実行していると、using のときに precompile が行われるのだけど、これが結構な頻度であって、しかも時間がかかる。しかも、「ちょうど計算を始めたタイミング」で起きるので、あんまり感じが良くない。<br />
<br />
こういったのは、パッケージモードに入って precompile しておけばよいようだ。<br />
<br />
julia > ]<br />
(v1.3) pkg > precompile<br />
<br />
これでインストールされているパッケージがすべてprecompileされた状態になる。<br />
<br />
<br />
<br />Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-81972630985489404522020-02-03T12:03:00.001+09:002020-02-03T12:03:58.319+09:00論文読み:Centering ADMM for the Semidefinite Relaxation of the QAP今回チェックした論文は<br />
Centering ADMM for the Semidefinite Relaxation of the QAP<br />
http://www.optimization-online.org/DB_FILE/2020/01/7569.pdf<br />
というもの。<br />
<br />
タイトルにある通り、ADMMでQAPに対するSDP緩和を解くという話だけど、<br />
単純なADMMではなく、内点法のバリア関数のように log det を導入して、<br />
中心パスの近くに寄せようというもの。<br />
<br />
アルゴリズムのアイデアについては面白いなぁ、と思う。<br />
first-order method と second-order method の両方の性質を兼ね備えていると面白い。<br />
<br />
数値実験については、計算時間が掲載されていないので、パフォーマンスは良く分からない。<br />
あと、最後の Table 3 は、 mu < 1.0e-3 という比較的緩めの停止条件なので、<br />
Centering LB と Standard LB の差はそれほど大きくない(有効桁数よりも小さいところ)。<br />
<br />
個人的には、SDPに対して ADMM を使うのは、やはり固有値分解のボトルネックが気になるところ。<br />
内点法だとCholesky分解で計算できるので入力行列の疎性をそのまま変数行列に引き継げるので、<br />
そのあたりで工夫の面白さもあるけど、固有値分解を入れてしまうと、この疎性が壊れてしまうことが多い。<br />
<br />
A fixed-point method for approximate projection onto the positive semidefinite cone<br />
https://www.sciencedirect.com/science/article/pii/S0024379517300903<br />
とかにあるような手法で近似計算したほうが良いのだろうか?<br />
<div>
<br /></div>
Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-29248564753751356342020-01-18T12:26:00.001+09:002020-01-18T12:26:14.688+09:00論文読み:An inexact first-order method for constrained nonlinear optimization今回チェックした論文は、<br />
An inexact first-order method for constrained nonlinear optimization<br />
<a href="https://www.tandfonline.com/doi/abs/10.1080/10556788.2020.1712601?journalCode=goms20">https://www.tandfonline.com/doi/abs/10.1080/10556788.2020.1712601?journalCode=goms20</a><br />
<br />
一般(非凸も含むけど関数は連続微分可能)の制約付き最適化問題について、first-order method で解く、というもの。<br />
アルゴリズムの特徴としては、<br />
1. 制約はペナルティ項として目的関数に組み込んで、それを最小化する。等式制約c(x)=0については絶対値 |c(x)| を用いて、不等式制約 c(x) <= 0 については max{c(x), 0} を用いる。<br />
2. ペナルティ項付き目的関数を1次までのTaylor展開をして(つまり線形近似をして)、それを最小化することで探索方向を決める。さらに探索方向に沿って Armijo のルールを適用してステップ長を決める。<br />
3. ペナルティのウェイトは、双対問題の情報を使って更新する。<br />
4. 子問題を解いたりするときには信頼領域法も併用する。<br />
<div>
<br /></div>
<div>
計算量については、得たい精度が epsilon の場合には O(1/(epsilon^2)) ということで、first-order method ではよく見かえる計算量なわけだけど、面白いと思うのは非線形の制約がついても計算量としては決して悪くない、ということ。</div>
<div>
つまり、epsilon だけで計算量を評価する場合には、制約なし最適化問題と制約あり最適化問題は計算量が同じになるということである。</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
個人的には、今回の論文のアルゴリズムは複雑すぎる印象がある。例えば、Armijo のルールと信頼領域法を併用しているのは、どちらか一方でいいようにも感じる。</div>
<div>
その一方で、一般の制約付き最適化問題への first-order method の適用はあまり多くないので、こういったところから他の手法を組み合わせていろいろと発展させられるかもしれない。</div>
<div>
<br /></div>
Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-67320880283183515242020-01-12T06:49:00.001+09:002020-01-12T06:49:32.444+09:00論文読み:On the Complexity of an Inexact Restoration Method for Constrained Optimization今回チェックした論文は、<br />
On the Complexity of an Inexact Restoration Method for Constrained Optimization<br />
<a href="https://epubs.siam.org/doi/abs/10.1137/18M1216146?mobileUi=0">https://epubs.siam.org/doi/abs/10.1137/18M1216146?mobileUi=0</a><br />
というもの。<br />
<br />
非線形の制約付き最適化問題<br />
min : f(x) s.t. h(x) = 0, x \in Omega<br />
に対する IR (Inexact Restoration) が O(epsilon_{feasible}^{-1} + epsilon_{optimality}^{-2}) の反復回数で収束する、というもの。<br />
ここで、epsilon_{feasible} は h(x) = 0 に対する許容残差で、epsilon_{optimality}は最適値に関する許容ギャップというところ。<br />
あと、Omega は compact である、という仮定を満たせば理論的には良くて、実用上は l<=x <= u のような上下限制約などがおもなたいしょうになるとのこと。<br />
<br />
アルゴリズムは、||h(x)||^2 を減らす Restoration Phase と f(x) を減らす Phase があって、それぞれの Phase では、BFGS、あるいは SQP に近いような近似によって計算が行われている。ただ、2次微分は使っていないので、基本的には first-order method の範囲であり、そう考えると、上の計算量のオーダーも納得というところ。<br />
<br />
この論文ではアルゴリズムの数値実験は行っていないのでどれくらいの速度で実際に計算できるかどうか分からないが、アルゴリズムの構成からすると最適解近くでの収束速度が良くなさそうにも思う。(もともと SIAM Journal on Optimization という雑誌に載っている結果は理論面がメインなので、実際の計算速度という意味では他の雑誌に載っているアルゴリズムの方が良いことが多いように個人的には思っている。)<br />
<br />
この論文の拡張としては、シンプルなものとしては、制約に半正定値制約を入れて SDP も扱えるようにする、とかがあるかと思う。<br />
<br />
<br />Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-50202182471592985702020-01-08T21:10:00.000+09:002020-01-12T06:34:16.542+09:00Termux の Emacs の起動を速くするTermux での Emacs を起動すると 7 秒程度かかるので、これを少しだけ速くする。<br />
<br />
基本的には言語のロードを外す。<br />
具体的には<br />
cd /data/data/com.termux/files/usr/share/emacs/26.3/lisp<br />
cp loadup.el loadup.el.original<br />
として、<br />
emacs loadup.el<br />
で<br />
<br />
<div>
(load "language/chinese")</div>
<div>
(load "language/cyrillic")<br />
...<br />
<br /></div>
<div>
などとなっている各言語で自分が使わないところは行頭にセミコロンをつけてコメントアウトする。</div>
<div>
これによって、だいたい5秒ぐらいまで短縮された。</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
本当は他のパッケージも外したいところだが、なぜか上手くいかず、変なメッセージが出て Emacs がクラッシュしてしまう。</div>
<div>
<br /></div>
Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-32130135907068491992020-01-01T21:13:00.002+09:002020-01-01T21:13:21.600+09:00論文読み:A Limiting Analysis on Regularization of Singular SDP and its Implication to Infeasible Interior-point AlgorithmsA Limiting Analysis on Regularization of Singular SDP and its Implication to Infeasible Interior-point Algorithms<br />
<br />
<a href="http://www.optimization-online.org/DB_HTML/2019/12/7528.html">http://www.optimization-online.org/DB_HTML/2019/12/7528.html</a><br />
<br />
SDPの場合には、主問題と双対問題の両方に内点実行可能解があれば(つまり、Slater の条件が満たされれば)、主問題と双対問題の最適値が一致する、という双対理論は良く知られている。<br />
<br />
この論文で扱っているのは、内点実行可能解がない場合(weakly infeasible とかなっている場合)にどうするか、という話で、結論を先に書くと「主問題と双対問題の最適値の間が得られる」ということだった。<br />
<br />
個人的に今後の展開として面白そうかな、と考えられるのは、以下の2点といったところ。<br />
1.homogenous self-dual の定式化を行ったときに、「主問題と双対問題の最適値の間のどこにくるか」を、より正確に扱うことが出来るかどうか。(例えば kappa と theta のあたりを解析すると面白いかもしれない。)<br />
2.SDP緩和をすると目的関数値が -\inftyになってしまうような問題(SDP緩和が非常に弱い例)にどういう値が得られるか(元問題との差がどれくらいになるか)。<br />
<br />
<br />Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-53048686850068429512019-12-30T21:38:00.000+09:002019-12-30T21:38:08.831+09:00Termux で日本語入力Termux だと IME によっては日本語入力がうまくいかない。<br />
例えば、Google 日本語入力だと日本語が入力できないことがある。<br />
<br />
このときには、<br />
[ESC 両矢印 CTRL ALT ... ]<br />
となっている部分を左側にスライドさせると、入力スペースが出てきて、ここはIMEで入力したものがそのまま Termux に貼り付けられるので、Google 日本語入力でも日本語入力ができる。<br />
(ただし、入力できるのは Emacs や nano などに限られるようで、bash ではこの手順でも入力できなかった。)<br />
<br />
ちなみに、Google 日本語入力は英字入力の際に必ず入力候補が出てきてしまい、直接入力ができないので、Emacs の C-x C-s などの入力が非常に困難。日本語だけを Google 日本語入力にして、英字は別のIMEに任せると比較的スムーズ。<br />
<br />Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-77895662083923010802019-12-14T22:51:00.000+09:002019-12-14T22:50:59.999+09:00Julia で ls() の代わりJulia の REPL だと ls が使えないのでちょっと面倒だけど(もちろん shell モードなら使える)、代わりとして<br />
julia > readdir()<br />
とすれば、ディレクトリにあるファイル名が分かる。<br />
<br />
正規表現も使えるので、jl で終わるファイルを探すなら<br />
julia > [name for name in readdir() if occursin(r"jl$", name)]<br />
とすると分かる。<br />
<br />
ちなみに、shell モードだと何故かアスタリスクを受け付けてくれない。<br />
<br />
shell> ls *<br />
ls: '*' にアクセスできません: そのようなファイルやディレクトリはありません<br />
<br />
<br />Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-91329631763127404942019-12-07T00:15:00.000+09:002019-12-07T00:15:28.363+09:00Julia で print を色付きにするJulia では<br />
print("Hello")<br />
とすると、普通に Hello と表示してくれるが、<br />
printstyled("Hello", color = :blue)<br />
とすると、青字で Hello と表示してくれる。<br />
<br />
こういったのは、例えば、「計算結果がおかしいかもしれないから気をつけて」などというところに使うと便利。<br />
<br />
何色が使えるかというと、<br />
?printstyled<br />
でヘルプを表示すると良くわかる。<br />
<br />Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-75872251165028577532019-11-30T10:13:00.002+09:002019-11-30T10:13:48.369+09:00この軽量ノートPCが軽量すぎるいろいろと調べてみたら<br />
<a href="https://www.amazon.co.jp/dp/B07W6ZKJWJ/ref=psdc_2151981051_t2_B07T1G26NX">https://www.amazon.co.jp/dp/B07W6ZKJWJ/ref=psdc_2151981051_t2_B07T1G26NX</a><br />
という「超軽量薄型PC」と打ち出してあるだけあって、ビックリするぐらい軽量で、「商品重量4.54g」と書いてある。たぶんCPU1個分よりも軽い。<br />
<br />
こういうのは単なる入力間違いだと思うけど、こういう単なる入力間違いを自動的に検出できる機能があれば面白いと思う。例えば、病院の薬剤の量などを入力間違いしたときに自動的に注意してくれるシステムなどにも使えるのではないかと思う。<br />
<br />
<br />
<br />
<br />Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-73568653847301843542019-11-12T14:21:00.002+09:002019-11-12T14:21:15.303+09:00Julia でパッケージを作るJulia で公式パッケージに登録するのは比較的簡単で、やり方としては<br />
<br />
Julia でのパッケージの作り方<br />
https://qiita.com/cometscome_phys/items/989389db3540ebd9e026<br />
がとても参考になる。<br />
<br />
ただ、若干情報が古いようで、「リリースの登録」にある<br />
https://github.com/attobot/attobot<br />
については、Registrator.jl によって登録するようになっている。<br />
https://github.com/JuliaRegistries/Registrator.jl<br />
具体的には、<br />
https://pkg.julialang.org/registrator/<br />
で「Log in to GitHub」を使ってログインして、<br />
URL of package to register:<br />
Git reference (branch/tag/commit):<br />
Release notes (optional):<br />
を入力して、「Submit」を押せばよい。<br />
<br />
こうすると<br />
https://github.com/JuliaRegistries/General/pulls<br />
にNew packageとして登録されるので、これが承認されるのをじっと待てばよいことになる。<br />
承認待ちのリストを見ると、だいたい一週間以内には承認されるようだ。<br />
<br />
<br />
他に参考になったのは<br />
<br />
覇権を取る、Juliaパッケージの作り方 Part2<br />
https://logmi.jp/tech/articles/321564<br />
のあたり。<br />
<br />Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-36216820797067008992019-11-09T15:17:00.000+09:002019-11-09T15:17:00.753+09:00beamerのコンパイル速度を上げるbeamerのコンパイルが遅いので調べてみたら、ある特定のページだけをコンパイルする方法があった。<br />
<br />
<a href="https://tex.stackexchange.com/questions/27351/speed-up-beamer-compile-time">https://tex.stackexchange.com/questions/27351/speed-up-beamer-compile-time</a><br />
のところの最初の Answer に載っているが<br />
\includeonlyframes<br />
を使えば可能である。<br />
「いま編集しているページをコンパイルして確認したい」ということは多いので、これによって解消できる。<br />
<br />
<br />
一方で、1ページだけコンパイルすると preamble の部分 (\begin{doument}よりも前の部分)がコンパイルに時間がかかっていることが分かる。<br />
preamble だけを別にコンパイルする方法が<br />
https://ubutun.blogspot.com/2015/06/precompiled-preambleplatex.html<br />
に載っているので、これを\includeonlyframesと合わせて試してみたら、相当コンパイルが速くなった。<br />
<br />
<br />
ただ、preamble の部分を別にコンパイルしたものをチェックしてみたら 8MB もあった。つまり、beamer をコンパイルする、というのは1ページだけであっても8MBぐらいバイナリーファイルを生成するようなコンパイルをしているわけであって、beamer のコンパイルが遅いのも納得である。<br />
うーん、latex も C言語みたいにオブジェクトファイルとか生成出来たら、べんりなのかもしれない。<br />
<br />Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0tag:blogger.com,1999:blog-7487892385334084014.post-65880055697393405912019-11-07T09:06:00.000+09:002019-11-07T09:06:45.410+09:00Android の Termux のplatexで日本語PDFを作るAndroid のタブレットで PDF を生成できるか、というテストを行ってみたら、上手くできたのでステップを書いておく。<br />
<br />
1. Google Play で Termux をインストールする<br />
2. Termux の中で termux-setup-storage を実行してファイルシステムへのアクセス権限を付与する<br />
3. pkg update<br />
4. pkg upgrade<br />
5. (オプション作業) sshd をインストールするとパソコンからログインしてキーボードで作業できるので便利である。<br />
pkg install openssh<br />
でインストールした後に ~/.ssh/ に普段通り鍵を置いておいて、Termux で<br />
sshd<br />
とする(ポート番号は 8022になる)。終了するには<br />
pkill sshd<br />
である。<br />
6. pkg install texlive texlive-bin texlive-fontutils texlive-langjapanese texlive-tlmgr ghostscript wget<br />
必要に応じて他のパッケージもインストールする<br />
7. これで pdflatex は使えるようになっているので、適当に英語だけのtest01.texをviなり他のエディタで作成して<br />
pdflatex test01.tex<br />
で test01.pdf ができることを確認する。test01.pdf は Termux から<br />
termux-open test01.pdf<br />
とすれば、Android で普段使っている PDF リーダーが起動する。<br />
8. pdflatex だと日本語が通らないので、日本語を通すために IPAex フォントをインストールする<br />
mkdir ~/.fonts<br />
cd ~/.fonts<br />
wget https://ipafont.ipa.go.jp/IPAexfont/IPAexfont00401.zip<br />
unzip IPAexfont00401.zip<br />
mv IPAexfont00401/ipaexg.ttf ~/.fonts<br />
mv IPAexfont00401/ipaexm.ttf ~/.fonts<br />
rm -rf IPAexfont00401*<br />
9. mktexlsr<br />
10. fc-cache -v<br />
11. ~/.fonts/cid-x.map のファイルを以下の内容にする<br />
rml H ipam.ttf<br />
gbm H ipag.ttf<br />
rmlv V ipam.ttf<br />
gbmv V ipag.ttf<br />
<div>
12. 日本語を含む test02.tex を作成して</div>
<div>
platex test02.tex</div>
<div>
dvipdfmx -f ~/.fonts/cid-x.map test02.dvi</div>
<div>
とすると、日本語を含むPDFとしてtest02.pdfができるので、これを</div>
<div>
termux-open test02.pdf </div>
<div>
で開いて内容を確認する。</div>
<br />
<div>
参考にしたサイト</div>
<div>
1. TermuxでSSH Serverを起動する</div>
<a href="https://qiita.com/dev100kg/items/11fdaac265c35e777664">https://qiita.com/dev100kg/items/11fdaac265c35e777664</a><br />
2. IPAexフォント Ver.004.01<br />
<a href="https://ipafont.ipa.go.jp/node193">https://ipafont.ipa.go.jp/node193</a><br />
3. LaTeXdvipdfmxdvi を pdf に変換<br />
<a href="http://www.yamamo10.jp/yamamoto/comp/latex/dvipdfmx/dvipdfmx.html">http://www.yamamo10.jp/yamamoto/comp/latex/dvipdfmx/dvipdfmx.html</a><br />
<br />
<br />Margarethttp://www.blogger.com/profile/14581176378009282945noreply@blogger.com0