2020年3月4日水曜日

ロト6は攻略できるか(その3)

 前回はロト6の当選数字のパターンを色々調べて出現傾向を調べてみた。実は昨年8月、数年ぶりに何となく買ったロト6が4等に当たり(それから助平根性が出て)その4等を原資として時々買い、その後暫くはあまり原資を減らすことなく買い続けることが出来たが10月頃に数字の出方が変わったようで全く当たらなくなり、11月に原資が底を突いた。
 そこで前からやりたかったAIによる予測に挑戦してみる事とした。いわゆる Deep Learning である。数年前に興味があって買った Deep Learning の本(Pythonで記述)が積読になっていたので、改めてこれを読んでロト6の Deep Learning に挑んた。残念ながら私はPythonは不慣れだしバグ大好きの弱い型付けの言語は嫌いなので同じような流れをFortranで書いてみた。
 Deep Learning の処理は Y=f(W*X+B) という基本演算で構成される。Xが入力でありYが出力 、Wが重み、Bがバイアスで、Wが2次元配列、Y,X,Bは1次元配列、fが非線形の出力関数である。WとBが任意パラメータで、これらの値が学習内容に相当する。この基本演算を複数層直列に積み上げることでAIを構成する(Wikipediaによると4層以上ないと Deep Learning とは言わないらしいが、以下は爺の手習いということで勘弁してもらいたい)。
 第1層の入力X1がAIの入力であり最終層の出力YnがAIの出力である。ロト6の場合X1は学習や予測に使う過去の抽選結果であり、その大きさは学習に使うデータ数(=抽選回数)×43、Ynは各数字の出現確率を表す43個の数値とした。1層のみのDeepLearning は単なるx元1次連立方程式の最適パラメータ決定になる。基本演算を2段以上積み重ねると層間に外部には出ない接続 Ym⇒Xm+1(隠れ層)が出来る。
 学習を行うためには最終的な演算結果(output)と真値(truth)の差(誤差、loss)をフィードバックしWとBの値を修正するカラクリが必要であり、誤差を 微分(dX/dY)的な係数を掛けながら処理とは逆方向に伝搬させ、係数(学習率?)を掛けてWやBを修正する。WやBの初期値には乱数を入れている。

 幸いな事にPythonで配列を計算するライブラリー(NumPy)がFortranの配列演算と相性が良いので助かった。出来上がったプログラムは全部で800行程度であるが、Deep Learning の処理自体は100行程度だろう。層数や隠れ層の幅、学習率は任意パラメータとしている。

 実際に2層の Deep Learning、隠れ層を100にしてロト6の過去データ(ボーナス数字を含む7つの数字)を読み込ませると、あっという間に過去データを学習し100%正解できるようになった。じっさい高々1500回にもならない過去データではAIと言うほどの性能も必要無いようだ。しかし過去データの最後の部分を隠して予想させてみるとこれが全く当たらない。次図は第1459回までのデータを使ったとある結果である(**が当たった数字)。

  ここで過去データを Deep Learning のやり方に従って学習データと評価データに分け、 学習データで学習させた後で評価データを評価してみた。そうすると繰り返し回数を多くして学習を進めるほど評価は悪化する。いわゆる過学習の状態なのだろう。ロト6は原理的にランダムな現象なので当然と言えば当然である。
 何回も試しているうちに、乱数による初期設定を変更しても隠れ層の幅を変更しても結果の傾向はあまり変わらない事に気づいた。簡単な Deep Learning でも過去のデータは十分学習できて方向性を持った予想を出せるようである(ただし予想結果は現実とは合っていないが)。次表は第1459回までのデータを使って色々パラメータを変えながら第1460回を予想した結果である(黄色マーカが本数字、緑はボーナス数字)。値は確率(%)を表す(水平方向の合計値はボーナス数字を含んでいて約700%になる。##は100%を超えた値)。

 3層の Deep Learning は学習に時間がかかる。2層だと50回も繰り返せば概ね安定するが3層だと収束するまで1桁上の学習が必要のようである。直近の予想確率例と抽選結果は次のようなもので当たるも八卦当たらぬも八卦といった所である。
(3層100回学習の結果)

 4層の(本来の)Deep Learning も試してみた。ある回の当選番号とその直前50回分との関係を全てのデータで500回ほど学習させ次回を予想する、これを初期値を変えて10回行い結果を平均してみたが、これには私のCore i5-9600K(3.7GHz)で80分ほどかかり、以下の表を作成するだけで計17時間以上かかった。この表では平均値(16.3)より大きい数字は赤色で表示している。理想的には100%の数字が7つあり他が0%なら完璧に予想出来ている訳であるが、結果を見ると予想出来ているとは言い難い。実際の抽選では必ずしも予想確率の高い赤い数字が選択されておらず、回によって確率が平均より大きいか小さいかに偏った数字が選択されている場合が多いように見受けられる。
(4層500回学習の結果)


 そこで最近13回のAI予想確率と実際に当たった数字の関係を調べた。
 43個の数字各々の予想確率で平均値(16.3)より大きいものと小さい物の数をカウントした(優勢の物に色を付けている)。また実際に選ばれた数字が予想確率分布の上下どちらに属するか当選数字分布を調べた。
 本来AI予想が当たっている場合、当選数字は全て予想確率の高いものの中から選ばれ、当選数字分布は(0,7)となる筈である。しかしこの表ではそうなっておらず、逆に予想確率の低い番号だけで構成されている場合もある事を示している。情報理論によると良く当たる天気予報と同様によく外す天気予報も同じくらい情報を持っている。当たらない事が分かっていればいわゆる逆張りをすればよい。
 そこで再度この表を見ると、当選数字は予想確率分布の数の多い方に偏っている場合が多いことに気づく(そうでない場合を灰色にした)。表で示した13回のうち9回がこれに当たる。 そういう意味ではこのAI予想はある程度の情報を与えていることになる。要するに予想確率分布の数の多い方に限定して張れば良い。そうすると選ぶべき数字が43の1/2~2/3程度に限定され当選確率が上がる事になる。
 
 この数をもっと限定できる適切な Deep Learning のパラメータがあるのかどうか、あれこれ探ってみたいが時間がかかりすぎるのが欠点。

・・・つづく・・・

2019年12月8日日曜日

九州の石橋をたずねて


 うろ覚えであるが、その番組は「石の譜」みたいなタイトルであったかと思う。昭和50年(1975年)頃、上京して大学に通っていた時の話である。九州に多い石橋と肥後の種山石工を特集したNHKの番組であった。
 昭和52年7月に地方出版物を扱う八重洲ブックセンターが東京駅八重洲口近くに開店し、興味本位で見に行ったところ「九州の石橋をたずねて(前編・中編・後編) - 山口佑造著」という本に出合い、何故か気になって購入し今に至る。当時老後の楽しみに、と考えたかは定かでないがその後の何度かの引っ越しでも手放さずに持って回った。

   

 著者の山口佑造氏は昭和35年当時諫早市役所の職員で水害で損傷した諫早眼鏡橋移築の監督責任者だった人である。その後氏は石橋に興味を持ち九州をはじめ日本中の石橋を調べて回られているようで、次の分布図のとおり熊本、大分、鹿児島、長崎県に多いようだ。

 これまで私が積極的に見に行った石橋は通潤橋だけである。そのほか秋月眼鏡橋や洗玉橋などは偶然通りかかった訳であるが老後となった今、楽しみの1つとして挑戦するのも悪くないと思っている。ただし出版後半世紀近く経過しており、本で述べられた橋がどれくらい残っているのか分からない。
 とりあえず附表の石橋のリスト407件をExcelに入力したところである。


〔その後〕
 山口佑造氏は「日本の石橋を守る会」の初代事務局長を務められ、2002年に亡くなられているが「日本の石橋を守る会」の活動は継続しており年2回の会報を発行しているようだ。日本の石橋を守る会のWEBで全国に(レンガ作りを含め)数多くの石橋がある事、及びそのリストが掲示されている事がわかった。

2019年11月24日日曜日

NanoVNAが来た

 以前からVNA(Vector Network Analyzer)が喉から手が出るほど欲しかったが本物はやたら重くて高価、マンション暮らしでは置く場所も無いためオークションでも手を出さなかった。一方有志にて近年の技術で集積した幾つかの小型VNAが発表されていたが、すでに頒布が終わっていたり、測定周波数の上限が私の希望する3GHzまで計れないため対価的に釣り合わず二の足を踏んだままだった。
  そんな中、偶然YouTUBEでNanoVNAの存在を見つけた。調べてみたらその道ではすでにかなり有名になっているようである。しかも価格も超手頃(\6K~)、Amazonでも取り扱っているため上限周波数(900MHz)には目をつぶり早速購入した。

 届いたVNAは中華物でクレジットカード大(厚さ15mm程度)の本体とUSBケーブル、SMA-M SMA-Mケーブル(33.5cm)×2、較正用負荷(解放、短絡、50Ω)、SMA-F SMA-F中間コネクタ、そして収納ケースだけで説明書が無い!!! メーカー名も装置の型番も無い。
本体は基板3枚で構成されており、表と裏の基板には部品は搭載されておらずシールドの役目を果たしているようだ。真ん中の基板は3層のようで真ん中にシールドの役目のGNDを挟んでいると思われる。横にはSMA-Fコネクタが2つありそれぞれCH0とCH1と記されている。そのほかUSB-Cコネクタと電源スイッチ、レバースイッチがある。

 ネットで検索するとNanoVNAに関する雑多な情報が出てくるがどれが本家か分からない。Amazonで色々売ってるが型番が無いので私が入手した物とハード的に同じなのかも分からない。
 そんな中で簡単な説明書(User Guide日本語訳)を見付けた。その最初に「edy555さんの資料に基づき(hugen79版の)NanoVNAをデザインした」と書いてある。それでedy555さんを調べると、私が以前キットを購入した事のあるTT@北海道さんではないか。要するにTT@北海道さんが設計・製作したVNAキットが元になってるようだ。そしてhugen79さんが回路に手を加えバッテリー管理を追加しPCBボードを再設計したらしい。図面やソフトが公開されているから中華物のクローン(コピー商品)が出回ってるのだろう。調べると高周波部のシールドの有無やバッテリーの有無等のバリエーションがあるらしく、私が入手したものは両方とも「有り」だった。そうは言っても基本的な回路は同じでファームウェアは共通に使えると考えたい(ただしNanoVNA-Fは別物らしい。少なくともMPUが違う)。

  とりあえず説明に従ってキャリブレーションを行ったが、今後色々試してみたい。とくにスミスチャートが見えるのは素晴らしい。表示色は黄色がS11の振幅、緑がスミスチャート、青がS21の振幅、紫がS21の位相のようだ。振幅は対数スケールである。なおS11やS21の詳細についてはネットで「Sパラメータ」を検索されたい。蛇足だがS11はCH0から出力された信号が反射されてCH0に戻ってくる割合、S21はCH0から出力された信号がCH1へ届く割合で何れも複素数(振幅比と位相差を表す)である。

 VNAは必ず測定に使うケーブルを接続した状態で較正する必要がある。900MHzだと20cm延長しただけでスミスチャートを1周するくらい変化するし、長さ2cm程度のSMA中継コネクタを追加しただけで結果が異なる。較正後に短絡したコネクタを接続すると Γ=0 となり、50Ωのコネクタを接続すると Γ=1、解放したコネクタを接続すると Γ=∞ となって機能は正常のようだ(ちなみに Γ はガンマと呼ぶ正規化インピーダンスの事で通常50Ωを基準とした値(複素数)である)。この写真は最初に較正したあと付属のケーブルの先端をオープンにした状態で撮ったもので、本来は Γ=∞ となるはずだが Γ=2 あたりに集中している。これは較正の前にパラメータをリセットしなかったため誤って較正された時のものだ。
 〔参考〕スミスチャートは周波数によって変化する Γ を特殊な座標系の複素平面上にプロットしたものだ。この Γ を使うと(複素)反射係数 r は r =(Γ-1)/(Γ+1)で表され、r の大きさは円の中心(r=0)から外周(|r|=1)まで同心円状に広がる。そして定在波比は SWR=(1+|r|)/(1-|r|) で求まる。つまり円の中心にあれば整合( SWR=1)、 外周上にあれば全反射( SWR=∞) となる。

 較正がうまく行ったので次はファームウエアのアップデートに挑戦した。最初に搭載されていたファームウエアはバージョン0.1より前のものでファームウエアを書き換えるDFU(Device Firmware Update)モードの設定がメニューから出来ない。DFUモードにするためにはP1ジャンパーをショートした状態で起動する必要がある。そこでDFUモード設定用ジャンパコネクタとバッテリー電圧取り込み用ダイオード(D2)をNanoVNAの基板に半田付けした。

P1は高さ6mm程で上の基板にぶつかるため5mmほどにカットした。それでもジャンパは挿せないが必要な場合は外からワニ口クリップでショートさせる。D2はMPU(STM32)のVBAT端子にバックアップ電源を供給するのに使い、100mV供給すれば画面で電池マークを表示するらしい。一方バッテリー電圧低下は別途電源ランプのフリッカーで知らせるようになっているのでこのダイオードの種別にあまり神経質にならなくても良いようだ(最新のファームウェアでは画面にバッテリー電圧を表示でき、さらにD2の電圧降下分を補正できるものもある)。
 次にPCにDfuSeDemoをインストールしてNanoVNAのファームを出たばかりのバージョン0.5.2にアップした。しかし何度較正してもグラフがメチャクチャで話にならない。
 
  バージョン0.4.0に落としても同様であった。
 結局バージョン0.3.1まで落としたら一旦はまともに動くようになったが色々他のバージョンを試しているうちに再びダメになった(下図)。
これは一見まともそうだがスミスチャートが中心に縮まって全く広がらない(S11が低い)。コピー商品には性能を満たさないものも含まれているらしいので最初は本家とはハードウェアが違うのかもしれないと考えたが、過去にうまく行ったこともあったからソフト、特にコンフィギュレーション情報の問題だろう。

 ここに同様の事例が報告されており、作者(edy555)から「try command 「clearconfig 1234」after flashing」とのコメントが掲載されている(後で分かった事だがここで言うflashingとは(洗浄する事ではなく)ファームウェアを書き込む事らしい)。ネットで検索するとUSB接続でコンソールコマンドが使えるようだ。私の場合NanoVNAはCOM5に接続された。
TerraTermでCOM5に接続してみると、  などと多くのコマンドが使えるようだ。
 そこで 「clearconfig 1234」を入れながら何度かファームをアップしてみたがダメだった。やはりクローンのハードに欠陥があるのか、或いはclear出来ないコンフィギュ情報があるのか(初期のバージョンでは clearconfig の代わりに DMR-CLEAR_MEMORY_DFU.dfu というファームを書き込むことでコンフィギュレーションを初期化したみたい)。
  さらに検索すると他にも事例が報告されており、色々試した結果、最後にQRP73氏が公開している「NanoVNA-Q-0.4.1-5bc0bde」というファームを見付けた。氏曰く「It has extended hardware check and if there is some problem with your hardware you will see it on display」という事でハード(si5351というPLL)のチェックを入れたファームみたいだ。安物のsi5351では300MHzまで発振できないらしい(si5351のカタログ上の上限は200MHz)。とりあえずこのファームを入れることでバージョンを 0.4.1 に上げることができた。
 その後 NanoVNA-Qは0.4.2、0.4.3、0.4.4とバージョンアップされたが何れも駄目で結局0.4.1に戻して使っている。折角なら最新バージョンを動かしたいので、いずれソースコードを見ることになるのかなぁ。或いはチェックで撥ねられた不良MPUを使っているのか。

 NanoVNAの測定上限は900MHz迄という仕様だが、バージョン0.1以降のファームを入れると上限周波数は1500MHzまで設定できる。しかしキャリブレーションしても1200MHz程度迄しか安定して計れないようだ。

 手持ちのエアバンド用受信フィルタ(AORのABF128-SMA)を測定してみた。中心周波数は116MHz付近にあり、その辺で整合しているようだ。
 
 ところで以前AMAZONで購入した中華物の黒色の高周波ケーブルはSMA付きの単なるシールド線だった経緯があるので今回添付されている名無しのケーブルが気になった。試しにGigaSt-v5で手持ちのHPのケーブルと比べてみると2GHz以下では1dBも差が無かったので良しとしよう。しかしそのうちテフロンケーブルに変えるつもりである。
良いおもちゃが手に入った。



2019年10月24日木曜日

ロト6は攻略できるか(その2)

 前回は統計的に当選数字の組み合わせを探ってみたが、結果は大数の法則に従って平均値に集束するのみである。一方世の中には色々な攻略法なるものが提示されている。
 YouTubeで見た主な攻略法は過去数回の当選数字をもとに次回を推定するというもので直近に出た数字、或いはその近傍、或いは最近出現しなかった数字等を使うものである(ここでは引き寄せとか前兆とかのオカルト的な話はしない)。
 局所的な偏りが分かれば当然当選確率は上がる。しかし真の偏りは未知なので適当に推定するしかない。当たるも八卦当たらぬも八卦、それが攻略法なのだろう。
 ロト6を買うにはクイックピックといって「お任せ」で選んでもらう方法もあるが 以前試したところ大数の法則通りほとんど当たる事は無かった。やはり自分の意志で1から43の中から6個の数字を選ぶ必要がある。実際にロト6の申し込みカードを前にしてどの数字に千円を賭けるべきか、どの数字にマークを付けるべきかは無心では出てこず、(外れた場合の言い訳にもなってくれる)何らかの拠り所が必要である。

 各数字の出現頻度(確率)の変動を見てみた。第1回から50回ごと及び全区間の各数字の出現確率を色分けしてみた(赤が高く青が低い)。なお、ボーナス数字を含むので平均値は約16%(≒7/43*100)である。全区間で見るとほぼこの数字に落ち着いている。
一方この表から局所的には特定の数字がバースト的に出現している場所や殆ど出現しない場所があるように見える。これらをうまく推定できれば当たる確率は上がる。一方最近43の出現確率が高かったが、今後も続くようには思えない。もし狙うなら5など過去2回で確率が上昇している数字を選ぶのかな。

 試しに最近出た数字をExcel表にして見てみた(黄色が本数字、緑がボーナス数字)。この表を個人的にMAPと呼ぶ。
  MAPを見ると升目が縦に繋がったり斜めに繋がったりしていて、過去の数字と何か関連しているように見えなくもない。1415回から1419回にかけての1~5の連続は偶然とは思えないほど見事である。またこの表で4回も出現している数字(2,21,25)や一回も出現していない数字(6,18,29,30,38)もある。結果を見れば偏りはある。

 ある回に出現した本数字(ボーナス数字は含まない)が前回とどれほど関連しているのか調べた。本数字の近傍(±1の範囲)、一つ小さい(-1)、同じ(=)、1つ大きい(+1)場所に前回の本数字がある場合の数を数えてみた。これを近傍表と呼ぶ。
近傍表を見ると、当たった数の近傍を選ぶと次回に上手く当たる事もあるがそうでもない事も多い。この表には無いが全当選数字を調べたところ第148回、247回、514回、1376回は=の欄が4であり、前回と同じ本数字を選択しても4等に当たっている。しかしこれは350回に1回程度の確率だ。=が3のケースは24回あるので60回に1回程度の確率で5等に当たっている。一方、近傍の数が小さい(特に2以下の)場合は直前の数字を使った攻略法は当たらない事になる(近傍の平均値は2.2程度である)。
 試しに前5回分の当選数字をそのままマークしたらどうなるのか調べると、これまでに5等が165回、4等が11回出たことになった。ちなみに過去の何れかの本数字を使って当選できたケースは3等が35件、2等が1件あったがこれは確率が低く攻略法には使えそうもない。

 MAP上で互いに隣接した複数の升目(横軸:抽選数字、縦軸:回別)から構成される過去のパターンを抽出し、類似のパターンが出現しそうになった場合に次回に出そうな数字の出現確率を算出するプログラムを作った。以下はWrap Mode(MAPを筒状に曲げて数字が環になっていて43の右が1に戻る)で処理した結果である。 1420回までのデータ(ボーナス数字を除く)を使った処理結果は次のようになった。
抽出されたパターンは全部で1852個あり最大で18個の升目で構成されている。パターンは386個に分類され、未解決の(1421回目に続く可能性のある)パターンが2個ある。
 1個目は(1418,21)(1419,21)(1420,22)と繋がるもので、過去に12個の類似パターンがあり次回1421回目は21か22(特に22)が出る可能性が高い。⇒結果は×、確率の低い23が出た。
 2個目は(1420,1)(1420,2)というパターンで90個の類似パターンがあり次には43又は1~3が出る可能性が高い。⇒結果は〇、最も確率の高い2が出た。
 この方法は、2個以上連続したパターンを抽出するものなので孤立して出現するようなパターンになっていない数字は選べない。また遷移表の数字が低い回別ではパターンがあまり繋がらないので使えない。従ってこの方法は出現確率など他の方法と併せて補助的に使うことになろう。

 ここで、各本数字の出現の間隔が全体でどうなっているのか調べてみた。次の表の横軸が本数字、縦軸が空白の長さ(連続して選ばれなかった回数)で空白が0とは連続して選ばれたことを意味している。 表自体は各本数字でその空白が出現した割合を表している。
 この表はあくまで結果論であるがこの表を見ると空白は4連続くらい迄が多いが20以上ある場合も結構ある。数字2は連続するか3回目に出現したことが多く、数字7や11は5回目に出現する事は少なかった事がわかる。選択の参考になれば幸いである。

 〔おまけ〕LOTO の当選の場合数はネットに幾つか書いてあるがその算出方法が良く分からないので算出式を推察してみた。
 なおmCnはm個の中からn個を取り出す場合の数で教科書的にはmCn=m!/(m-n)!/n!と計算するが階乗!の計算はオーバーフローを起こしやすいので注意が必要である。Excelを使うと関数 COMBIN(m,n) で求まる。

つづく

2019年9月1日日曜日

今年もハムフェア 2019

毎年恒例のハムフェアへ行ってきました。

 例年のビッグサイト西ホールへ行ったら会場は閉まっており、今年は動く歩道を3つほど乗り継いだ先の南ホールで開催されていました。今回の会場はブースの前の混雑がひどく、少し手狭に感じました。

近年、9R-59やTX-88A、FD-AM3,TR-1000など半世紀くらい前、私が高校生の頃にあこがれだったの無線機の中古が多く出回ってますね。コリンズなんかも安価に並んでます。

そして今年の戦利品はこれ。
以前入手したHP-5334Bを安定して3GHzまで計測できるようにしたくて、適当なMMCを探しているところです。

毎度のことですが、よく歩きました。
 
この実績の半分はハムフェアですね。

来年はオリンピックの影響で開催中止かと思ったら、必ずしもそうでもないような話も聞くことが出来ました。


ジャック・オー・ランタン

カミさんが入手したジャック・オー・ランタン(高さは75cmくらいあります)に赤色LEDを仕掛けてみました。
スマホで撮影するとピンクがかって見えますが、実際はもっと赤いです。
とりあえず廊下の隅に置いてますが、なかなかCOOLですね。

玄関に置いたらこんな感じ。



2019年7月12日金曜日

LT-R6のOpenJDK対応(Windows10+OpenJDKでのjSSCのクラッシュ対応)

LT-R6をJAVAライセンスに問題の生じないOpenJDK12でコンパイル・実行してみた。
(やり方は別途報告する)

編集機能は問題なく動いたがCOMポート選択などCI-V通信(すなわちjSSC)に関わる機能を使おうとすると必ずJVM(JAVA仮想マシン)がクラッシュする。
ネット検索してみるとOpenJDK11以後Windows10上のjSSC 2.8.0は権限違反(access violation)でクラッシュするとレポートされている。
Win10ではjSSCに必要なDLLが無いとの他のレポートもあるが定かでない。

本当の原因は別として何らかの対応は必要である。
通信ライブラリーは、過去にバグのあるRXTXライブラリーからjSSCライブラリーに乗り換えたがjSSCも2014年のjSSC 2.8.0を最後にアップデートされていない。

ネットで色々調べると有志が新しいバージョン(jSSC 2.9.1、2019年5月30日付け!!)をGitHubで提供しているようだ。

 これをダウンロードしてみると従来の2.8.0のファイルサイズが150KBであるのに対し2.9.1は411KBとかなり大きくなっている。何が違うのだろう?
そこでダメ元でこれを使ってみると、CI-Vは正常に機能するようになった。「LT-R6について」の表示(一部)は次のようになった。

ネットで調べるとこのほかにも幾つかのフリー通信モジュールが提供されているようなので、リスク管理の意味からも今後試してみたいものである。