odenのメモ帳

いっつも解決したことを書き留めなくて,後々後悔するので,それを防ごうプロジェクト

Visual Studio 2017でC++のHello Worldがなぜかできない

docs.microsoft.com
最初に公式に従ってやろうとするも,

C1083 include ファイルを開けません。'iostream.h':No such file or directory

と言われる.このHDDは累計10年近く使ってるので,過去の俺がインクルードディレクトリやらライブラリディレクトリを弄っておかしくしたんだと思う.

いろいろ調べて プロパティ > VC++ディレクトリ > インクルード ディレクトリ

C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\ucrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\um
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\shared
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\winrt

プロパティ > VC++ディレクトリ > ライブラリ ディレクトリ

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\lib\x64
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\atlmfc\lib\x64

を追加したら成功した.おそらく無駄なものが混ざってる気もするので,荒治療ですが.

VirtualBoxで仮想ディスクのサイズを変えたのに容量が大きくならない!!

現実でも新しくHDD導入したらパーティションの操作やりますもんね…そりゃそうだ

まとめると

  1. VBoxManageにより仮想ディスクのサイズを変更
  2. GPartedによりパーティション操作,未割当領域を設定

これだけのことだった

参考にしたURLは
仮想ディスク(VDI)のサイズ変更 | VirtualBoxの使い方
VirtualBox環境でのUbuntuのHDD容量変更方法 - Qiita

リンク切れが怖いので,手順だけ書いておく

VBoxManageにより仮想ディスクのサイズを変更

/path/to/VBoxManage.exe modifyhd [対象とするvdi] --resize [変更したいサイズ(MB)]

GPartedによりパーティション操作,未割当領域を設定

GPartedのインストール
sudo apt-get update
sudo apt-get install gparted
sudo gparted
未割り当ての設定
  1. /dev/sda5を右クリック,スワップ解除,削除
  2. /dev/sda2 を同じ容量にして一番後ろへ移動させる
  3. /dev/sda2 直下の未割当領域に新しい領域を作成.その際,フォーマットはlinux-swapにする
  4. 広げたい領域を広げる
  5. 緑のチェックマークをクリック

pandasで何かするときメモ

pandasのdataframe操作を毎回忘れるので随時適当にメモしていく.
自分のためだけなので記事ですら無い.

フィルタリング
df[df['col'] > val]
左結合
import pandas as pd
m_df = pd.merge(df1, df2, how='left')
既存列から新たな列追加
df['new_col'] = df['col1'] + df['col2']

これでnew_col列がdfに追加されている

四分位取得
q1 = df['col'].describe()['25%']
q3 = df['col'].describe()['75%']
散布図行列
from pandas.tools.plotting import scatter_matrix
scatter_matrix(df)

OpenAI Gymで一定間隔のエピソードごとに動画を保存する方法

gym環境で動画を保存する際には以下のようにすれば,一応指定したフォルダに動画を保存することができる.
参考:
discuss.openai.com

import gym
from gym import wrappers
env = gym.make(‘CartPole-v0’)
env = wrappers.Monitor(env, ‘/path/to/movie_folder’)

このようにすれば,メソッドを呼ばなくても勝手にある間隔で動画が保存される.
f:id:oden-dengaku:20180204003922p:plain

しかし,エピソード数が0,1,8,27,64,125,216,343…となぜかn^3ごとに保存されている.

なぜn^3?

よく分からずGitHubのコードを眺めていると原因が判明した.
github.com

デフォルトで指定されているvideo_callableはcapped_cubic_video_scheduleという内部で用意されている関数が指定されている.これが上述のエピソードごとに動画を保存するよう決定していた.

そこで,引数でvideo_callableを自分が確認したいエピソードごとに指定するようにしてやればいい.
以下は100エピソードごと動画を保存するにしたパターン.

import gym
from gym import wrappers
env = gym.make(‘CartPole-v0’)
env = wrappers.Monitor(env, ‘/path/to/movie_folder’, video_callable=(lambda ep: ep % 100 == 0))

これにより保存間隔を変更することができた.

シストレ構築で役立つ(かもしれない)様々な"レシオ" & 同人誌電子版販売のお知らせ

シストレで戦略を評価する際,様々な指標がある.日本ではプロフィットファクター(PF)が検索するとよく引っかかるが,他にはどのようなのがあるのだろうと調べてたら色々あったのでまとめた.
適当に読んで適当に解釈しているのであまりあてにしないで.

主に英語版Wikipedia(https://en.wikipedia.org/wiki/Category:Financial_ratios)から抜粋.
それにしても,日本語版はせいぜいシャープレシオだけですが,色々あるんですねえ...

Calmar ratio

Sterling ratioを修正したもので,平均リターンを山から谷までの最大ドローダウンで割った値.直近36ヶ月で計算し,月次ベースにしたもの.

Omega ratio

次式で定義される.閾値のリターンを越える割合的な考えか.r閾値となるリターン,F(x)はリターンの累積分布関数.
{
\Omega = \frac{\int_{r}^{\infty}(1 - F(x)) dx}{\int_{-\infty}^{r}  F(x) dx}
}

\Omega = 1ならば,平均リターンがrとなることを意味する.

具体的な計算はこちらがわかりやすい
investexcel.net

Upside potential ratio

次式で定義される.
{
U = \frac{\sum_{r}^{\infty} (R_r - R_{min})P_r}{ \sqrt{\sum_{-\infty}^{r} (R_r - R_{min})^2 P_r}}
}

なんかよく分からないんですけど,具体的な計算方法はこちら?
investexcel.net


シャープレシオでは,すべての変動がリスクとして判断されてしまうが,上ブレの変動はむしろ好ましくリスクとして判断すべきではない.そこで,このシャープレシオの欠点を修復するためにUpside potential ratioやSortino ratioはリターンがマイナスな場合のみの変動を計算している.

同人誌電子版販売のお知らせ

進化計算と機械学習の本1を書きました.自分は,進化計算の1つである遺伝的プログラミングでFXに挑戦するという章を担当しています.お求めはこちらから.
rosenblock.booth.pm

bibtex導入 ハマったこと

卒論で参考文献をまとめる際にbibtexを導入するもちょっとハマったのでメモ.環境はUbuntu14.04

.bibファイルを用意する

論文のサイトなどにExportなんたらという所にだいたいbibTexが表示/ダウンロードできるところがあるのでそこから取得して.bibファイルに書き込む.(画像はACM Digital Library)
f:id:oden-dengaku:20170118223220p:plain
.bibファイルに複数の文献を書き込める.

コンパイルを行う

jbibtexをplatexで挟んでplatexを複数やる必要がある.自分は面倒なので.shにしている.過去記事で作ったシェルを拡張した.
oden-dengaku.hatenablog.jp

#!/bin/sh

ret=${1%.*}
if test $ret != "";then
	platex ${ret}
	jbibtex ${ret}
	platex ${ret}
	platex ${ret}
	dvipdfmx $ret
	evince ${ret}.pdf
else
		echo "ファイルを入力してください"
fi
これでOKと思ったら…?

何故か表示されない.どうやらbibファイルを置く場所を教えてあげないといけないらしい..bashrcに以下を追加.

export BSTINPUTS=$BSTINPUTS:/your/bib/folder//

最後に//とやると全ファイルを探索してくれるらしい?

OpenAI Gymをubuntuにインストールした時発生したエラーの対処法メモ

OpenAI Gymをここに従ってインストールしている際,

pip install -e .

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe2 in position 72: ordinal not in range(128)

のエラーが発生.調べると以下のサイトがヒット
www.elecafe.info
stackoverflow.com

$ sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose

を実行したら正常にインストールされるようになった.
.bashrc への追加をすると文字コードがめちゃくちゃになるので取り外した.