blogトップブログ更新情報や気づいたことなどいろいろと発信していきます。(2019/9/4)今回は「どの程度1年で雨は降っているのか」について調べてみました。具体的に調べるとなると、地域差と年の差がありますので、2018年の東京に限定して議論をします。以下の実験データには、筆者のデータの読み間違いや、プログラムミスによって正しい値が出ていない可能性があります。簡単のため連続して雨が降っていると認識します。最長連続降水時間となります。最長連続降水時間となります。上の表をみると、一日中降り続いている雨というのはなかなかないようです。6時間以上の連続降水日でもすでに、36日しかありません。1年でどの程度雨は降っているのか上の表から、1時間以上の連続降水をみると117日間あることが読み取れます。「人間が感知できる雨が全く降っていない」ということにはなりません。1時間0.5mm未満の雨が降っている可能性はあり、少量でも短時間に集中していれば激しい雨に感じることもあり得ます。したがって、人間が感知できる雨が降った日はもっと多いと思われます。体感としては、むしろ雨があった日が117日もあるなんて多いなと感じるかもしれません。1年間の時間の割合で降水があった時間数(データ上0.5mm以上)を考えると意外に少なく、全体の約7.6%しかありません。過去3年分のデータを調べてみても、この値に大きな違いはありませんでした。1779mm2016年の年間降水量は2017年に比べて大きいですが、それでも、降水があった時間の割合はほとんど変わっていないのは少し不思議です。(2019/8/29)漢字パズルプログラムを作りました。「こちら」で試すことができます。夏目漱石の小説から連続する2字の漢字を取得して、問題をランダム生成します。ランダム生成ですので、漢字パズルとしての完成度はあまり高くありません。していくつか実験してみると、夏目漱石の語彙力の高さを実感せずにはいられません。どちらが勝つのか、あるいは引き分けになるのかという問題があります。この問題は、もし全ての手順を網羅すれば解決できますが、将棋のような複雑なものになると、指し手の総数が大きすぎて、すべてを解析することは困難です。将棋や囲碁では問題が難しすぎるので、ここでは三目並べ(〇×ゲーム)について考えます。三目並べは、コンピュータで解析するまでもなく、最善を尽くせば、引き分けになることが知られています。パソコンを使えば完全解析可能なレベルですが、網羅する方法は複雑化した場合応用できないので、他の手段を考えます。勝率から究極的結果を予想することができるのか「先手勝率:後手勝率:引き分けの確率」の比から、究極的な結果(最善を尽くした結果)を予想することはできるでしょうか。1000局の対局結果が(先手勝率:後手勝率:引き分けの確率)=(800,150,50)となったとき、先手が勝ちやすいので、究極的な結果として「先手必勝」だと予想しても良いでしょうか。先手の勝率が高くなるのは、ゲームの特性を反映した結果とはいえません。したがって、対局結果から先手の勝ちやすさを測るには、先手を持った人と後手を持った人の棋力差がほとんどないのが望ましいといえます。人間同士の対局ではこの状況を作るのは難しいかもしれませんが、コンピュータであればある程度実現可能です。三目並べ100万局コンピュータの棋力を3段階に分けて、100万局ずつ対局を行います。レベル2に加えて、相手にリーチがかかっている場合はできるだけそれを阻止する手を選択する.他はランダム.Lv.1の結果まったくランダムな指し手で100万局指した場合の勝率は以下のようになりました。次の一手で三目並べられる手があればそれを指し、その他はランダムに指します。(約4%)Lv.3の結果レベル2に加えて、次の手で相手が3目そろえるのを阻止する手を指すようにします。しても阻止できない場合はランダムに指します。三つの値の比、(先手勝率:後手勝率:引き分けの確率)は、棋力に大きく依存することが見て取れます。完全にランダムではなくコンピュータの思考レベルを上げていけば、意義のある予想につながるかもしれません。同レベルのレーティング同士の対局者に限定して調べるのが、意義があるのではないかと思います。全体で考えるとお互いの結果が相殺してしまう可能性があるからです。「何目半」が妥当かどうかという判断は、「棋力」に依存して決めるのが妥当だという可能性もあります。するとですが、プロに限定しても上位層と下位層では適切なコミが異なるのかもしれません。注:三目並べの対局結果は、自作プログラミングによるものなので、数値は参考程度にお願いします。(2019/8/24)C#の拡張メソッドとして、doubleにMathクラスのメソッドを入れると便利ではないでしょうか。1;Console.WriteLine(x.Sin());というようにインスタンスメソッドとして使用でき、インテリセンスも有効に使えます。1;Console.WriteLine(x.Sin().Add(1).Sin());というように一つのメソッドチェインとして使用できます。以下は、$\sin(1+\sin(1))$の計算を行う、(usingディレクティブを除いた)全体のコードです。One投稿日:2019/8/24最終更新日:2019/9/4。