About 槌本 裕二

えっとワークのシステムを作っています。

ヤクルト 50 %
DeNA 49 %
阪神 0 %
広島 0 %
巨人 0 %
中日 0 %

ソフトバンク 51 %
西武 35 %
オリックス 11 %
楽天 2 %
ロッテ 0 %
日本ハム 0 %

全ての数値は四捨五入されているので、合計が 100% にならないかもしれません。

アルゴリズムが固まってきました。想定以上に計算時間が延びてしまい、困っていますが、なんとか改良して実用レベルの速度にして、8月中の自動更新を目指します。


動画で言及した、新アルゴリズム(優勝決定日確率の算出に使用)での優勝確率の速報です。最近のチームの勢いについての現実的な補正が含まれています。

ヤクルト 62 %
DeNA 38 %
阪神 0 %
広島 0 %
巨人 0 %
中日 0 %

西武 61 %
ソフトバンク 21 %
オリックス 14 %
楽天 4 %
ロッテ 0 %
日本ハム 0 %

8月中に自動更新を目指します。



質問があれば @npbwin1 まで

順位確率とシナリオ

ペナントレース最終順位の確率分布の例

優勝~6位・CS

  • 今日までの戦績から予想される最終順位の確率です
    • 例では、ヤクルトは約34%の確率で優勝できるペースです
    • 全ての数字は四捨五入されています。特に 0%・100%の解釈にご注意下さい
    • CSは、3位以上になる確率です。四捨五入の関係で、優勝・2位・3位の見かけの総和とは異なる場合があります

順位

  • 最終順位の期待値です

  • 残り試合数です

シナリオ

  • 優勝するなら・CSに進出するなら、どのようなシナリオが目標になるかの目安です
    • 例では、ヤクルトが優勝するなら、残り102試合を63勝39敗で行きたいところです。
    • もし、残り102試合を63勝39敗できれば、(このままなら)70%の確率で優勝が決まります
    • 優勝確率が高くなれば、マジックナンバーと同じ数字になります
      • かっこ内の確率100%のとき、マジックナンバーと同じ数になるので、カウントダウンにも使えます
      • マジックナンバーと異なり、自力優勝が消滅しても現実的なシナリオの数値が出ます
    • 優勝確率が低くなれば、優勝の可能性が残るギリギリの勝ち数になります
      • 優勝確率が大きく下がってしまっても、ある程度巻き返せれば現実的な優勝確率が残っています。「残りを全勝すれば…」という無理な仮定はせず、最後まで現実的な優勝のシナリオに向けて応援できます

暫定順位

暫定順位表の例
  • 各チームの勝ち数・負け数・引分け数・勝率・勝敗ゲーム差・勝率ゲーム差(実差)です

実差

  • 勝率を元にしたゲーム差です
    • 勝率で順位を決める日本のプロ野球に合わせて再定義したゲーム差です
    • 例では、ヤクルトと巨人が(勝敗)ゲーム差無しですが、実差は0.6 離れています。ヤクルトが引き分けて巨人が勝てば、巨人は 28勝19敗 勝率 .596 で -0.5 ゲーム差の 2位となります
    • 実ゲーム差は勝率を元に計算されているので、上記のような逆転現象は起きず、必ず順位と連動します

共通すること

  • これらの数字は「予想」ではなく、現状の勝敗ペースを確率という数字で表したものです。皆さんの「予想」の材料の一つとしてお役立て下さい
  • これまでの対戦成績を維持すると仮定して、確率的なゆらぎや長期的な変動を考慮して、これからの対戦が試行されています。偶然と必然の割合を(統計理論に従って)変えながら、3億通りのシナリオを計算し、最終順位の割合を確率で表示しています
  • 未来に故障者が出たりチームの調子が変わったりする確率的な要素は事前不確定性として織り込んでいます。
  • 今日故障者が出たり、日程が過密だったりするなど、確定的に「これまでのペース」が維持できそうにない状況は加味されません。それを皆さんが加味して予想して下さい


ペナントレースを楽しむ指標は沢山ありますが、やはり「勝ち・負け・勝率・ゲーム差」は一番馴染みの深い指標だと思います。「ゲーム差」は、直接対決で何ゲーム勝利すれば並ぶ事ができるかという、短期的な順位差を非常にわかりやすく説明します。

ただ、ゲーム差が示す「並ぶ」とは「貯金数」で並ぶという意味です。しかし、順位は「貯金数」ではなく「勝率」で決めるので、消化試合数と引き分けの数が大きく異なる場合に、順位と合致しない事があります。象徴的なのが「マイナスゲーム差」で、これは数年に一度生じています。せっかくの良い指標なのに、マイナスになっても順位で追い越せないのでは、隠れたわかりにくさを含んでしまっています。

そこで、当サイトでは「ゲーム差の隠れたわかりにくさ」を解消するために「実ゲーム差」を導入してみました。

そもそも「ゲーム差」とは何か。従来のゲーム差は、「勝ち数 – 負け数」の差の1/2を「ゲーム差」としていました。この定義の「1ゲーム差」は「直接対決を1ゲーム勝てば、貯金数が並ぶ」差である事を意味します。

そこで「実ゲーム差」は、貯金数ではなく勝率を用いて、「直接対決を1ゲーム勝てば、勝率が並ぶ」差を「1ゲーム差」と再定義し、勝率ベースでゲーム差を求めています。

もちろん「直接対決を勝つ」は、直接対決ではなくても「相手が負けて自分が勝てば」でも同じです。


  • 3/26 レギュラーシーズン開幕。新型コロナウイルスの影響が続く今シーズンは、9回までで終了となり延長戦はありません。去年より更に引き分けの増加が予想されます。
  • 6/10 阪神、セ・リーグ CS 進出濃厚。残り 86試合を 42勝ぐらいで → 10/6 決定
  • 6/29 巨人、セ・リーグ CS 進出濃厚。残り 70試合を 34勝ぐらいで → 10/23 決定
  • 8/15 ヤクルト、セ・リーグ CS 進出濃厚。残り 59試合を 28勝ぐらいで → 10/6 決定
  • 9/12 ロッテ、パ・リーグ CS 進出濃厚。残り 36試合を 16勝ぐらいで → 10/15 決定
  • 10/1 オリックス、パ・リーグ CS 進出濃厚。残り 17試合を 6勝ぐらいで → 10/12 決定
  • 10/6 巨人、セ・リーグ 3位濃厚 → 10/23 決定
  • 10/7 楽天、パ・リーグ CS 進出濃厚。残り 14試合を 6勝ぐらいで → 10/23 決定
  • 10/10 ヤクルト、セ・リーグ 優勝濃厚。残り 14試合を 7勝ぐらいで → 10/26 決定
  • 10/10 阪神、セ・リーグ 2位濃厚 → 10/26 決定
  • 10/15 楽天、パ・リーグ 3位濃厚 → 10/23 決定
  • 10/15 ソフトバンク、パ・リーグ 4位濃厚 → 10/23 決定
  • 10/15 広島、セ・リーグ 4位濃厚 → 10/23 決定
  • 10/26 中日、セ・リーグ 5位決定
  • 10/26 DeNA、セ・リーグ 6位決定
  • 10/27 オリックス、パ・リーグ優勝決定
  • 10/27 ロッテ、パ・リーグ 2位決定

SteamでPCゲームを楽しむとき、ゲーム機のコントローラを使いたい!

PlayStation3のコントローラDualshock3をPCで使いたい時、ドライバを導入しなければなりません。

検索すると、PlayStationNowをインストールすればドライバがインストールされるという情報が出てきますが、2022年2月現在、Dualshock3のドライバがインストールされません。これは、現行のPlayStationNowは Dualshock3 をサポートしなくなったので、ドライバの同梱も無くなった、という事みたいです。Dualshock3 のドライバを含む古いバージョンを探すと、こちらに Version 11.2.2 (Archive.org) がありました。

ご利用は自己責任で。でも、古いデバイスも簡単に切り捨てないで欲しいとは思います。


なんだかんだあるけど、眞子様には幸せになって欲しい(不幸になっても誰も得しない)ので、小室さんにはなんとか成功して欲しい。

100点満点でなくても60点の人生で良い。二人が納得すれば良い。

一時金は受け取って良い。ここぞと言うときに使って欲しい。それでも苦しいときに、妹弟に相談できる良好なご関係でありますように。

小室母子の縁を切ってでも、世間を敵に回してでも、お二人で乗り越えて欲しい。


独習PHP 第4版

twitterで散々呟いているとおり、私はphpが大好きだ。Webだけでなく、CLIスクリプトとしても大いに使っている。

phpは、pythonと同じぐらい好き嫌いが分かれる言語ではないかと思う。まず、その普及率の高さ、そして、良くも悪くも「C言語とシェルスクリプトといった、多くの人が知っている知ってる構文で書ける」タイプのインタプリタだからだ(こう言いきってしまうと各所よりマサカリが飛んできそうだが)。誰でも簡単に書けるが故に、私のようなにわかプログラマーがクソコードを量産したせいで、少なくないプログラマーから敬遠される言語の一つになってしまったが、これはphpが悪いのではなく私たちクソプログラマーのせいである。(一方、pythonは、逆の意味で好みが分かれそうだ。)

そんなことはさておき、本書を語る上で最も象徴的だった部分を紹介する。なお、このレビューを読んでいるという事は、phpを多少なりとも(たとえば、バーション 5.4あたりで)使ったことがあると思う。以下のコードを見て欲しい。

$bool = ( ‘X’ == 0 ); // true or false?

この条件式はどうなるだろうか。実はこの「==」演算子の挙動は、php7.4で変更されている。

php7.4やphp8で追加されたり変更されたりした箇所は多く、こうしたエッセンシャルな部分にも及んでいる(このあたりが第4版での主たる加筆分のようだ)。本書は、こうした「最新のphp」を、入門書よりも深く学べるように書いてある。

phpは公式リファレンスが充実しており、また、構文も非常にわかりやすい(と思う)ので、このような本は必要無いと思う方も多いかもしれない。実を言うと、私もこの本を手にするまで、自分のphpの知識では、この本から学ぶことはそう多くはないのではないかと高をくくっていた。本書を手に取ってパラパラとめくった感じでは、その予感は的中したかに思われた。しかし、一から読んでいくうちに、その認識は変わっていった。php7.4やphp8で、結構、知らない拡張や変更が多く成されていたのだ。

phpはハードルが低い反面、なかなか綺麗なコードが書きにくいという裏の面もあるため、本書が紹介する「最新のphp」を学び直し、よりコンパクトで安全なコーディングができるようになると素晴らしい。特にphp8はJITを搭載して実行速度が一段と速くなっており、最新のphpを知る事で「速い・短い・わかりやすい」プログラムが書けるようになる。


もちろん、プログラムは、コンパクトに書けば良いというものではなく、これは本書でも「こうも書けるがオススメはしない」という紹介の仕方もされている。人によっては二項演算子の使用すら拒む人も居るので、どこまでコンパクトに書けば分かりやすいかはその時々で変わるが、私は標準的な記法内であればコンパクトな書き方が好みである。ただ、このあたりは参加するプロジェクトによっても基準が異なるため、実践では色々な書き方を熟知しておけば、どんなプロジェクトに参加しても困らないようになる。

「phpを書ける」から「phpを仕事に使える」までステップアップされてくれるのが、この「独習php 第4版」だ。本書の導入部分にはモダンな環境構築にページが割かれており、標準クラスライブラリでは、豊富なライブラリをきちんと管理する方法も紹介されている。また、データベース連携の章ではMySQL(MariaDB)の基本的な知識を、RESTクエリの章ではHTTP通信の基本的な知識を紹介するなど、入門書よりはより実務レベルの知識を教えてくれる。もちろんこれだけで幅広いphpの周辺技術を理解することはできないが、phpから使う上で必要な仕組みは理解できるレベルで書かれている。より深く学びたい場合は、本書で得た知識をとっかかりに専門書を揃えたら良い。

「オブジェクト指向」の章では「phpは必ずしもオブジェクト指向で書かなくても良い」としながら、多くのページを割いて説明しており、これも実務レベルで非常に役に立つ知識であった。phpのクラスはC++のそれと似通った構造をしているが、phpならではの部分を詳細に紹介してあるので、他の言語でclassの使い方を覚えて、phpでもなんとなくでclassを使えてる人には、特に得るものが大きい。

他方、各章のおわりに「練習問題」があるのだが、資格試験の勉強ならまだしも、実務レベルを目指す本書にはややそぐわない印象を受けた。もちろん邪魔になるわけではないので、好みに合う人は確認がてら解いてみるのも良いかもしれない。私は、この本は入門書ではないので、一度読んだ後、自分なりに実務レベルを想定したコードを書きながら、リファレンスとして必要な箇所を読み返す使い方のほうが、より強力なバイブルとなる。


総じて、本書は650ページ近くあり、かなり分量が多い。しかし、読みやすくわかりやすい文章で、意外とさらさらと読める。ところが、サンプルコードから学べることも多く、サンプルコードもしっかり読み解きながらとなると、それなりにまとまった時間が必要だ。冒頭に挙げたようにphpはクソコードでも動いてしまう柔軟性があるため、綺麗なコードをじっくり見ることも実務レベルにステップアップするためには重要だ。命名や記法など、本書のサンプルコードは公式規約に則って書かれているため、これを真似て自分のコードバリエーションの幅を広くし、現場で活躍する基礎知識として欲しい。本書は、それを「独習」できる良書だ。

独習PHP 第4版