EUREKA --ILPFの定理--

ブログ主のILPF(イルフ)と申します.本ブログでは数学やプログラミング等の知識の備忘録,ハンドメイド作品「マクロコントローラ」の制作進捗報告を目的に開設しました.

【5/26現在】レイドバトル自動周回プログラムにバグ発生中

現在販売中のマクロコントローラにて, 「レイドバトル自動周回」プログラムに以下のバグを発見いたしました.

【症状】 ・ボール無しの状態でプログラムを実行すると, 10回程度周回した後に戦闘開始画面で 巣穴調べる⇒「みんなで挑戦!」を選択⇒挑戦をやめる⇒フィールド画面に戻る の無限ループに陥る

現在,デバッグ対応をしておりますが,解消時期は未定です. 完了次第,GitHubにて修正プログラムを配布しますのでご理解の程よろしくお願いします.

既にご購入いただいた方,これから購入を検討している方には, ご不便をお掛けしてしまい,誠に申し訳ございません.


5/27 8:00追記

現時点にて,問題となるプログラム上のループ箇所を特定し, デバッグを行いました.

現在,実機検証を行っており,今のところ問題は発生していないので, このまま問題がないことを確認しましたら,早くても本日の夜には 修正プログラムの公開を行いたいと思います.

また,昨日までに注文いただき,発送待ちとなっている方々につきましても, 本体に修正プログラムを実装した後に発送とします. 発送日時が遅れてしまい誠に申し訳ありませんでした.

【祝】売上10台突破&新規開発品の進捗報告

BOOTHに個人通販SHOPを開設してはや1か月. ご購入いただいた皆様のおかげで売上10台を突破いたしました!!

パチパチパチ~^∀^

まさか1か月で10台売れるとは思っておりませんでした. こんなに早く記念祝いをさせていただくことができたのも ご購入いただいた皆様のおかげです. ありがとうございました!

さて,現在販売しているマクロコントローラですが, 現在庫分+現在制作分を以て一旦販売終了とさせていただきます.

えええ!!さっき10台突破記念したのに,制作やめちゃうの!?

・・・と言ったあなた!!心配しないで下さい!!

なんと,マクロコントローラが進化して還ってきます!! Coming Soon・・・

とまあ,よくある宣伝広告みたいな告知をしてみました.

どう新しくなるかというと, シリアル通信専用USBポートが追加となります.

・・・え?USBポートが増えただけ?それだけで何が変わるの?

と思った方もいらっしゃるかと思いますが, なんとシリアル通信専用ポートとPCをUSB接続することで, ドライバ機能として,PCからNintendo Switchを操作することが可能となるのです!!

とりあえず今,試作品として作っているのがこんな感じです.

f:id:ILPF:20200524214527j:plain
試作品

PC画面のアプリケーションは C#言語アマチュアの私が試行錯誤で作っているもので, 画面内のボタンを押したり,キーボードを操作したりすれば, PCをコントローラとしてNintendo Switchを操作できるといったものです.

もちろん,C#でプログラムを組めば, 今までマクロコントローラ内に組み込んでいた自動化プログラムも, より視覚的になり,複雑な処理も実行できたりするのではないでしょうか.

この機能を使って個人的にやってみたいこととしては,

今,どうぶつの森やっているので, 好きな画像をドット処理してマイデザインに自動的にアウトプットするアプリケーションとか,

もう一つは夢物語になりますが,

ポケモンバトルを人工知能に学習してもらい, このマクロコントローラを介してAIがコマンド選択してもらう,

・・・みたいなことができたらいいなと思う今日この頃でございます. (一からAIの勉強をしなくてはいけませんがね・・・)

妄想が過ぎてしまいましたが, とりあえずハード自体はしばらくしたら制作開始,BOOTHにて販売スタートとしたいと思います.

(今までと同じく,ポケモン剣盾自動化プログラムはマクロコントローラ内に実装させるつもりなので, 旧型のような使い方もできるようになっています.)

6月中旬~7月ぐらいになったら販売できる体制になると思うので,しばしお待ち頂きたくよろしくお願いします.

アプリケーションの方は完成次第,GitHubの方にぼちぼちとアップデートしていこうと思います.

ポケモン剣盾 マクロコントローラ BOOTH販売開始

しばらくブログを離れてかれこれ3年. 私の本業も日々忙しさを増していく中で,ポケモン剣盾が発売されたりと 私の私生活でも大きなニュースがありました.

ポケモンといえばやっぱりオンライン環境での通信バトル!!

そのためにはポケモン厳選やアイテム回収は避けて通れない壁. ですが,多忙な日々を過ごす私にとってはそんな時間などあるはずがない・・・

そんな絶望感を感じた2020年1月のある日,ネットサーフィンをしていると,Arduinoを使ってワット稼ぎや孵化作業を自動化できるツールを作ったというツワモノを発見しました. 工学部大学を卒業した私にとって,実に興味深く,非常にワクワクさせられるニュースでした!!

そこでArduinoを使って自動化させる方法について情報集めを実施し, はじめはもともと持っていた遊び用のArduinoを使ってトライ&エラーでプログラム作成し,いざ実行・・・

めちゃくちゃ楽しい&めっちゃ便利やんけ!!

そこからあんな機能付けたいなあ,基板設計もしたいなあ,3Dプリンタ買ってケースも作ってみたいなあとあれこれ考えて3か月・・・

こんなんできました.

f:id:ILPF:20200413002333j:plain
マクロコントローラ・黒

そして,こんなに家族が増えました.

f:id:ILPF:20200413002603j:plain
マクロコントローラ

とまあ,気が付けばこんなにたくさんのラインナップができたし, せっかく作って誰も使ってくれないのは寂しいし・・・

とのことで,PIXIVのオンライン通販・BOOTHで通信販売を始めました. 一個4000円,12色のカラーラインナップでそろえています.

現在,BOOTH倉庫への入庫手続きの為,しばらくの間入庫待ちの状態となりますが, しばらくしたら販売開始とさせていただきますので,興味ある方はご購入検討下さい.

また,取扱説明書や,プログラムソースコードの公開もしているので 気になる方は自由に閲覧&DL下さい.

以下,リンクです.

マクロコントローラ 通販サイト: ilpf.booth.pm プログラムソースコード 公開サイト: github.com

ガウス・ジョルダン法

今回は「ガウスジョルダン法」についてのお話.

皆さんは「ガウスジョルダン法」って知っていますか?

理系大学生であれば一度は耳にしたことがあるかもしれませんが,数学を専門としていない人にはあまり馴染みがないかもしれませんね^^;

でも,言葉は知らなくても,実は中学を卒業している人なら誰もが一度は触れたことがある方法なんですよ!!


皆さんは中学の時の数学で連立方程式を学んだことを覚えているでしょうか?

おそらく,連立方程式の解き方には「代入法」と「加減法」の2通りがあるって先生から教わっていると思います.
実は,「加減法」こそが「ガウスジョルダン法」の正体なのです!!

もし中学生の読者がいたら,是非ともクラスの友人にこの話題を話してみましょう!!
きっと「xxさんって物知りなんだね!!」って注目を浴びることが出来るかもしれませんよ(確証はないけどww)

中学校で学んだ「加減法」並びに「ガウスジョルダン法」はそのシンプルさが故に,あまり記憶に残っていない人も多いかもしれません.
ですが,この方法は線形代数学的にも非常に理にかなっており,今日の連立方程式を解くプログラムの基礎となる,非常に重要なアルゴリズムなんです!!


ガウスジョルダン法は次の基本ルールから成り立っているといえます.

  1. ある方程式の両辺に定数を掛ける
  2. ある方程式の両辺に定数を掛け,別の方程式に加える

言葉だけだと伝わり辛いと思うので,次の三元連立方程式を例に
挙げて説明します(中学校は二元連立方程式が主流ですが,方程式の数が増えてもやり方は変わらないので,こっちで説明させていただきます).

f:id:ILPF:20170503153323j:plain

それでは,1,2のルールを用いて,変数をどんどん消していきます.

{\displaystyle(4)=(2)-(1),(5)=(3)-2\times(1)}

f:id:ILPF:20170503153436j:plain

{\displaystyle(6)=(1)+\frac{1}{2}\times(4),(7)=-\frac{1}{2}\times(4),(8)=(5)+(4)}

f:id:ILPF:20170503153615j:plain

{\displaystyle(9)=(6)-2\times(8),(10)=(7)+(8),(11)=-(8)}

f:id:ILPF:20170503153746j:plain

これで連立方程式を解くことができました.

特別なことをしていないので,中学生の読者でも解くことができたのではないでしょうか?
この単純な解法のことこそ「ガウスジョルダン法」なんです.

ここから線形代数の知識を織り交ぜて「ガウスジョルダン法」を見ていくことにします.

先程の連立方程式は,行列の形で表すと次のように表すことができます.

f:id:ILPF:20170503153907j:plain

ここで,係数をまとめた行列{\displaystyle\boldsymbol{A}}のことを「係数行列」,変数をまとめた行列
(ベクトル){\displaystyle\boldsymbol{x}}を「変数ベクトル」,定数項をまとめたベクトル{\displaystyle\boldsymbol{b}}
「定数ベクトル」と呼びます.まんまですね.

線形代数学的にいえば,この連立方程式を解くということは即ち,

f:id:ILPF:20170503154043j:plain

となるような{\displaystyle\boldsymbol{A}}逆行列{\displaystyle\boldsymbol{A}^{-1}}を求め,

f:id:ILPF:20170503154216j:plain

を計算することに相当します.ここで{\displaystyle\boldsymbol{E}}単位行列といい,いわゆる数字の{\displaystyle1}に相当する行列です.

{\displaystyle\boldsymbol{A}^{-1}}を求める」のは,{\displaystyle3\times3}の行列までならサラスの公式を使って手計算で行えますが,それ以上の大きさになるとより複雑になってしまいます.

そこで,より簡潔に連立方程式を解く方法の一つが「ガウスジョルダン法」です.そしてこの方法が線形代数学的に見て理にかなっていることをこれから実証しようと思います.

先程の例で,{\displaystyle(1)(4)(5)}の形に変形したのを行列で表してみると,

f:id:ILPF:20170503154420j:plain

となります.行列の計算を嗜んでいる読者の方は実際に計算してみて確認してみてくださいね.
ここで,{\displaystyle\boldsymbol{P}_1}のことを変換行列って呼んだりします.変換行列の見方についてはいつかの機会で話すことにして,注目してほしいのは両辺左側から{\displaystyle\boldsymbol{P}_1}を掛けていることです.当たり前のことですが,変換後の式全体は変換前の関係をちゃんと維持していることが分かります.

同様にその後の式変形についても見ていきましょう.

{\displaystyle(6)(7)(8)}

f:id:ILPF:20170503154824j:plain

{\displaystyle(9)(10)(11)}

f:id:ILPF:20170503155012j:plain

以上から,ガウスジョルダン法の変換のすべては変換行列で表すことができ,新たに変換が行われたら,両辺左側から新しい変換行列が掛け合わされることが分かります.

そして,この変形を何回か繰り返していくと,左辺は最終的に

f:id:ILPF:20170503155143j:plain

となり,右辺は

f:id:ILPF:20170503155243j:plain

となります.

気が付いた方もいるかもしれませんが,変換行列をすべて掛け合わせたものは逆行列になる,すなわち,

f:id:ILPF:20170503155519j:plain

となることが分かります.

長々と計算ばかりしてきましたが,つまり結論をいうと,ガウスジョルダン法を行えば自ずと逆行列を求めることができ,さらには方程式の解まで分かっちゃうんです!!
ちょっと面白さを感じますよね~(私だけかな^^;)

今回はガウスジョルダン法についてお話をしてきました.まとめると以下のようになります.

次回はガウスジョルダン法によるプログラミングと,計算量についてお話できたらと思います.