ブロックを積みながら(60) Node-RED、乱数生成器、randomノード

Joseph Halfmoon

前回は一種のフィルタともいえるsmoothノードでした。つい「調子」にのって別投稿にてsmoothノードのフィルタの特性を伝達関数から考察したりもしてしました。今回は乱数生成、randomノードです。乱数生成は伝達関数以上に奥深くて、そこに命を懸けている人も居るとか居ないとか。知らんけど。ここは深みにハマらぬよう「さらっと」行きたいです。

※「ブロックを積みながら」投稿順 index はこちら

今回のテスト用のNode-Redのフローはちょっと長めです。実は前回のフローのほぼ使い回し(コピペ)です。各ノードの御名前こそ random ノードのテスト用に変更していますが、新たな要素は真ん中に鎮座する random ノードだけなんであります。

左から順番に列挙すれば

    • injectノード、ボタンを押す度に10要素の配列を送出する(前回と同じ)
    • splitノード、配列を1要素毎に分割する(前回と同じ)
    • randomノード、要素が入力すると1個乱数を送出する(新)
    • smoothノード4つ。それぞれ100要素の平均、最大、最小、標準偏差を求める(前回と同じ)
    • debugノード4つ。平均、最大、最小、標準偏差をデバッグウインドウに出力

randomノードは入って来たmsgの内容にかかわらず「サイコロ」を振るみたいなので、injectとsplitは生成する要素の個数を決めているだけです。

フローの外観が以下に。

flow

なお、ちょっと気になる random ノードの乱数生成ですが、Node-Redのソースを覗き見したところ、浮動小数点の場合は、普通にJavaScriptの以下の関数を呼んでいるだけのようです。

Math.random()

上記の関数は JavaScript処理系の実装依存のようなので、Node.jsを調べれば乱数アルゴリズムは分かるのでしょうが、見ていません。まあ、生成された乱数のの偏りなどが気になる用途の人は、きっと自分で乱数生成するであろうと想像します。多分、Math.random()で私は十分であろうと。乱数に命かけてないし。。。

randomノードの設定

今回 randomノードの設定は以下のように実数としました。Helpにも書いてありますが、ここの設定にはちょっとクセがあり、整数型で上限、下限を設定すると上限、下限を含むとなり、実数型だと、下限を含み、上限を含まずとなるようです。

random

結果集計用の smoothノードの設定

前回使ってみた smoothノードで、生成した乱数100個あたりの平均、最大、最小、標準偏差(標本)の集計をやってもらいました。設定はこんな感じ。

smooth

実行結果

Injectノードのボタンを10回押して生成した乱数100個の平均、最大、最小、標準偏差は以下のようでした。

debug

偏りなどの考察に入ると沼にハマりそうなので、今回はここまでといたしとうございまする。

ブロックを積みながら(59) Node-RED、統計?信号処理? smoothノード へ戻る

ブロックを積みながら(61) Node-RED、変化の有無でフィルタするfilterノード へ進む