【競馬AI】AI_Gaspard v2.00公開。初のメジャーアップデートです。

twitterにて告知しました通り、明日よりAI_Gaspardはv2.00の運用を開始いたします

何が違うの?

圧倒的に特徴量を増やしました。特徴量を分かりやすく言うと予想の材料のことです。具体的な数をお伝えすることは出来ませんが、v1.40の3倍ほどになりました

そもそもどんなAIなの?

知らない方のためにざっくりと。毎週末に開催される中央競馬の各レースごとに3着に入る確率を算出します。

「1着になる確率じゃないの?」という突っ込みが入るかもしれませんが、過去のシミュレーション結果で1着予測モデルでも3着以内予測モデルでも大差のない結果になっています。

モデルを2つ運用するとその分負荷がかかって公開までに時間を要してしまいます。そうなると皆さんが冷静に考える時間を奪ってしまいますよね。その点を考慮しまして、3着以内モデルのみ運用する形としています。

的中率/回収率は?

例として2020年の年間シミュレーション結果は以下の通りとなりました。
※学習データとしてはそれ以前の20年分(1999-2019)を使用しています

まずは単勝。横軸が『買い指数』/縦軸が『回収率』になります。

もっと詳しい数値はこんな感じ。購入数を極端に絞っているわけでもなく、かなり安定していると言っていいでしょう。

買い指数回収率的中数購入数
0.500.9869892509.012589.0
0.530.9788572468.012269.0
0.560.9842962441.011965.0
0.590.9843682410.011675.0
0.620.9873412389.011407.0
0.650.9903292359.011126.0
0.680.9899472328.010853.0
0.710.9817852291.010579.0
0.740.9862992261.010313.0
0.770.9895202231.010048.0
0.800.9882242204.09808.0
0.830.9902032177.09554.0
0.860.9946132151.09337.0
0.890.9927632117.09092.0
0.920.9833602081.08852.0
0.950.9856132056.08612.0
0.980.9826382020.08392.0
1.010.9846011991.08176.0
1.040.9855111952.07951.0
1.070.9844131919.07750.0
1.100.9900521897.07559.0
1.130.9970871873.07346.0
1.160.9883261831.07127.0
1.191.0000721811.06935.0
1.220.9920761779.06777.0
1.250.9850271735.06552.0
1.280.9807351699.06364.0
1.310.9841891671.06173.0
1.340.9925271636.05955.0
1.371.0006591608.05770.0
1.400.9986381573.05579.0
1.431.0006291538.05404.0
1.460.9792151496.05225.0
1.490.9781831461.05051.0
1.520.9854181429.04876.0
1.550.9901761397.04703.0
1.580.9837531359.04524.0
1.610.9886551321.04328.0
1.640.9878541285.04166.0
1.670.9939081254.04005.0
1.701.0110881231.03851.0
1.731.0255831198.03690.0
1.761.0240121162.03544.0
1.791.0193031120.03388.0
1.821.0081281075.03248.0
1.851.0113591041.03099.0
1.881.0113481004.02961.0
1.911.018134973.02840.0
1.940.996263926.02703.0
1.971.011652899.02566.0
2.001.022638864.02434.0
2.031.025716824.02306.0
2.061.040384796.02189.0
2.091.050411767.02067.0
2.121.051802729.01942.0
2.151.049973689.01829.0
2.181.065709651.01706.0
2.211.053420620.01608.0
2.241.060574581.01499.0
2.271.056000544.01400.0
2.301.076085519.01313.0
2.331.078135497.01244.0
2.361.077089470.01161.0
2.391.048944439.01089.0
2.421.047865406.01007.0
2.451.068103381.0928.0
2.481.029384351.0844.0
2.511.050000329.0772.0
2.541.074650311.0714.0
2.571.068684292.0661.0
2.601.085260268.0597.0
2.631.065867243.0542.0
2.661.103960235.0505.0
2.691.109354214.0449.0
2.721.106683193.0404.0
2.751.110773173.0362.0
2.781.137003161.0327.0
2.811.163729147.0295.0
2.841.204215136.0261.0
2.871.233784120.0222.0
2.901.301554111.0193.0
2.931.38757897.0161.0
2.961.46223889.0143.0
2.991.44750075.0120.0
3.021.45961566.0104.0
3.051.50470657.085.0
3.081.46103951.077.0
3.111.52096842.062.0
3.141.70600036.050.0
3.171.66744232.043.0
3.201.69117626.034.0
3.231.65806524.031.0
3.261.65454518.022.0
3.291.61875013.016.0
3.321.6888898.09.0
3.351.6888898.09.0
3.381.4625007.08.0
3.411.3142866.07.0
3.441.3400004.05.0
3.471.3250003.04.0

複勝はこんな感じ。

評価の高い馬にはしっかりと配当が付いてくる結果となりました。以下、単勝と同じく詳細を。

買い指数回収率的中数購入数
0.500.9017403296.012589.0
0.530.8969763281.012269.0
0.560.8999163272.011965.0
0.590.9025103260.011675.0
0.620.9035153245.011407.0
0.650.9028043228.011126.0
0.680.9049113212.010853.0
0.710.9054643190.010579.0
0.740.9008443174.010313.0
0.770.9022893157.010048.0
0.800.9049353147.09808.0
0.830.9072123127.09554.0
0.860.9085893112.09337.0
0.890.9074023089.09092.0
0.920.9070383067.08852.0
0.950.9077103044.08612.0
0.980.9090803028.08392.0
1.010.9149343013.08176.0
1.040.9141622979.07951.0
1.070.9139102958.07750.0
1.100.9120122929.07559.0
1.130.9146612907.07346.0
1.160.9146492881.07127.0
1.190.9196542859.06935.0
1.220.9182382825.06777.0
1.250.9173842788.06552.0
1.280.9158862759.06364.0
1.310.9145152727.06173.0
1.340.9150632683.05955.0
1.370.9167422649.05770.0
1.400.9164722606.05579.0
1.430.9158032560.05404.0
1.460.9136272516.05225.0
1.490.9142552466.05051.0
1.520.9154222413.04876.0
1.550.9173722372.04703.0
1.580.9129092309.04524.0
1.610.9144872246.04328.0
1.640.9146662196.04166.0
1.670.9150312145.04005.0
1.700.9159442094.03851.0
1.730.9205422047.03690.0
1.760.9220091991.03544.0
1.790.9190381931.03388.0
1.820.9154251875.03248.0
1.850.9200061812.03099.0
1.880.9236411749.02961.0
1.910.9243311689.02840.0
1.940.9228261624.02703.0
1.970.9310211567.02566.0
2.000.9396471510.02434.0
2.030.9414141448.02306.0
2.060.9293281385.02189.0
2.090.9259801316.02067.0
2.120.9263651248.01942.0
2.150.9230731175.01829.0
2.180.9245021108.01706.0
2.210.9231971053.01608.0
2.240.924149988.01499.0
2.270.919429926.01400.0
2.300.925514876.01313.0
2.330.923955831.01244.0
2.360.922394779.01161.0
2.390.910744729.01089.0
2.420.905660675.01007.0
2.450.908944625.0928.0
2.480.911493577.0844.0
2.510.921503537.0772.0
2.540.927311500.0714.0
2.570.920424462.0661.0
2.600.916583417.0597.0
2.630.906458377.0542.0
2.660.920198357.0505.0
2.690.938976325.0449.0
2.720.927475290.0404.0
2.750.935359261.0362.0
2.780.947095239.0327.0
2.810.937627213.0295.0
2.840.976628197.0261.0
2.870.975225168.0222.0
2.900.979793148.0193.0
2.931.015528127.0161.0
2.961.046853115.0143.0
2.991.06250098.0120.0
3.021.08653887.0104.0
3.051.07176571.085.0
3.081.03766263.077.0
3.111.05322651.062.0
3.141.12600043.050.0
3.171.11860537.043.0
3.201.09705928.034.0
3.231.07096825.031.0
3.261.15000019.022.0
3.291.19375014.016.0
3.321.3666679.09.0
3.351.3666679.09.0
3.381.3125008.08.0
3.411.3000007.07.0
3.441.3800005.05.0
3.471.4500004.04.0

おおよそ90%前後を推移しています。控除率が20%であることを考慮すれば勝ちと見なすことも出来ますが、それでも元本割れしてしまっては本末転倒です。

この結果から、さすがに複勝ベタ買いで勝ち続けるのは難しいということですね。しかし的中率としては非常に安定しており想定以上の結果でした。3連系の紐としては優秀過ぎると言っていいでしょう。

注意点

上記のシミュレーション結果は『評価1位を買えば勝てる』というものではありません。『年間を通して一定以上の指数の馬をベタ買いすればプラスに収束する結果になった』というシミュレーション結果になります。つまり、一発大きい馬券を当てたのではなく堅実に増やしていった、そして2強と判断された場合は両方買った、といった感じですね。

ここで勘のよろしい方は気付いたと思います。例えば購入対象となる指数が出ている馬が3頭いたとしましょう。そして、それらの馬のオッズ平均が3倍を切っていた場合、最初から損する勝負になってしまうのです。シミュレーション結果としてはプラスに収束することになっていますが、負けが続くと冷静さを失ってしまうでしょう。私のように自動購入プログラムに任せている身ならまだしも、手動で購入される方にとっては確実に痛手となるでしょう。

そこで合わせて公開していくのが『期待値(EV)』です。あくまで目安ではありますが、期待値が低い馬を買い続けた場合はマイナスに収束する確率が高くなっていきます。思い切って切り捨てる際の参考としてご活用いただければと思います。

おすすめの活用法

以前からお伝えしている通り、競馬は予想することも楽しみの1つと考えておりますので、皆様の予想の足しとして使っていただくことを想定して作成しています。具体的には想定より高く評価された伏兵を紐として加えて頂く形をオススメしています。

さいごに

以前のアップデートから3ヶ月少々空いてしまいましたが無事精度を高めることが出来て一安心しています。

とはいえシミュレーションだけでなく実戦で成果を出していかなければ何も意味がありませんので、今後ともアップデートを重ねていく所存です。

今後共々、皆様の馬券購入の検討材料になりましたら幸いです。ただしくれぐれも馬券の購入は自己責任で、無理のないようにお願いしますね。

https://engineer-lime.com/ai_gaspard/index.html

【競馬AI】今後のアップデートロードマップ。【AI:Gaspard】

開発を始めてから早9ヶ月。
当ブログでの公開から早5ヶ月。
そして、専用Webページでの公開から早1ヶ月。

おかげさまで多くの方にご覧いただき、ブログの訪問者数の約5倍くらいにまで達しています。この場をお借りしまして、改めてお礼申し上げます。

https://engineer-lime.com/ai_gaspard/index.html

肝心の予測精度ですが、時には大穴を引き当てたり、時には本命馬を思いっきり飛ばしたりといったところ。完璧には程遠く、まだまだ精度向上の余地があると思っています。

より精度の高いAIを作るべく、今後も日々アップデートを重ねていく所存です。当記事では今後予定しているアップデート内容についてご紹介していきます。

1. 最終目標。

これはとてもシンプル。高的中率/高回収率、それだけです。

「言うは易く行うは難し」という言葉がある通り、それはそれはとても難しい問題。1日や2日で行ったアップデートではとても叶えることの出来ない目標。少しずつ、少しずつ積み重ねて目指すゴールです。

2. 目標達成に向けたロードマップ。

1. 特徴量を増やす。

競馬AIで大事なもの。それは『特徴量』です。

「なんだそれ?」という方に向けて簡単に説明しますと、みなさんが予想されている際に考慮されている要素のことと思っていただければ大体合っています。

例えばダートの短距離が得意な馬がいたとします。
人間が予想を組み立てるとしたら、『テンの速さ』や『ゲートの上手さ』、それから『コーナリングの上手さ』、はたまた『馬の体調』等が挙げられるでしょうか。

競馬AIでは「この馬、テンが速いよ」とそのまま投げるのではなく『テンが速いと言える根拠』、人間が「何をもってそう判断したのか」を教えてあげる必要があります。その判断基準となるデータを『特徴量』と呼びます。

『特徴量』は1つや2つだけではなく、多ければ数百、数千にまで達するケースもあります。これをいかに増やすかどうかが第一関門です。

これまでは過去成績を中心とした特徴量のみを取り扱ってきましたが、次回のアップデートではそれ以外の領域、例えば馬体に関する特徴量なども大量投入いたします。

ただしAIは何でもかんでもデータを突っ込めばいいというものではありません。効果のあるデータのみを突っ込むことで真価を発揮します。頭が痛くなるような細かい調整の積み重ねになりますので、このアップデートには早くとも1ヶ月以上は掛かるかもしれません。

2. コンテンツの拡充。

現在は各レースごとに各馬の分析結果(想定勝率/想定3着内率)を公開しています。

追加を検討しているコンテンツについては以下記事で語っています。

過去記事でもご案内している通り、競馬は予想することも楽しみの一つと考えています。ですのであくまで「この馬って信頼できる馬なのかな?」と最終判断を下したい時に数値を参考にしていただくような運用を推奨しています。その判断基準となるようなデータをどんどん追加していこうと考えています。

3. 収益化。

最もモチベーションを向上させる要素って何だと思いますか?

私は何だかんだで『お金』に勝るものはないと思っています。ですので収益化は誰しもが考える最終目標地点でしょう。私も例外ではありません。

しかし以前から皆様に『どんなに成果が上がろうとも絶対に有料化しない』と何度も何度も伝えてきました。今でもその考えは曲がっていませんし、今後も曲げる気は一切ありません。

じゃあどうやって収益化するのか。3つの要素があります。

1) 広告収入。

ご覧いただいている皆様からすれば『広告うぜぇ』って思われているかもしれませんね。その通りだと思いますが許してください・・・!!

何を隠そう私はWeb広告ベンチャー出身のエンジニア。自分1人の力でどこまで稼げるか試してみたいのです。

2) 馬券収入。

何を作っているか。そう、お金を生み出すための仕組みを作っているのです。

つまりは単純に精度を向上させれば収益化に繋がります。皆様とWin-Winの関係を築き上げるための架け橋です。

3) 年収アップ。

きっとこれは多くの方が盲点だと思われたでしょう。

競馬AI開発として行っている行為はアプリケーション開発と変わりません。つまり、エンジニアとしての市場価値を高める行為そのものなのです。

自分のスキルが向上すれば、そのまま自分の年収アップに繋がっていくのです。

4. マシンの増強。

『開発機』および『サーバ』いずれもスペックアップしていくことを考えています。

今現在使っている開発機は以前別の記事でご紹介したM1チップ搭載のMacBook Pro。
動作は軽快でとても満足の行く買い物でしたがメモリが少ないのが悩みどころ。今あるアップル製品に候補となる製品はありませんので、今後新発売したハイスペックなマシンを購入したいと考えています。

そしてサーバの増強も視野に入れています。
某大手競馬AIではサーバ代に月400万近く掛けているらしいです。それくらいサーバのスペックも重要ということですね。

いずれも大きくお金の掛かる物。そのためにもしっかりと収益化を意識していかなければなりません。

5. 技術公表。

これは完全にオマケなのですが、しっかりと成果が出た暁には内部仕様を少しでも公開しようと考えています。

ここについては今の段階では詳しく語りません。

3. さいごに。

今回はいつもとは少し違った趣旨で記事を執筆してみました。

今後とも競馬AI Gaspardをよろしくお願いいたします。

【商品レビュー】MacBook Pro late2020(M1) 1ヶ月使用レビュー。【Apple】

何だかんだで結局またMacBook Proを買ってしまいました。

前書き

前回記事にしました通り、MacBook Proを新調しました。購入までの間で様々な選択肢がありましたが、結論からすると買って大満足でした。

購入した物のおさらい。

今回購入したのは最新型のM1チップを搭載した、MacBook Pro 13インチモデルです。
MacBook Proの括りとしては最下位モデルに位置しますが、これまでのハイエンド機(30万円〜)に負けず劣らずのパフォーマンスが売りの製品です。

構成はこんな感じ。512GBモデルのメモリを8→16GBに増やしています。

項目スペック
CPU/GPUM1
MEMORY16GB
SSD512GB

結局どう?

先に結論から。M1チップすごいです。

発熱量少ないですし、本当に16インチモデルに搭載されていたi9と遜色ないくらいのパフォーマンス。そして驚異のバッテリー持ち。所詮エントリーモデルの位置付けだしハイエンドモデルの16インチと比べたら劣化するだろう、と思っていましたが見事に期待を裏切られました。

使用感という点についてはサイズダウンしたので画面の臨場感やパームレスト、トラックパッドの使用感は多少変わってしまいましたが、使っていくうちに自分の体が順応してくれるものですね。今では全く違和感ありません。むしろこのコンパクトさが理想と感じてしまうくらい。新型が出たら16インチを買い増ししようと思っていましたが、もし出ると噂されている14インチも同等スペックであれば無理に16インチを買う必要はないな、と思いました。大きな画面で作業したい時は外部ディスプレイに繋げれば何も問題ないですしね。

あえてデメリットを挙げるなら

M1チップはとにかく素晴らしいパフォーマンスを発揮してくれています。メリットについては多数のレビュアー様が取り上げてくれているので、私からはデメリットのみを挙げていきます。

デメリット1: Portが少ない!

分かりきっていたことですが16インチでは左右側面に存在していたUSB-CポートがM1 13インチモデルでは左側にしか存在しません。右側はイヤホンジャックのみ。

ただし実運用の話をすれば正直なところ大きな問題にはなっていません。USB-Cハブを駆使することによって特に不自由なく使えています。

ですが左右にポートがあれば便利なのも事実。デメリットとして取り上げさせていただきました。

デメリット2: しっかり発熱します!

電気で動く機械である以上、発熱は仕方ないですよね。後から発売されたデスクトップモデル、iMacにもそのまま同じものが搭載されるくらいパワフルなわけですから当然です。
巷に溢れている記事では『一切発熱しないのでファンの有無で大きく値上がりしてしまうProは買う価値なし!』という口コミをよく目にするのであえてデメリットとして記載します。

私の場合は通常のネットサーフィンに加えてWebアプリケーション開発や競馬AI開発を行っていますが、この中で最も負荷の掛かる競馬AI開発ではこれまでの16インチと同様にしっかりと発熱します。そして音を立ててファンが回転します。仮にファンレスのMacBook Airを選択していたら後悔していたと思います。

私のように負荷を掛けるような使い方をされる場合はファンの有無はしっかりと気に留めておくべきだと思いました。確かに3万円の価格差は大きいですが、この価格差が寿命やパフォーマンスに直結すると考えています。

デメリット3: M1ネイティブで動作するアプリケーションが多くはない

まだ出始めなので仕方ないですが、まだまだM1チップに最適化されているアプリケーションは少ないのが現状。

ただし可用性の観点で言えばRosetta2の互換によって大半のアプリケーションは問題なく動かせます。実際に私は今までintelチップ版MacBook Proで利用していたアプリケーションは全てそのまま使えました。

ただしM1に最適化されていないアプリケーションの起動時には多少のモッサリ感があります。この点においてはintelモデルの方が軽快。M1チップは何でもかんでも速い、というわけではないのです。

デメリット4: メモリ最大量が16GBと少ない

これは大問題。AI開発を行っているとあっという間に枯渇してしまいます。

しかし動作上は物凄く軽快なんですよね。恐らくSSDの性能がいいからでしょう。言い方を変えれば『SWAPが頻発してしまっている』と思われます。

SWAPというのは開発者にとっては馴染み深いものですが、一般的なユーザさんからするとなかなか馴染みのないものだと思いますので簡単に説明しておくと、SSDやHDDの領域をメモリとして利用する仕組みです。『仮想メモリ』とも呼ばれたりします。

例えば搭載メモリが16GBだとして、16GBでは収まらない量のデータを読み込まなければならなくなった場合、その不足分をSSDに一時的に書き込んで仮想的にメモリとして動作させるのです。

『何が問題なのか』という話になりますが、SSDは書き込み容量や回数に上限があると言われています。SWAPはストレージに対して読み書きを行う物ですから、頻発するようであれば少なからず寿命を削っているのでは、と考えられます。

ここについては長期間使ってみないと正しいことは言えませんが、少なくともいい状態ではありませんね。最低限、メモリの増設は必要だと感じました。

次期モデルでは最大64GBまで搭載出来ると言われていますから、買増しする際は最大まで増強しようと考えています。

デメリット5: 今のところWindowsとの互換はなし

これまではVMWareやBoot Campといった物を利用することによりmacOSとWindowsOSを共存させることが可能でした。これはintel製のCPUを積んでいたためです。M1チップはintel製ではありませんので、この互換が無くなってしまっています。

今後M1チップでも動作するWindows環境が展開されていくことを期待しています。

デメリット6: 安くはないよ?

先に断っておくと私は値段以上の価値があると思っているので10年以上macを買い続けています。ただし他社製品と比較するとどうしても『高いな』と思われているのも事実。ですのであえて突っ込ませていただきます。

今回のM1チップ搭載モデル発売に伴って『めちゃくちゃ性能いい!!』『intel版より性能上がったのに安くなった!』などという書き込みを目にすることがあります。ですが冷静になって他社製品とスペック比較してみてください。これまでのコスパが極端に悪すぎただけであって、今でもまだまだASUSやDellと比較するとハイエンド機の性能は雲泥の差ですし、性能あたりの価格も割高です。

一例を上げるならばASUSのROGシリーズと比較すると一目瞭然。実は今回の買い替え候補の1つでした。候補から外れた理由も説明しておきますと、ハイスペックが故に発熱量が多いこととApple製品で統一したかったことの2点です。いずれもM1搭載MacBook Proでは条件を満たせるものでした。

ASUSのROGシリーズは15万円程度で最新の3Dゲームを動かすことの出来るほどの性能を持っています。対して今回のMacBook Proで15万円というと最下位モデルがやっと。ストレージも256GBと心許ないですし、性能面で見てもグラフィック周りがとても貧弱です。

明確な使用用途や求める条件が決まっている方や、私のようにApple製品にこだわりのある方であれば素直に買えばいいと思いますが、ただ単に「パソコンが欲しい」という方や「とにかくハイスペックなマシンが欲しい」であれば一度他社製のWindowsマシンを調べてみた方がいいと思います。あくまでAppleというブランド製品で、中身は他社との互換を一切考えず独自に作られたmacOSですからね。

まとめ

今回はあえてデメリットを強調したレビュー記事をお送りしました。デメリットを全て許容出来る方にとっては本当に最高の1台だと思いますし、私自身本当に満足しています。

少しでも購入の参考になりましたら幸いです。

MacBookPro、買い替えます。

突然ですがMacBook Pro 16inchモデルを売却することにいたしました。

engineer-lime.com

なぜ売却?

理由は3つ。

1. 今使っているMacBook Pro 16inchに限界を感じた

具体的にはメモリがカツカツ。常に使用率100%で、スワップを多用してしまっています。SSDって頻繁な読み書きに弱いと言われていますからね。明らかに寿命を縮めてしまうような使い方をしてしまっています。メモリをガッツリ盛っておけば良かったなと後悔。

とはいえ今買えるM1モデルについてもメモリ上限は16GB。「スペックダウンだろ」と思われるかもしれませんが、根本から構成を見直した関係で効率化が図られており、同じ16GBでも体感が全然違うのだとか。

その他スペックに関する比較としては、CPUパワーのベンチマーク的には同等の結果。グラフィックに関しては独立GPUを搭載した16インチのほうが勝りますが、私のメイン用途である機械学習分野においては16インチが負けてしまう結果が出ているそう。最も重要視している分野において、30万で買ったハイエンドモデルが10万円で買えるエントリーモデルに負けてしまったのです。

2. 16inchは発熱と電源消費量が半端ない

私のメイン用途は当ブログでも記事にさせていただいているように競馬を題材とした機械学習が主となっています。長時間掛かるような重い分析を実行したり、週末は終日付けっぱなしで競馬AIによる予想を皆様へとお届けしているのもこのマシン。
そんな使い方では常にファンがフル回転しています。場合によっては 電源供給量<電源使用量 となってしまい充電されずバッテリーが0まで下がってしまったこともありました。そしてキーボード上部が触れなくなるくらい熱を持ちます。『牛肉を乗せたら焼けますよ!』と冗談で言っても疑われないレベルの熱さになります。これでは安心して運用することが出来ません。

3. intel版の値崩れが激しい

先述の通り安価なM1搭載モデルに性能負けしてしまっている、という点。古い物を売って新しいものを買う、というスタイルの人間からすれば大変な痛手です。ましてや16インチのAppleSilicon搭載モデルが出て普及してしまった日には現行モデルは価値無しも同然の扱いを受けてしまうかもしれません。そうなる前にとっとと売り抜けしてしまいたい。

新型については色々と噂が飛び交っていますが、外見が変わったり、タッチバーが廃止されたり、MagSafe充電になるのではと噂されています。Appleのことですから外見の変更についてはより格好良くなることは間違いないでしょう。タッチバーも正直なところ使い所が難しいので廃止されても構いません。そしてMagSafeは長年Apple製品を使い続けてきた身としては歓喜している部分もあります。Thunderbolt端子での充電も続投でしょうから、フルモデルチェンジに対する実質的なデメリットは何もないと考えています。

1年少々で買い替え。損したか?

売却額の想定は20万行かないくらいを見込んでいます。買値が約30万でしたから、1年3ヶ月で10万円ほど償却したような計算。10万少々で購入したマシンが1年少々で使い物にならなくなった、と捉えれば非常にコスパの悪い買い物だったと思えます。

しかしこのマシンを購入して得られたものは多数あります。今最もハマっている競馬AI開発はこのマシンがあってこそ。そして自分でもビックリするくらいの新規訪問者を呼び寄せたモンハンライズの自動化開発もこのマシンから始まりました。勉強代と捉えれば十二分にお釣りが返ってきています。

何を買うか?

ズバリ、MacBook Pro M1モデル SSD:512GB / MEM:16GB JISキーボードです。
この流れですからM1チップ搭載のモデルを購入することはお見通しかと思います。では何故この構成を購入したのかを説明していきます。

まずはこの先の運用ロードマップから。

以下のように考えています

想定時期 機種 Action 説明
2021/05 MacBook Pro 13inch(late2020) 購入 当記事の通り。
2021/06 MacBook Pro 16inch(late2019) 売却 M1モデルで不自由なく使えることが分かったら即売却。
2021/12 MacBook Pro 16inch(late 2021) 購入 ガッツリ使い込むメインマシンとして追加購入。目が飛び出るほどの価格帯であれば整備品まで待つことも視野に。
2022 MacBook Pro 13inch(late2020) 譲渡 恐らく家庭環境も変わっている頃。家族間や夫婦間といえどプライバシーの確保は大事。お下がりだけど専用のマシンを与える。

なぜAirではなくPro?

巷では『Airで十分。Proは買う価値なし』とまで言われていますよね。
そんな中なぜProモデルを選んだか、理由は2つあります。

1. そもそもの用途が高負荷想定の機械学習だから

いくら発熱しにくいチップといえど、機械学習で思いっきり負荷を掛けたら発熱は避けられないでしょう。長時間つけっぱなし運用が基本になるでしょうから、ファンレスでは限界があると見ています。熱くなってパフォーマンスが落ちたら嫌ですし、ましてや熱暴走で壊れるなんてことがあったら最悪です。差額は3万円もあるのに大きな違いは冷却ファンの有無とタッチバーの有無くらいですが、冷却ファンが付いていることに対して3万円の価値を見出しました。

2. 持ち運ばないから

Airの魅力は軽さです。でもその恩恵を受けられるのは持ち運ぶ時。そもそも持ち運ばなければ関係ありません。

その他選定について

SSD:512GB

現在使っている16インチモデルは1TBでしたが、1年以上使い込んだ今現在の使用量を見ても200GB以内に収まっています。繋ぎとしての利用を想定すれば最小構成でも十分事足りますが、先述の通りいずれは譲渡する形を想定していますので お下がりとして与えても不自由なく使えるであろう容量を想定して512GBを選択しました。

MEM:16GB

機械学習用途なので言わずもがな。最大までスペックアップしました。

JISキーボード

こちらもお下がりとして与えた後を想定。スッキリとしたUSキーボードも魅力的ですが、JISキーボードに慣れた方にとってUSキーボードは癖がありますからね。

購入店舗について

価格.comに掲載されている店舗で買えば安上がりですが、今回欲しいのは通常構成ではなくカスタムモデルになります。一部量販店でも取り扱っているようですが、あくまでオーダー受付であって常に在庫があるわけではありません。ですので基本的にはApple公式のみで販売されているような形です。
となると定価販売になってしまい、カスタムすると税込20万に迫る価格に。

半年前のマシンで且つ数ヶ月後にはフルモデルチェンジすると噂されている物にここまで出すのは気が引けます。
そこで今回はApple公式より販売されている整備済製品を購入することに。公式のサポートが得られて15%引き。約16万程度で購入することが出来ました。
そして普通にカスタムして購入するよりも納期が圧倒的に早い点もポイント。通常のカスタムであれば最短でも2週間程掛かりますが、整備済製品の場合は4/30に購入して5/1に届く予定になっています。これは利用しない手はないですね。

最後に

まさか1年少々で買い換えることになるとは思ってもみませんでした。
一つ言えることは、『とりあえずメモリは盛っておけ』です。
そして次期16インチモデルに期待します。

【人柱】続・ミニマルなiPhoneケース mynusをmagsafe対応にしたかったお話

※前回の記事の続編です。まだご覧になられていない方は是非。
engineer-lime.com

前書き。

前回の試行結果はご覧の通り。悲しく終わっています。

どうしてもmynusのケースでmagsafeを使いたい。諦めきれない。
金属製のリングが駄目ならもっと強力な磁石を仕込んでみたらどうなるだろう。
もう一度チャレンジしてみることに。

【人柱】ミニマルなiPhoneケース mynusをmagsafe対応にしたかったお話

人柱記事です!

前書き

待ちに待ったmynus。発売と同時にポチって約3週間使用。
質感よく大変満足しています。

…が、magsafe非対応なのがどうしても気に入らず。

追い打ちを掛けたのがankerからmagsafe対応モバイルバッテリーが発売されたこと。
結構な磁力で、ケースをつけていない状態であれば充電したまま鞄に放り込んでもホールドされたまま。
とても画期的なモバイルバッテリーです。
Amazon | Anker PowerCore Magnetic 5000 (マグネット式ワイヤレス充電機能搭載 5000mAh コンパクト モバイルバッテリー) 【 マグネット式/ワイヤレス出力 (5W) / USB-Cポート出力 (10W) / PSE技術基準適合 】iPhone 12 / 12 Mini / 12 Pro / 12 Pro Max | Anker | モバイルバッテリー

amazonを見ているとmagsafe非対応のケースを対応ケースへと変える金属製のリングが販売されていました。
これはもしかしたらいけるんじゃないか?と思い即購入。そして組み込んでみる。
Amazon.co.jp: Magsafe用 リング磁気増強 (Aerku) Magsafeメタルリング 保護シェル携帯電話マグネットリングと互換性があります ワイヤレスカーチャージャー鉄リング 強化された 磁石を吸着させることができますワイヤレス充電器 Qi急速充電器 リングバックルiPhone 12 シリーズ 薄い金属リング アルミニウム合金の耐食性 滑らかなエッジ、安全金属リング (5枚入り): 家電・カメラ

結論からすると失敗。
magsafeを使いたい人は大人しく別のケースを使うか、望みは薄いでしょうけどメーカーさんに皆で要望を出して商品化していただくしかないですね。

やったこと

金属製のリングを内側に埋め込んでみました。
まずBefore。内装まで美しいですね。
f:id:rhymerr:20210418163207j:plain
そしてこれが今回購入した金属製リング外箱。どう見てもカメラ保護ガラスの箱。これが中華クオリティですか。
f:id:rhymerr:20210418163216j:plain
レビューでは「4枚しか入っていなかった!」という書き込みが多数寄せられていましたが私のはしっかりと5枚入っていました。
f:id:rhymerr:20210418163220j:plain
剥がす。結構簡単に行けました。
f:id:rhymerr:20210418163224j:plain
貼り付ける。
f:id:rhymerr:20210418163227j:plain

結果

全然よくなりませんでした!
クッション材を除けば割と薄めのケースなので期待していましたが、結果は振るわずでした。
湾曲しているわけでもないので全く原因が分かりません。
磁石とかには全然詳しくないですが、実は極端に磁力が通りづらいとかだったりして。
外側に貼り付ければ使えなくはないですが、このケースのいいところを一気に殺してしまいますからね…。
メーカーさんが公式Twitterで「magsafe対応させたらコストが上がるので〜」と言っていた件、もしかしたら同じようなことを実験されていたのかもしれませんね。単に金属製のリングを埋め込むだけで実装出来れば大してコスト掛かりませんから。

ケース自体はとてもいいものなので、今後のラインナップ展開に少し希望を抱きつつも、今はmagsafeは我慢して使っていこうと思います。

続編記事書きました!!

engineer-lime.com

【モンハンライズ】マカ錬金に使用するモンスター上位素材を自動収集するプログラムを作った【MH:Rise】

またまたモンハン自動化ネタ。本編より楽しいです。

内容

今回も動画をご用意いたしました。
www.youtube.com

オトモ隠密隊派遣を利用して稼ぐ感じですね。

5回クエストを消化するたびに受け取ることが出来ますが、クエストを消費する部分については偉大なる先人様である 『こちゃてす様』 が作成されたプログラムを拝借させていただきました。

カムラポイントが尽きない限り延々と繰り返してくれます。カムラポイントがないよ!という方については、こちらも『こちゃてす様』が自動収集プログラムを公開してくれているので是非ご参考に。

実行環境

参考までに私の実行環境ですが、本体は通常版Switchの初期ロット/ソフトはパッケージ版になります。

そして利用しているマイコンは以下。(画像クリックでAmazonの商品ページに飛びます)
名称長いですが『KOOKYE Pro Micro ATmega32U4 5V/16MHz Module Board マイクロコントローラーボード Arduino Leonardo Replace ATmega328 Arduino Pro Miniと互換 3個セット』という商品名です。
こちらは他製品比較で少々お高めですが、『ATmega32U4』というチップを搭載していれば動くはずです。

コード

参考までに今回作成した関数部分を公開します。
何度も検証して正常動作を確認出来ておりますが、利用される方は各々で検証ください。

呼び出す順番は以下の通り。
1〜3までは初期処理として設定し、それ以降の4〜10でループを組む形になります。

1. 里内移動関数(6:集会所準備エリア)
2. 隠密隊派遣受付前まで移動する関数
3. 隠密隊派遣関数
4. 里内移動関数(7:集会所)
5. クエスト消費関数(こちゃてす様作成のものを参照。5回繰り返してください。)
7. 里内移動関数(6:集会所準備エリア)
8. 隠密隊派遣受付前まで移動する関数
9. 隠密隊成果物受け取り関数
10. 隠密隊派遣関数

里内移動関数

こちゃてす様が作成された関数に『集会所 準備エリア』までの移動処理を追加しています

//里内移動関数
void Map_teleport(int select) {
// 里内移動ショートカット呼び出し:里内でのマイナスボタンの挙動を「タイプ2」に変更しておく必要あり
pushButton(Button::MINUS, 750, 1);
if (select == 7) {
// クエスト受注時に利用する処理
// 集会所まで移動
pushHatButton(Hat::UP, 400, 1);
} else if (select == 6) {
// 隠密隊派遣する際に利用する処理
// 集会所 準備エリアまで移動
pushHatButton(Hat::UP, 400, 2);
} else {
pushHatButton(Hat::DOWN, 450, select);
}
// 決定
pushButton(Button::A, 1200, 1);
}

隠密隊派遣受付前まで移動する関数

新規作成。集会所準備エリアに入ってから呼び出します。

// ネコ前まで移動
void moveFrontOfCat() {
// 集会所 準備エリアに移動する
Map_teleport(6);
// キャラ移動
Transport_stick(45,300);
Transport_stick(90,200);
}

隠密隊派遣関数

ネコに話しかけて派遣するまでの一連の処理になります。
アキンドングリを使うかどうかは関数呼び出しの際に指定してください。1で使う/0で使わない になります。

// 隠密隊派遣関数
void covertTroops(int nuts) {
// 話しかける
pushButton(Button::A, 2000, 1);
// 「オトモ隠密隊」にカーソル移動&決定
pushHatButton(Hat::DOWN, 500, 1);
pushButton(Button::A, 500, 2);
// 調査先選択:「百竜夜行」を選択 / 百龍夜行は出現ランダムなので無い場合は「溶岩洞」が選択される
pushButton(Button::A, 1500, 1);
pushHatButton(Hat::UP, 500, 1);
pushButton(Button::A, 500, 2);
// オトモ選択:オトモアイルーを上から4頭選出(※要事前ソート)
pushButton(Button::A, 500, 6);
// アキンドングリ利用チェック
if (nuts == 1) {
// アキンドングリを利用するパターン。Xボタンを押下する
pushButton(Button::X, 1200, 1);
}
// 決定
pushButton(Button::A, 500, 2);
// 会話終了
pushButton(Button::B, 500, 2);
// 会話終了まで待ち時間を挟む
delay(3000);
}

隠密隊成果物受け取り関数

派遣後、5回クエストを消化次第実行する形になります。

// 隠密隊成果物受け取り
void receiveTroopRewards() {
// 話しかける
pushButton(Button::A, 2000, 1);
// 「オトモ隠密隊」にカーソル移動&決定
pushHatButton(Hat::DOWN, 500, 1);
pushButton(Button::A, 500, 2);
// 受け取る
pushButtonContinuous(Button::A, 6000);
// 会話終了
pushButton(Button::B, 500, 2);
delay(3000);
}

まとめ

今回はモンスター上位素材を自動収集するプログラムのご紹介でした。
ご自由に流用いただいて構いません。もし不明点があればTwitterにて承ります。
「そもそもどうやって作るんだよ」「マイコンってなんやねん」って方についても是非(笑)

以前投稿したネタ

engineer-lime.com

【モンハンライズ】採掘と福引を自動化したお話。【MH:Rise】

ツイッターの方ではちょくちょく公開させていただいておりましたが、amiiboを使うと引くことの出来る福引を完全自動化&無限引きに対応させてみたお話です。

内容

まずは動画を作ったのでご覧ください。(※2021/04/07 07:00に公開されます)

福引自動化&無限引き

通常の福引はセール中に1度という制約がありますが、amiiboで引くことの出来る福引は1日3回までの制約を除けば無限に引き続けることが出来ます。しかも日付の管理はあくまで本体側の時計でしか判断されておらず、時計さえずらしてしまえば何度でも簡単に引くことが出来てしまいます。ポケモン界隈で流行っていた自動化の手法で簡単に実装出来ると踏み切って実装してみたのがきっかけ。

結論からするとまだまだ改良の余地あり。
amiiboは純正コントローラから読み込む必要があるのですが思いの外すんなりと読み込んでくれないんですよね。 15秒ほど猶予を持たせてみましたが、これでも時々失敗してしまうことがありました。

また今回はPCからBluetoothでSwitchに接続する形式を取ってみましたが、有線と比べると多少のラグが発生してしまうこともありました。ラグが発生して然るべきキーが実行されないと処理が途中で変な方向に向かってしまうんですよね。
少々時間は掛かってしまいますが、ポケモンで実装したときと同じようにマイクロコンピュータデバイスを使って実行する方式に変更しようと思っています。ある程度の反響があればソースコード等の公開も考えています。それまでに動作を安定させたいな。

amiiboについて補足

amiiboで引くことの出来る福引には大きく分けて2パターンあります。

1つ目がMHRiseコラボとして発売された3体。マガイマガドとオトモガルクとオトモアイルーの3体ですね。
こちらについては専用の福引が用意されています。それぞれの当たりは以下の通り。

amiibo 当たり その他
マガイマガド 鎧玉系 原珠/罠(落とし穴/シビレ罠/タル爆弾)
オトモガルク 鬼神薬グレート 硬化薬/閃光玉/音爆弾/強走薬
オトモアイルー アキンドングリ 謹製おだんご券/秘薬/粉塵

f:id:rhymerr:20210407030651p:plain

マガイマガド(これは普通の当たりです。大当たりのスクショ撮れていなかった…大当たりでは鎧玉と原珠のレア度が更に上がって罠の個数が増えます。)
f:id:rhymerr:20210407030720p:plain

オトモガルク(大当たり)
f:id:rhymerr:20210407030730p:plain

オトモアイルー(大当たり)
f:id:rhymerr:20210407030704p:plain

どれも魅力的ですが、個人的には防具の強化に役立つ鎧玉と、よく使うけど作るのが結構面倒臭い罠一式が入っているマガイマガドを推します。

そしてもう2つ目のパターンがその他のamiiboで実行した場合。
通常の福引と同じく、ランダムのようです。回復薬とかが手に入るのでこちらでも十分だと思いますね。

採掘自動化

福引自動化はそれなりのコンピュータ知識に加えて品薄でなかなか手に入らないamiiboが必要ということで明らかに敷居が高いです。なのでオマケとして割と簡単に実装できる採掘自動化も紹介に取り入れてみました。
こちらは連射機能付きコントローラーがあれば誰でも簡単に実装出来ます。

昔はホリパッドといえばスティックが異常に固くて使いづらい印象でしたが最近のは純正に近い使用感でかなり使いやすく感じますね。純正までの質感はないにしても、半額以下なので許容範囲です。

まとめ

競馬AI開発の傍らで作った物の紹介でした。もうちょっと動作を安定させるまで続けたいと思います。

追記

マイコンに移植しました。
非常に安定して動作してくれていますので、近日中に内部構造を公開します。

内部構造公開。

使う処理は2つだけ。

1. 福引を実行する関数
2. 月日を変更する関数

これらをループするだけの簡単仕様です。joyconでも出来なくはないですが、絶望的に固定しづらいのでプロコンを推奨。

利用開始の条件としては、プロコンにamiiboを固定⇒雑貨屋の選択肢「amiiboを読み込む」にカーソルを合わせておくだけでOKです。

俗に言う『時渡り』ですね。ポケモンでもおなじみのロジックなので今更語ることもないでしょう。とってもシンプル。
ちなみにこちらのコードは緊急で書き上げたこともあり、最も語句が短くシンプルに書けそうだった『NintendoSwitchControlLibrary』というライブラリを利用させていただいております。詳しくはググってください。モンスター素材自動収集プログラムとは利用しているライブラリが異なりますのでご注意ください。気が向いたら移植するかもしれません。

福引を実行する関数

本体部分になります。

// 福引実行
void execLottery() {
// amiibo読み込み
pushButton(Button::A, 5000);
// 回して受け取る
pushButton(Button::A, 50, 11);
}

月日を変更する関数

月と日をそれぞれ+1します。日付の重複判定が時々掛かってしまうようですのである程度のランダム性を持たせるためにそうしています。
理論的なことには詳しくないので体感のレベルですが、2021/1/1から開始すると1日放置しっぱなしでも延々と回り続けてくれました。

// 時計変更
void timeFlyer() {
// ホーム画面 > 設定
pushButton(Button::HOME, 500);
pushHat(Hat::DOWN, 25);
pushHat(Hat::RIGHT, 25, 5);
pushButton(Button::A, 100);
// 設定 > 本体 > 日付と時刻
holdHat(Hat::DOWN, 2000);
pushHat(Hat::RIGHT, 25);
pushHat(Hat::DOWN, 25, 4);
pushButton(Button::A, 200);
// 日付と時刻 > 現在の日付と時刻
pushHat(Hat::DOWN, 25, 2);
pushButton(Button::A, 500);
pushHat(Hat::RIGHT, 25);
pushHat(Hat::UP, 25);
pushHat(Hat::RIGHT, 25);
pushHat(Hat::UP, 25);
pushHat(Hat::RIGHT, 25, 3);
pushButton(Button::A, 50);
// ホーム画面 > ゲーム画面
pushButton(Button::HOME, 1000);
pushButton(Button::A, 500);
}

その他記事

engineer-lime.com

【商品レビュー】最安クラスのHDMIキャプチャデバイス!Genki Shadowcast発売前レビュー!

先日のmoft floatに続きましてまたまた海外から取り寄せました。
結論からすると画質や遅延はもう一息、だけどお手軽感は抜群で必要十分な商品でした。

買ったもの。

タイトルにもある通り、『Genki Shadowcast』という商品になります。
簡単に言うとHDMIの信号をUSB-Cに変換してくれるような商品です。USB接続出来るようになったことでそのままPCに接続可能というわけですね。
今回はNintendo Switchをベースに紹介していきますが、HDMI出力機能が付いている一眼カメラなどにも使うことが出来ます。

このGenkiというメーカーは、以前ご紹介したNintendo SwitchのDock兼充電器と同じメーカーになります。
かゆいところに手が届くような、絶妙な製品を作ってくれているメーカーさんだと感じますね。

engineer-lime.com

開封。

f:id:rhymerr:20210330212854j:plain
f:id:rhymerr:20210330212858j:plain
f:id:rhymerr:20210330212849j:plain
f:id:rhymerr:20210330212843j:plain
f:id:rhymerr:20210330212839j:plain
f:id:rhymerr:20210330212902j:plain

実際に使ってみると…

いい点、イマイチな点に分けて紹介していきます。

いい点

とてもコンパクト

通常のキャプチャーボードだとそこそこの大きさになってしまいますが、こちらの商品は本当に小さいです。
親指くらいのサイズでしっかりと映像出力できるのは本当に素晴らしいと思います。

安い!

約4000円でこのクオリティ。
キャプチャボードなんて安い中華製品でも1万近いですからね。その半額以下と考えるととてもお得感があります。

engineer-lime.com

専用ソフトウェアが軽い!

プレビューおよび録画用に専用ソフトウェアが用意されています。専用ソフトウェアということもあり、とても軽快に動作するところがポイント。
通常のキャプチャボードで録画する際はOBS等のサードパーティソフトウェアを使いますが、多機能なだけあって動作が重かったりするんですよね。

ちなみに、OBS等のソフトウェアへの取り込みも可能です。このへんは好みに応じて使い分けるといいと思います。

イマイチな点

低遅延?そこそこの遅延を感じます。

やっぱり遅延はあります。1秒までは行かなくとも、体感的に0.5秒くらいはあるのではないでしょうか。これではアクションゲームなんて無理ですね。低遅延を売りにしている商品だけにがっかりなポイントでした。

対策としてHDMIの分配器を導入しています。ShadowcastとPCモニタに並行出力するような形ですね。最近は価格もこなれてきているので、快適性を求められる場合は必須と言えるでしょう。

画質が…

最近は4k出力なんかも出回ってきましたがこのデバイスでは最大でも1080p/60fpsまで。しかも1080p/60fpsは録画は非対応であくまでプレビューのみ。録画をするなら1080p/30fpsもしくは720p/60fpsまで落として上げる必要があります。

とはいえパッと見では全然汚くないので、必要十分かな。
f:id:rhymerr:20210330212915j:plain

端子の周りが太い。

基盤を搭載している以上仕方ありませんが、以下のようにちょっと出張っています。これでは機器によっては直接差し込めないケースも結構あるでしょう。

対策として私は短めの延長ケーブルを購入しています。

まとめ

安くて期待していなかったけどしっかり使えています。
お手軽にHDMIキャプチャを行いたい方にはオススメできる商品だと思いました。
まだ未発売の商品ですが、発売された際はぜひぜひご検討ください。

その他過去記事

engineer-lime.com

engineer-lime.com

engineer-lime.com

【商品レビュー】Anker PowerWave+ 3-in-1 stand with Watch Holder

qi充電器を買い換えました。

前書き。

私は日頃からアップル製品に囲まれています。その中でもiPhoneとApple WatchとAirPods Proは毎日充電が欠かせません。以前、これらをまとめて充電するためのqi充電器をご紹介させていただきました。

engineer-lime.com

この時には3つ同時に充電出来るものって全然なかったんですよね。中国製か、もしくは充電器とは思えないくらい高価な製品しかありませんでした。

変なメーカーのものを買うのも怖いので仕方なくスマートフォン用とそれ以外とで分けたのですが、Ankerから3つ同時に充電出来る製品が発売されたと知って即購入。

結論からすると、本当にオススメできる製品でした!

買ったもの。

今回も信頼と安心のAnker製です。

写真とか。

スマートフォン充電用のスタンドと、Apple Watch充電用の台座と、その他汎用的に使える台座が付いています。
f:id:rhymerr:20210326164740j:plain

大きさはこんな感じ。
f:id:rhymerr:20210326164733j:plain
以前のものと比べると段違い。一気に机が広くなりました。

以前のものはmicro USB端子でしたがこちらはしっかりとUSB-Cになっています。
f:id:rhymerr:20210326164853j:plain

付属ケーブルはUSB-A to usb-Cケーブル。私はすべてUSB-Cに統一したいので充電器とケーブルは個別調達しています。これももちろんAnker製。雑に扱っても全く断線しないのでおすすめです。

実際に充電してみるとこんな感じ。非常にコンパクトにまとまります。
f:id:rhymerr:20210327224059j:plain

まとめ

求めていたものがやっと出てきた感じ。乗り換えて正解と思える製品でした。

その他記事紹介

engineer-lime.com

engineer-lime.com