囲碁 – 定石:単独の三々入り

閉じ込め

基本形

単独で三々に入った場合、布石によって厚みが期待できるなら押さえる方向を選択。外勢を張るが後手になる。

  • 三々に入って生きた方が先手
  • 押さえて外勢を張った方が後手

入った方が生きてから先手で他へ回る。

 

 

定石はずれはこちら

三々入り後の死活はこちら

デギリ対策

デギリは無理。「グルグルマワシ」が痛快。

 

 

二段バネ

基本形

黒が伸びずに二段にハネる定石で、外勢を張りながら先手を取る方法と、後手になるが外勢と実利をある程度とる方法がある。

 

 

先手で外勢を張る場合

先手で外勢を張りたいときの打ち方。

 

 

後手で外勢と実利を取る場合

外勢と実利の両方を取りたい場合。後手になる。

 

 

 変化~分かれ

二段バネに対して反対側をハネて、守らずに切ってくるケース。

 

 

 

WordPress – functions.phpの場所

functions.phpは各テーマのディレクトリ下に存在する。

functions.phpは各テーマごとに生成されるため、意図をもってその内容を変更した後にテーマをアップデートすると、変更内容が失われる。

テーマをアップデートしても変更内容が失われないようにするには、元のテーマに対する「子テーマ」を作り、そのfunctions.phpに付加する内容を書くとよい。

 

Python3 – property – getter/setter

一般的な書き方

クラス定義でgetter/setterなどのアクセサを一般的に書くと次のようになる。

Pythonでは、メンバ変数(インスタンス変数)はパブリックアクセスが可能だが、メンバ変数への代入や参照を行った際に、裏でセッターやゲッターを呼び出すようにすることができる。また同じ手順で、インスタンスのdelete時の処理もプロパティとして登録できる。

このように見かけ上の参照・代入・削除処理から各アクセサを呼び出すために、Pythonでは組み込み関数のproperty()を使う方法と、@マークに続けたデコレータを使う方法がある。

property()関数

property関数を使うことで、getterなどをプロパティとして登録できる。次の例では、インスタンス変数_xに関するgetter、setter、deleterをxという名前のプロパティとして登録している。

property()関数の引数は以下の通り。

property(fget=None, fset=None, fdel=None, doc=None)

  • fget getterのメソッド名
  • fset setterのメソッド名
  • fdel deleterのメソッド名
  • doc プロパティの説明文(ドキュメント文字列)

propertyデコレータ

使い方

以下のように@マークに続けて書くデコレータでアクセサを定義できる。ただし以下の点に注意。

  • デコレータの最初は、@property
  • @propertyで定義できるのはgetterのみ

つまり、必ず最初に@propertyで、かつgetterを定義しなければならない。

@propertyは最初でなければならない

たとえば次のように@propertyがsetterよりも後にあると、”setterでxが定義されていませんよ”と怒られる。

@propertyはgetterしか定義できない

また@propertyでsetterを定義し、@*.getterでgetterを定義しようとすると、getterは実行されてsetterの方で”引数をセットできない”とエラーになる。

@propertyでダミーのアクセサを定義する方法

@propertyでダミーのアクセサを定義して、その後にgetterのデコレータで定義をするのは通る。

property()でドキュメント文字列だけを定義する方法

また、property()関数でメンバ変数のドキュメント文字列だけを定義したのちに、getter/setter/deleterのデコレータでそれぞれのメソッドを定義する方法もあるらしい。

 

 

 

Python3 – オブジェクトの文字列表現

__str__/__repr__

__str__メソッドはprint文やformat文の引数にオブジェクトが指定された場合に呼び出され、オブジェクトの”非公式の”文字列表現を返す。

__repr__メソッドはより正式なオブジェクトの内容を文字列で返し、2つのオブジェクトの同値性をインタープリタがチェックするときに使われる。

print文やformat文での__str____repr__の使われ方は次の通り。

  • __str__のみが定義されていれば__str__が使われる
  • __repr__のみが定義されていれば__repr__が使われる
  • __str____repr__の両方が定義されていれば__str__が使われる

エラー~str()関数による明示的な変換

ただし、以下のように文字列として直接操作しようとするとエラーになる。

これはprint文で扱われるかどうか以前の問題で、文字列にオブジェクトを結合しようとしたときに起こる。先行のオペランドが文字列で、その次に結合演算子が出てきたのでオブジェクトを文字列に変換しようとして、”オブジェクトを暗黙で文字列に変換できませんよ”とエラーになる。

また演算の順序を入れ替えると、次のようなエラーになる。

今度はオブジェクトが先行しているので、これに対して+演算子を読んだ瞬間に、インタプリタは”このオブジェクトと文字列の演算子として+はサポートされていない”と言ってくる。

これを解決するには、str()関数でオブジェクトを明示的に文字列に変換してやればよい。

 

R – 繰り返し処理

for

構文は

最も基本的な例は連番のリストによる回数指定。

繰り返し内容が複数にわたる場合は{}で囲む。

break文で最も内側のループから抜ける。

next文はループ内の残りの部分を実行せず次のループへ。

ループ範囲に変数を使った場合、その変数は中で参照・変更可能だが、ループ回数そのものは変更されない。

以下の例では、xで指定された1:5はforループ開始時点でディープコピーされ、ループの中でxが変更されても、繰り返し回数は変化していない。

while

他の言語と同じ。

break文やnext文も使える。

repeat

repeatで無限ループを実行。

 

 

 

時刻制御によるポアソン過程のシミュレーション

時刻制御による分析

時刻制御(time driven)の考え方では、時刻を変化させながら、その都度到着イベントが発生するかどうかを確率的に計算し、到着パターンのデータを生成していく。計算にはR言語を使う。

時刻制御の考え方の概要やその他の考え方についてはRによるポアソン過程のシミュレーションを参照。

到着イベントの時系列

上のRのコードでは、到着率λに短い時間間隔dtを掛けた確率でその時間間隔t ~ t + dtの間に到着イベントを発生させている。

以下に観測時間が5000秒のときの、階級幅が100秒、500秒に対する到着数の時系列分布をヒストグラムを示す。階級当たりのデータ数が多いほど平滑化される傾向は、一様分布によって到着イベントを発生させたときと同じ。

poisson-process-time-driven-arrival100

poisson-process-time-driven-arrival500

到着時間間隔の分布

一様乱数のときと同じく、到着時間間隔の分布をチェックする。期待した通り、指数分布の確率密度関数とよく合っている。

poisson-process-time-driven-interval

到着数の分布

到着数の分布についても、一様分布のときと同じように調べると、Poisson分布の形状とよく合っている。

なおtime drivenの場合は、細かい時間間隔について到着判定をしているのでループ回数が多くなり、計算時間が少しかかる。

poisson-process-time-driven-poisson

関連リンク