DX・デジタル

注目記事

thumbnail

第147回「コンピュータの乱数 と 乱数の再現性」

2025.06.01

 わたしの旧twitter(X)にはいろいろな技術情報が流れてきます。気になったものはその情報をたどって詳細を確認するのですが、少し前に「乱数をつくる」手法が流れてきました。メカトロの専門の範囲で、また様々な目的で、乱数を使うため関心対象です。生産設備などを動かすときにランダムさは無縁そうに見えますが、ロボット分野では乱数を使う手法が様々ありますし、我々の日常でも乱数のお世話になっています。 乱数、乱数列は、文字通りランダムな数値です。それまでに出てきた数値列から、次に出る数値は予想できません。乱数を得るという作業(サイコロをふるとか、関数の実行など)のたびになにか数値を得ます。一方、一般的なコンピュータの計算にはランダムな要素がないため、コンピュータのプログラムで作り出した乱数は、乱数っぽく見えても何か規則があって、かつ非常に長い周期の繰り返しがあり、擬似乱数と呼ばれます。 擬似乱数にはいくつもの生成方法が提案され、使われています。それら方法を比較するための主な評価指標は、計算の手間と乱数としての性質の良さです。前者については、たまにしか使わないものであれば負担になりませんが、ランダムな信号の生成では使用回数が多くなりますし、ロボット制御分野にもひたすら乱数を使うような手法があり、その場合は簡単な演算で済むに超したことはありません。後者はどのくらい本来の乱数の性質に近いかという観点で、単純にはその繰り返しの周期の長さ、ある程度の数量の乱数を作った時にその列から次の値を予想し得るかどうかなどがあります。 コンピュータの乱数はちょっとしたゲームを作ろうとしたときなどにも(たとえばじゃんけんでも)必須なので、私はプログラムを作るようになった早い段階から触れていました。プログラミング言語標準の乱数ではしばしば、「0~ある上限」までの整数が一様に出てくるため、たとえば、{1,2,3}から一つ出るものが欲しいという場合は、  (得た乱数÷3の余り)+1のような計算をします。この使い方をしたときにも綺麗な乱数かという観点もあります。 あるとき、画面上で上下左右にランダムに動き回る点をつくろうとしました。4で割った余り(より正確には下位2ビットを使用)の0123で4方向を決めるプログラムを書いて実行したところ、動きません。正確には、上下左右の動きを規則的に繰り返して、小さな往復運動をしていました。当時は乱数とはランダムなもので、このような現象が起き得るという知識はなかったため、移動方向を画面に連続して表示させて現象を特定しても何が悪いのかわかりませんでした。ふと、「5で割って余り0123は移動、4は乱数出し直し」としてみたらランダムっぽく動き回ったので、そのときはそれで良しとしました。擬似乱数の方式によってはこのような問題があることを知ったのは、ずっと後のことでした。 技術全般に「いいところしかない」なら、特許等の制約がないなら、その手法が席巻するはずですが、複数が共存しているのは利点欠点の取捨選択があるためです。冒頭の、流れてきた手法は原理を理解しきれませんでしたが、小型のマイコンで動かすのにも軽そうな方法に見えました。

thumbnail

第145回「正十二面体づくりと工学に生きる心得」

2025.04.01

 正多面体は辺の長さが等しい一種類の正多角形を組み合わせ、かつ各頂点の周りの面の数が等しい多面体です。正三角形による正四・八・二十面体、正方形による正六面体(立方体)、正五角形による正十二面体の五種類があります。その形や展開図はあちこちで紹介されるため、ご存じの方も多いとは思います。正多角形でできるものには他に、サッカーボール型といわれる切頂二十面体(正五角形×12、正六角形×20)などもあります。

thumbnail

サステナブルなモノづくりのために No.97

2025.04.01

 デンソーがロボットを使って廃車を自動精緻解体するプロジェクトBlueRebirthを環境省の支援を得て進めていて、これが面白い。

thumbnail

第146回「シャッフルされた学生番号とハッシュ」

2025.05.01

 大学では学生さんたちの情報管理に学生番号(または学籍番号など)という数値をつかいます。会社も社員の番号があるでしょうし、日本全体ではマイナンバーがあります。これらの番号は、何らかのルールに従って重複無く割り振られた番号です。氏名で区別しようとすると、どの漢字か(とくに同じ名字でも文字が多数ある場合など)などで照合の煩雑さがあるほか、漢字まで一致した同姓同名が区別できなくなります(実際に大学のクラスであったときには番号でしか区別できなかった)。また、数値には大小があるため、コンピュータ内での比較や参照などがしやすく、非常に便利です。 日常的に書類に「氏名」と「番号」を併記で書くことを求められますが、おそらく「番号」のほうが主で、処理をするときに番号をまず入力して、番号から検索された氏名と、記載の氏名が一致するかチェックします。氏名を書くのは番号を書き間違ったときの対策として、場合によっては本人が書いたことの筆跡の検証をするためです。重要度の高いものでは、本来必要な数値の他にもう一桁、何らかの計算で決まるようなチェック用の桁を用意して、ひとつの書き間違い、読み間違いくらいは検出できるようにします。 さて、学校における番号の設定には、しばしば五十音順が用いられます。私は小学校のときには誕生日順だったので常に最後だったのですが、付番根拠によってはそのような非公開属性が見えることがあります。本学も五十音順だったのですが、2年前からシャッフルされて、氏名と番号が一見するとランダムになりました。そのときは驚き抵抗を感じましたが、考えてみれば私は出席や提出物、成績の管理は番号で行い、氏名は上記の通りチェック用ですので、五十音順の必要はありませんでした。シャッフルすることにした理由はいくつか考えられるのですが、ひとつ便利なことに「佐藤班」の問題が消えました。 実験実習をする際に学科を数人単位の班に分けることがあります。われわれの作業効率を考えて、番号順に人数ずつ区切って行きますが、総勢100人もいると佐藤さんが数人いて、場合によってはほとんど佐藤さんという班ができます。下の名前で呼ぶか、「○○番の佐藤さん」と言わなければなりません。シャッフルされると、この問題はほぼ回避され、同じ名字の人が同じ班にいることは偶然になります。 似たような考え方は物品管理にも使われると聞きます。代表的な事例はピッキング作業をする場での並び順です。たとえば、ネジなどの部品を引出しにしまうときに、直感的には同じ規格で長さ順で並べたくなります。その場合、隣接する区画に見た目の似たものが並ぶことになり、取り出すときに良く見る必要があります。一方で、M3x10ネジとM6x20ボルトとM2ナットとM5ワッシャという組合わせであれば、仕切り無くまとめて入れられていたとしても、見ても手触りでも区別がつきます。もちろん、欲しいネジがその引出し、ということを特定できる何か手段が別に必要ですし、「近い何かを探したい」ときには逆にやりにくくなりますが、あえてバラバラにするとピッキングミスは減らせます。