サブロウ丸

主にプログラミングと数学

master mind by c++; part15 MPIによるプロセス並列

今回やること MPI install 超簡単なサンプル実装 データ集約(MPI_Gather)の例 逐次的なデータ送信の例 MPIの組み込み CMake Dockerfile run.cpp Github-action (CMake) 実験 machine A まとめ コード 参考 他の記事 今回やること MPIのサンプルコードの紹介,…

master mind by c++; part14 openMP

今回やること openMP 並列化 CMake find_package target_compile_options target_compile_definitions 実験 mac book machine A まとめ コード 参考 他の記事 今回やること openMPを用いた並列化 openMP 言わずと知れた, スレッド並列ツール. FortranとC/C++…

master mind by c++; part13 minmax, exp_minmax, entropy policy

今回やること 推論コードの決定 ランダムサンプリング minmax exp_minmax entropy 実装 推論手数の実験 colors 4 pins 4 colors 5 pins 4 colors 6 pins 4 colors 4 pins 5 colors 5 pins 5 まとめ コード 参考 他の記事 今回やること 新しい推論コード取得…

master mind by c++; part12 coverage test

今回やること カバレッジテスト カバレッジ(coverage)テストとは コンパイルオプション add_custom_target 実行 まとめ コード 参考 他の記事 今回やること カバレッジテスト カバレッジテスト カバレッジ(coverage)テストとは テスト関数が全ての関数,if分…

master mind by c++; part11 namespace

今回やること 背景 実験 まとめ コード 他の記事 今回やること namespaceの導入 背景 $ valgrind --tool=callgrind --callgrind-out-file=./callgrind.out ./bin/mastermind 4 4 --test $ gprof2dot -f callgrind ./callgrind.out | dot -Tpdf -o report.pdf…

master mind by c++; part10 smart pointer

今回やること コードのポインタ管理 smart pointerの導入 実験 まとめ コード 参考 他の記事 今回やること コードをポインタで管理 smart_pointerの導入 コードのポインタ管理 現状のプログラムではコード(Code)オブジェクトの生成と解放を実行中に多数行っ…

master mind by c++; part9 temaplate

今回やること template 実験 まとめ コード 他の記事 今回やること templateの導入, 及び color, hit-blow のデータ型の変更 template 関数の引数や返り値、またクラス属性の型を宣言時に可変にできる機能です. ピンの色とhit-blowのデータ型を今まではどち…

master mind by c++; part8 measure( valgrind, gdb )

今回やること 実行速度計測について 計測コード 高速化オプションの追加 プロファイル Valgrind gprof Cmake, Debug, Release まとめ コード 参考 他の記事 今回やること プログラムの実行速度計測の追加 プログラムのプロファイリング( valgrind & gdb ) 実…

master mind by c++; part7 code generator

今日やること コード集合の列挙 例 実装 テストの作成 まとめ コード 参考 他の記事 今日やること ピンの色数, ピンの数, ピンの色の重複ありなしが与えられた時に 考えられるコード(ピンの配列)を全列挙する関数を作成する. これがあれば, どのようなピンの…

master mind by c++; part6 argument parser

今回やること argparse install プログラムへの反映 まとめ コード 参考 他の記事 今回やること コマンドライン引数を受け取る部分(argument parser)の実装. argparse google検索で一番上に出てきたので, 使ってみる. install git clone でコードをダウンロ…

master mind by c++; part5 Docker

今回やること Dockerとは Dockerの導入 Docker install Dockerfileの作成 Dockerイメージの作成と起動 root以外のuserで環境を構築したい場合 Github action - docker 対処したエラーたち apt install -y cmake pthread_getspecific まとめ コード 参考 他の…

master mind by c++; part 4 googletest

今回やること googletestとは googletestの導入 現状のディレクトリ構成 googletestのインストール テストプログラム ビルド googletestをインストールしている場合 googletestをインストールしていない場合 実行 ctest GitHub action の修正 まとめ コード …

master mind by c++; part 3 CMake

今回やること Cmakeとは CMake フォルダ構成 CMakeLists.txtの作成 ビルド バイナリ生成場所の指定 GitHub action - CMake テスト まとめ コード 参考 他の記事 今回やること CMakeの導入 github actionでのcmakeテストの追加 Cmakeとは Makeファイルなどの…

master mind by c++; part2 auto & decltype

今回やること auto 関数の返り値 コンテナの部分for文 関数の返り値の型 decltype まとめ コード 参考 他の記事 今回やること 型推論autoの導入 decltypeの導入 auto autoはc++11から導入された型推論機能で, c++14, c++17ではその適用範囲が増えました. c++…

master mind by c++; part 1 基盤プログラム

これから c++ プロジェクト実装の勉強がてら, master mind というゲームを解くプログラムを作成する様子を数回に分けてまとめたいと思います. 目標はなるべく標準で, かつモダンな実装です. これからの全体的な流れ master mind ( マスターマインド ) とは …

vim 複数ファイル操作

Vim

vim で複数ファイルを操作する方法のまとめ 1. 複数ファイルを開く vim -O abc.txt xyz.txt # 横向きに表示 vim -o abc.txt xyz.txt # 縦向きに表示 2. 条件指定で複数ファイルを開く 例えば, .h 拡張子のファイルを全てvimで開きたいとき vim -O $(ls *.h) …

shell の trace

小ネタです. シェルスクリプトを実行する際に -x オプションを使用すると, トレースがオンになり, 今実行されている行 が表示されます. 例えば中身が下記の tmp.sh を実行すると for i in 0 1 2 do echo $i done $ sh -x tmp.sh + for i in 0 1 2 + echo 0 0…

Python Colorlog サンプルコード

colorlog ( https://github.com/borntyping/python-colorlog ) を用いれば ロギング(logging) を色付きで簡単に表示できます. 若干使い方が難しいと思いますので, サンプルコードを作成しました. 下記を _logginig.pyの名前で保存して, 同ディレクトリ内で以…

【python】 multiprocessing.Queue を用いた並列化 (サンプルコードあり)

multiprocessing.Poolの功罪 multiprocessing.Pool + multiprocessing.Queue による解決策 簡単な実験 サンプルコード multiprocessing.Poolの功罪 multiprocessing.Poolはpythonにてプロセス並列処理を簡潔に書けるので便利です. しかし, 以下のようなシチ…

Python モデラーとソルバーまとめ (解ける問題の比較)

Solver (May 22, 2020) [S] Solver (問題を解くアルゴリズムを内包し, それを実行して解を探索するアプリケーション) [M] Modeler (解く問題をプログラムで作成するためのアプリケーション) Nonlinear or Linear Programming NLP (Nonlinear Programming) MI…

Raspberry Pi4 ModelB 4GB を買いました

Raspberry Pi4 本体 (ModelB4GB) ¥ 6,875 www.amazon.co.jp microSDカード (32GB) ¥680 www.amazon.co.jp カードリーダー microSDカードにOSを書き込む用 ¥ 1,780 www.amazon.co.jp micro HDMI → HDMI 変換コネクタ ¥ 999 Amazon | Cable Matters Micro HDM…

pulp.GUROBI_CMD での 時間 スレッド数 制約

バージョン pulp: 2.2 python: 3.8.4 サンプルコード スレッド数 = 5, 時間制約 30s にする場合 problem = ... solver = pulp.GUROBI_CMD( options=[ ('Threads', 5), ('TimeLimit', 30) ] ) problem.solve(solver=solver) 他に入れられるオプション www.gur…

GitHub運用

Git, GitHubについての資料, ブランチ運用について, パラパラ説明をしています.

[ Python ] LP modeler と Solver 一覧

Pythonで使線形計画問題(LP)を扱える最適化アプリケーションをいくつか使用することができます. アプリケーションは大きく2種類に分類されます. Solver (ソルバー); 問題を解くアルゴリズムを内包したアプリケーション Modeler (モデラー); 最適化問題をプロ…

flopt 統合型最適化モデラーとソルバーの開発 その1

統合型最適化Pythonフレームワーク flopt をオープンソースで開発中です. floptは 最適化問題のモデリングツールであり, ソルバーであり 他ソルバーのOverwraperであり, 手法比較ベンチマーク を目標に作成しています. Github PyPI Read and Docs PuLP Pytho…

[ python ] 自作クラスをnumpy ndarrayに使用する

Subclassing ndarray — NumPy v1.18 Manual (公式)を参考にすれば良いでしょう. 以下, 簡単な実装例. class Element: def __init__(self, r, c): self.r = r self.c = c def __repr__(self): return f'Element({self.r},{self.c})' 上の自作クラスを, 2次元n…

[ Eigen ] long double 型 のMatrix, Vectorの宣言

Eigen とは C++ の行列演算ライブラリ[1] です. 暗黒通信団による Eigen メモ [2]. これさえ読めば基本機能は大体使えます. MatrixXdや, MatrixXi, VectorXd を使えば, 要素がdoubleやint型の行列やベクトルが扱えます ([2] を参照してください)が, Eigenは…

【python】 matplotlib: color をRGB, RGBAで指定した際のwarning

matplotlibのplotやscatterでcolorを (0.0, 0.0, 0.803921568627451, 1.0) のようなRGBや, RGBAで指定した場合 plt.plot(..., c=(0.0, 0.0, 0.803921568627451, 1.0)) 'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoi…

Master Mind探索プログラム

MasterMind というボードゲームの 最善手探索用プログラムを公開しました. github.com policyやcode_iterに関数を追加して, master_mind.pyの上部をいじれば改良できますので, アイデアがある方はよろしくお願いします. サンプル 3色 2ピンの場合 python mas…

【Python】pulp, CPLEXで並列数指定

pulpでsolverとしてCPLEXを指定する場合, 並列数はDefault設定では使用可能なthread数を全て使用する設定になっています. 並列数を自分で指定したい場合は, 以下のようにすれば良いです. import pulp class MyCPLEX(pulp.CPLEX): def __init__(self, mpi=Tru…