われがわログ

最適化アルゴリズムとかプログラミングについて書きたい

Python

中心力場における単一質点の軌道の可視化

最近、V.I.アーノルド「古典力学の数学的方法」を読んでいるのだが、かっこいい図があったので自分で描いてみた。 古典力学の数学的方法作者:V.I.アーノルド発売日: 2003/05/28メディア: 単行本 円環の中、至るところ稠密な軌道 エディタのAtomみたいな画像…

Near-identity diffeomorphismsを用いた差動二輪ロボットの制御

Turtlebot3をシミュレータ上で動作させて以来、「差動二輪ロボットの駆動則(速度指令値から進行方向速度・回転角速度への変換則)って何があるんだろう」と思っていたのだが、よさげなやつを最近発見したのでメモしておく。 東工大&Georgia Techによる論文…

Pythonでループ内でlambdaを使う際には注意しろ

Pythonでlambdaで関数オブジェクトを作り、リストにループで突っ込んだところ、 意図した結果にならず盛大に時間を溶かしたのでメモしておく。 まとめ C++の std::bindみたいにPythonのlambdaを使う場合には functools.partialを使う。 本文 以下のコードの…

conda-forgeにパッケージを追加する手順

mesaをconda (正確にはconda-forgeチャネル)からインストールできるようにしたときの手順をまとめておく。 mesaの詳細は以下を参照のこと。 waregawa-log.hatenablog.com 手順 このサイトに書いてある手順に従えばよい。 具体的には conda-forge/staged-reci…

DotMapを使ってdictにドット"."でアクセスする

tomlから設定を読み込むとき、いちいち`dict["key"]`のようにアクセスするのが面倒になってきた。 `dict.key`のようにアクセスしたいなあと思ってググってたら、DotMapという、まさにその機能を実現するパッケージがあったのでメモしておく。

matplotlibによるシミュレーションの可視化

matplotlibでシミュレーションを可視化する手法は複数あるが、ここではそれをまとめ、私家版ベストプラクティスを述べる。 手法1 plt.pause()を使う example 以下では、シミュレーションモデルを表す変数modelは、適切に初期化されていると仮定する。 import…

Python向け可視化ライブラリの調査【2020年1月版】

OpenAI Gymでは以下のような形で可視化できるが、どう実現しているのか気になった。そこで、Gymを含む強化学習ライブラリや、ロボットシミュレータなどが使用している可視化ライブラリを調査し、どの可視化ライブラリを使うべきかをまとめる。

Pythonシミュレーションにおけるlogging活用のススメ

最近、業務でPythonシミュレーションを行っており、Python標準ライブラリのloggingが便利だったのでメモしておく。

シミュレーション用パラメータファイルとしてのtoml形式のススメ

シミュレーションのパラメータファイルを外部化しておくと、メンテ性、再現性などの面でなにかと都合がよい。 設定ファイル用のファイル形式としてはyaml、jsonなど様々なものが存在するが、 ここではシンプルに書ける[toml](https://github.com/toml-lang/t…

【感想&メモ】 Effective Python 2nd Edition

Effective Pythonの第二版(Effective Python: 90 Specific Ways to Write Better Python)を読んだので、簡単な感想とメモを残しておく。

mesaによるマルチエージェントシミュレーション

Pythonで実装された、マルチエージェントシミュレーション用ライブラリの一つが「mesa」である。 普段お世話になっているこのライブラリの布教を目的に、鳥の行動モデルをmatplotlibで可視化した。

差分更新によるmatplotlibのアニメーションの高速化

業務で、シミュレーション結果をmatplotlibによりリアルタイム描画する必要に迫られた。 最初はグラフ全体を毎ステップ再描画していたが、差分更新に変えたら動作がめっちゃ速くなって感動したのでメモ。

conda-forgeからのPythonパッケージインストール

conda-forgeからインストールするとき、`conda install -c conda-forge hogehoge`としたら要らないパッケージまでインストールされそうになったのでメモ。