rewritemath's blog

rewritemath’s blog

これマシュマロ。質問も受け付ける(https://t.co/VfNWTuMqau)

将棋ソフト、詰むのに詰まさない時、バグとは限りませんよ

  • このソフト、詰みチェックしたらきちんと詰んでるのに、詰まさないやん!弱いの?
  • とか、このソフトは詰みが読みきれない時があるから弱いでござる(笑)
  • とか、これくらいの詰み、詰みチェックにかければ一瞬で詰むのに、なんで詰まさないんや?バグ?

 

とか思ったことがある人へ。

 

バグだと騒ぎ立てるのはちょっと待って!バグじゃないかもしれませんよ!

 

 

原因1:256手ルール

256手で引き分けになるルールがあるんです。そのルールによって引き分けになるのを回避するために開発者の方が工夫をされている場合があります。

 

例えば、王手ラッシュを食らうと手数が長くなって引き分けに持ち込まれかもしれません。それを回避する手順があるかも。

他にも、詰ますより必至をかける方が手数が短くなる場合は、そちらを選択するかもしれません。王手のかからない玉型であれば尚更ですね。

詰ます手順は短い方を選択するというソフトはあると思います。

王手の連続で詰まさなくても勝ちが決まっている場合は、短い方を選ぶかもしれません。

原因2:枝刈りしちゃった(*ノω・*)テヘ

枝刈り、つまり、一定以上先の局面で詰みが見つかるような場合ですね。

それまでの手順に、駒を大量に捨てる手順がある時

途中で評価値の低い局面を経由する時

 

枝刈りしちったのかもしれません

 

原因3:詰まさないようにした方が強いもん

Aperyさんとかそうですね。今はどうか分かりませんけど。

@HiraokaTakuyaさん

https://twitter.com/HiraokaTakuya/status/708682048441942016?s=09

詰むかどうかを計算する時間があったら、他の手を読んだ方が勝率があがるんじゃ〜!

ということもあるみたいなんです。

 

原因4:詰みルーチンない、搭載面倒

そのまんまです。詰みを確認するルーチンをくっつけると詰みに強くなりますが、それをしないがために読み抜けるというパターンです。

 

終わりに

どうだったでしょうか。コンピュータにとっては、全体としての勝率が大事ですし、ルールによっては最適な戦略が異なります。

開発者の考え方も反映されているでしょう。

ソフトの癖なのかもしれません。

詰みが発見できないのは、バグだけが原因とは限らないんです。

そう思うと、開発者さんの苦労に思いを馳せて、詰ます事のできない時にも、優しくソフトを見守ってあげられるんじゃないでしょうか。

それでは〜

エヴェレットの多世界解釈の解説

量子力学の観測についての解釈の一つ。
人は、物体をを観測する時、主に光の反射でそこにものがあることを知ることができる。これは、機械にとっても同じだ。
もっと細かく見れば、光子という光の粒をぶつけて、それが帰ってくればそこに物があることになる。
何をぶつけても物があることは分かるのだが、帰ってこなければ仕方がない。ぶつかってくるまでの時間が早ければ、ものは近いことになる。遅ければ、遠いことになる。
大きい物をぶつけてしまうと、ぶつけた先のものがそれより小さい場合にそれを弾き飛ばしてしまって、帰ってこないかもしれない。
だから、ぶつける物は小さいものがいい。
ぶつける物の中で一番小さく、軽いものが光子である。
だから、光子は基本的に物の中での一番ちっさいから、帰ってくるものである。
つまり、帰ってきやすいから、そこにものがあることを知るためにぶつける物は、光子が最適ってこと。

さて、光子をぶつけてそこに物があることがわかるのは、ぶつかることによって光子が帰ってくる時間と方向が決まるからである。

じゃあ、帰っこなかったらどうだろう。何もわからないね。
光子よりちっさいものがあったら、それがそこにあるかどうかは、わからない訳だ。
光子と同じ大きさのものがあったら?弾き飛ばしてしまうね。
弾き飛ばしてしまったら、光子が帰ってきたとしても、もともとあった場所は分かっても、今どこにあるかは分からないんだ。

他にも、物があるかどうかを音等の波で確認する方法もあるが、その方法でも同じだ。弾き飛ばしてしまったり、そもそもそんな小さいものが相手じゃ波=振動は帰ってこない。


量子を扱う学問では、これが問題なんだ。
そこに物=量子があるかどうか確かめたいとする。
でも、光子をぶつけて、帰ってきたら、そこにあったことは分かるけど、今どこにあるのかは全く分からない。そもそも、吹き飛ばして光子が帰ってこない場合だってある。

だから、今、何処に、量子があるかは観測できないんだ。


これが量子の観測問題


代表的な量子には、光子や、電子なんかがある。

原子の周りを回っている電子も、同じようにどこにあるかは分からない。

 

どこにあるかが分からない物だけど、例えば原子の周りを回っているわけだから、その辺の何処かにあるってことは分かるわけだ。
だから、量子を扱うときは、その曖昧な状態を、確率で示すことになっている。

この辺に、このくらいの確率である。

そんな感じで示すんだ。


放射性元素について、その崩壊がいつ起こるかという問題がある。
放射性元素は、状態が不安定だから、いつか壊れて、そのままの状態を保てなくなる。
その時に飛び出す破片が、放射線になる訳。

放射線元素がそこにたくさんあったとして、それを、旗を挙げる人で例えよう。

旗を上げてって言った時に、皆が50%の確率で手を上げるとする。
一人の人が、その時旗を挙げるかどうかは中々分からないね。
でも、その人が1万人居て、何人が旗を上げるかっ考えたら、大体半分の5千人だ。

確率が分かると、多くの母体がある場合の大体の結果がわかる。


その人が2回に1回の確率で旗を上げる人だと分かっていて、その人が次に旗を挙げる人かどうかを考えたいとしよう。

こういう時、その人をどう見るのかというのが、量子力学観測問題の課題になる。

量子力学の時この課題は、物体が粒子か波かという様な話になる。

この人が旗を上げる人かどうかっ考えよう。
答えの1つは、
この人は半分は旗を挙げる人、半分は旗を挙げない人っていう、両方の性質を持った人だ!
って答え。

答えの2つ目こそが今回言う、多世界解釈
この人と同じ人は別の平行世界(パラレルワールド)にも居て、この世界の人が旗を挙げる人なら、他の世界のこの人は旗を挙げない人なのさ!

という解釈の仕方。

旗を挙げる人を見た時の反応は、

1だと、この人は旗を挙げる人だったんだ。
2だと、別の世界のこの人は旗を挙げない人。この世界の人は旗を挙げる人だったのね。

という解釈になる訳。

多世界解釈による、『君の名は』の考察、解釈

今後連載として書いていくことになるので、更新をちょくちょく待っていて欲しい。

以下にて、更新情報を残すのでお待ち下さい。

https://twitter.com/ritomath01_05?s=09

第一回は、エヴェレットの多世界解釈の解説である。ということで次の記事がそれになる。

エコキャップとかレジ袋削減とかに潜む悪

皆様、エコとか、資源のムダの削減とか聞いて、何を思いますか?

善意が産んだ悪ほどに悲しいものはないのです。

 

 

  • エコキャップでワクチンを買って子供を助ける
  • プルタブを集めてリサイクルすれば車椅子が作れる
  • 袋忘れたから(レジ袋買いたくないし)車で家に取りに戻らなきゃ

あぁ…

 

もしこれらのどれかに同調するのであれば、もう少し貴方は物事を考えて下さい。

 

例えばエコキャップ運動

 

私、学校でキャップを洗ったり、分別したりする手伝いをさせられたことがあります。

三時間くらい掛けて、数百のエコキャップを洗ったでしょうか(キャプの形状はかなり凹凸があるので、洗うのは大変です)

たった数百です。三時間くらい掛けて、まぁそこそこの労働です。

 

さて。数は覚えていませんけれども、仮に800個だったとして話を進めさせていただきます。(実際は当然もっと少ない)

 

HELLO FIVE eco エコキャップ運動

このページによれば、

ポリオワクチン(小児麻痺)は一人20円で、約800個のキャップが必要になるのだそうです。

幾つかの情報源から調べましたが、500~900まで、幅広い数が見られました。800強と考えるのが良さそうです。

 

今、どう思ったでしょうか。え?どうとも思わない?

もう一度いいます。一回20円、必要なキャップは800個(漢数字と算用数字の表記ゆれは気にしないでください。)

さて、配送料はいくらになるんでしょうね。人件費はいくらになるんでしょうね。

 

ボランティアが人権費なんて言うなとお思いの方は、この画像もみてくださいな。

NPO法人エコキャップ推進協会 – 「キャップを捨てるのはもったいない」-これがキャップを集め始めた”きっかけ”です

から持ってきました。

 

f:id:rewritemath:20170228122654p:plain

雇用創出とは一体…

賃金が発生しているんでしょうか。800個仕分けて20円になるんですが、それでも、賃金は発生しているのでしょうか。

賃金がその中から発生しているとすれば、どれだけ低賃金で働いているんだ…労働者はひどい搾取を受けているとしか考えられないんだが…。

 

他にも黒い噂は絶えませんが…

www.itmedia.co.jp

この問題では、同日付けの朝日新聞が、同協会がキャップの売却益があるにもかかわわらず、ワクチン代を寄付していないことが分かったと報道。記事によると、同協会の矢部信司理事長は事実関係を認め、「(キャップを集めている協力者を)裏切り申し訳ない」と話したという。

 

どうあれ、回収効率が以上に悪いのは確かです。他のバイトをして、一時間働いて900円とします。それを寄付すると、900÷20×800=36000個分のキャップを寄付したことになります。

ジュース一本150円と仮定して、ジュース換算で540万円分になりますね。ジュース一本我慢して、それを寄付すると、キャップ800×7.5=6000個分の寄付になります。

これをどう考えるかは自由ですが、どう考えたって資源の無駄遣い(輸送用の石油とか)をしてしまっているのはエコキャップ運動側なんですよね。

どういった切り口で見ても、明らかに無駄なことしてんなって思うわけです。

 

 

 

ここまで言えば、プルタブとかレジ袋とかについても、あれ…おかしい…と思えるでしょう。

 

 

実は、CO2の排出削減だって、もっと効果的な方法があるんです

 

f:id:rewritemath:20170228124848p:plain

 

こんな(先ほどと同じサイト)無駄なことしなくても。

 

例えば、今ではもっと全然安いですけれど、最高価格でも、1トンの排出枠が4000円です。

カーボン・オフセットというんですが誰かが削減したCO2を、自分が削減したことにする権利が買えます。CO2が1トンで、現在は1000円を切っているはずです。

 

日本人は、年間で一人あたり10トン排出している事になっています。(工場とかの排出も割り振られているので個人としてはもっと少ないが)1万円分です

4-7 一人当たりの二酸化炭素排出量(2014年度) - JCCCA 全国地球温暖化防止活動推進センター

ここによれば、一人あたり2200kgの排出だそうです。

 

つまり、(一般家庭平均、工場とかは除く)一人200円ほどでCO2を排出していないことにできる計算ですね。

 

ちなみに今日(2017/02/28、午後1時42分)の排出量先物価格は、1トンあたり5.20ユーロで、日本円にすると620円でした。

ここから家庭あたり2200kgの排出として排出権を仮に購入しますと、年間136円であなたのCO2排出量はなかったことにできます。安い。安すぎる。

 

 

要するに、効率のいいところで削減するのが一番いいってことです。それだけじゃあ罪悪感があるって人は、ほんの少しだけ出資して、例えば排出権を買ってみてもいいかもしれませんね。

エコキャップ運動に参加しないことに罪悪感があるなら、少しだけ寄付してみるのもいいんじゃないでしょうか。

 

 

殆ど貢献していないのにいいことした気になっている人より、全然いいことしたことになりますよ。

 

正義は必ず勝つについての新しい解釈

正義は必ず勝つ、というのは、昔から言われている定型句のように思います。

この言葉についての一般的な解釈としては、正義が勝つのは、そうやって製作者が作品を作るのが一般的だからというのが有力と見られているのではないでしょうか。

 

無論、この言葉の解釈について、正しい解釈などあるはずもありません。

 

例えば、この言葉を記録上最も言ったのが古い人、又はこの言葉が使われてそれが有名になった最初の場面、等々を調べて、その言葉の真意を尋ねれば、それらしい正しい解釈とかいうものが得られるかもしれませんが。

 

そもそも、とここから話が少し脱線するのでご容赦下さい。

そもそも、汎用的に使われるようになる言葉や、流行る言葉といいものは、概して多様な解釈を許す程には抽象化されています。

最初に言い出した人の真意はともかく、それが間違った解釈を伴おうとも、多くの場面で使われるようになる言葉というのは常に、それぞれの場面でそれぞれの場面に適した解釈の余地を残す言葉だということになります。

 

故に、特に言った人が分からない言葉なんかは、解釈や、使う場面は自由だとも言えます。

しかし、誰かの言葉として使う場合は、言い出した本人の真意とは違う用法で使われるようでは、本人も本意ではないでしょうから、一度は調べてみるのもいいと思いますよ。

 

あと少しだけ雑談を続けさせていただきますので御了承下さい。

汎用性の高い言葉が流行る、言い方を変えると、汎用性の高い言葉でなければ流行ることなど出来ない訳であります。

 

ここでその例として、一時期流行ったお笑い芸人のネタを一例に上げます。知らない方は温かい目で無視していただいて結構です。

 

  • そんなの関係ねえ
  • グー

 

…あれ、案外思いつかないものですね。思いつく方はきっとまだまだ思いつくだろうと思います。コメントして下さってもいいんですよ?

 

 

 

さて、正義は必ず勝つ、の話、本題に戻ります。

こういった解釈は如何でしょう。

 

正義は負けを認めない、正義の意思は死なない

 

 

例えばアンパンマン。一度痛い目を見て(敗北して)その後で勝つパターンになります。

というか、アンパンマンに限らず、正義の味方というものが活躍するものは大抵、悪が正義や正義の仲間に勝った後に正義に負けるというパターンです。

 

正義の勝利条件が悪を成敗することなら、悪の勝利条件は成敗されないこととなってしまいますが、これは悪があまりに不利ですね。

 

正義に対して、成敗される前に悪事をどれだけ働けるかで悪のスコアが決まり、ハイスコアである程正義は負けの度合いが高く、悪事を働く前に正義がそれを止めたら正義の勝ちだと仮定したなら、今度は殆どの悪は勝利していることになります。

 

 

そもそも、大衆にとっての、客観的な、社会的な悪とは、多数から嫌われる存在のことです。

嫌われる存在が大衆から排除されるとしたら、多勢に無勢、いつも少数派の悪は不利なのです。

ただでさえ不利なのに、正義に対する勝利条件はなく、敗北条件は厳しい。

 

悪が蔓延る世が中々作られない訳です。悪に共感する者はそもそも少ないというのも、戦力調達にマイナスですね。

 

それだけ条件の厳しい戦いでありながら、悪が一時世に蔓延ったとしても、敗北時にはこの戦いは正義が勝ったということにされてしまうのですから、そもそも悪と定義された時点で負けはほぼ決まったようなもんです。

 

悪がこれだけ不利な条件なら、正義は必ず勝てるわけですね。

 

 

最後に、言葉の妙、そして、それが終わった途端に敗北だということをよく示している言葉を送りましょう。

 

 

禁煙なんて簡単だよ。何せ僕は、もう何回もやっているからね。

マーク・トウェイン

 

 

(一応解説など必要ないとは知りつつ、老婆心で解説致します。二度目の禁煙が出来るということは、禁煙の後またタバコを吸い始めているということです。それはつまり、一度目の禁煙に失敗したということ。禁煙など簡単だよと言いながら、繰り返し失敗を繰り返しているというジョークです。)

将棋ソフトから学ぶ指し手の選択と時間の使い方

はじめに

qhapaqさんのブログを参考にさせていただきました。

 

示唆に富んだ内容で大変参考になりました

 

読んだ方で、記事に意見や間違いの指摘等ありましたらコメント下さい

 

スターの仕組みとか全然わかってないんですけど、すこしずつわかってきたので、これからはちょくちょく、参考になった記事等には飛ばそうと思います。

qhapaq.hatenablog.com

 

 

数学的解説をしてもらっても実践に活かすのって難しいし感覚的にもわからないよって人向けに書きます。

 

まずは、人間の場合の将棋の時間の使い方戦略をいくつか提示します

 

  • 定跡を覚えて序盤に使う時間を減らす
  • 終盤力、特に詰将棋をつける
  • 読みの力(短い時間で多く読む力)をつける
  • 定跡を覚えていないかつ相手は定石を覚えている場合は定跡と離れた局面に誘導することで、お互いに知らない局面にして、相手にも時間を使わせる

こういった戦略が考えられます。

 

今回考察するのは、自分が知らない局面が続くときに勝率を向上させる方法です。

 

再度いいますが、先ほど貼ったリンクの記事の解説を感覚的に解説するのがコンセプトです。

 

前提確認

 

はじめに前提として、関数というのは、ある値を受け取って、別の値を返すものです。

 

今回受け取る値は、持ち時間です。

関数が吐き出す値は、一手に使う最適な時間です。

 

仮定

  • 正確な指し手を選択した局面が多いほうが勝てると仮定する
  • その仮定から、正確な指し手を選択した局面が多いほうがよいとする
  • 読む時間が短いうちは指し手の正確さはかけた時間に比例する
  • 読む時間が長くなってくると時間に対する効果が薄くなってくる

 

論理的な展開

時間を効率よく使っていないとする

その状態では、無駄に時間を使っている局面Aが存在する

Aで使う分の時間を別の、時間を本来使うべき局面Bで使えば、勝率は上がる

 

よって

最適な時間の使い方をしている場合、どの局面でも、使う時間が生み出す、勝率を上げる効果は変わらない。

 

 次に、ある局面で、

時間 対 勝率を上げる効果=正しい手を導ける確率の上昇効果

 

が、どの程度か予測する

 

1.難しい局面ほど正しい手を導くのが難しい、長く読めば長く読むだけ効果が出る。

 

2.簡単な局面では長く読んでもあまり効果は変わらない。

 

と思われる。

また、どんな局面でも、

 

一定以上読むと分岐が膨大になり読みきれない

忘れる

 

ということが言える。

 また、一定以上読むと、時間をかけてもあまり正しい手を選べる確率が変わらないというところに段々と近づいてくる。

 

戦型によって、総手数が変化するので、一手に使える時間の量は変わる

 

人間が指す将棋の前提として一応、

ある一手を間違えた時に評価値がどのくらい下がるのかを考慮し、下がりやすい局面や上がりやすい局面では長く考える

序盤は短めに、終盤は長めにした方がいいことが多い

 

結論

 そこで、戦略としては、

 

  • これ以上読んでもあまり指し手の正確さは変わらないと思ったら後に時間を残す
  • 簡単な局面では短めに、難しい局面では長めに考える
  • 長い戦いになる戦型の場合は、少し早めに指す
  • 戦型から事前に終局までの手数を概算しておいて、一手にかけることのできる時間を計算し、その計画にできるだけ沿って時間を配分する

 

ということがソフトから学べるだろう

 

また、人間としては、

  • 序盤は少し早めに指す(定跡を覚えると早く指せるようになる)
  • 終盤では時間をかける
  • 自分の得意な局面(指し手の正確さにプラスに働く局面)に誘導する
  • 定跡を覚えずに力戦を目指す人=序盤で相手に時間の差をつけられないように定跡を外す
  • 定跡を覚えて押し切ろうとする人=指しての広い(定跡を外されにくいはず)局面に誘導する

 

 といった戦略があるだろう

 

 

まだまだ体系的に文章としてまとめるには研究が不足しているし、細かい技術的な話をひたすら避けようとしたら結局袋小路に迷い込んでしまったのではないかとの懸念もあるが、ひとまずここで区切りにして発表した次第である。

 

参考になるかどうかはわかれるかもしれないが、とりあえず最後まで目を通していただいてありがとうございました

カラーコードを簡単に利用する方法

Google先生のお陰で、なんとGoogleの検索窓で簡単にカラーコードを利用できるようになりました。

 

CSS等々で利用するカラーコードを、色を見ながらコードを得られるわけです。

 

方法を簡単に解説しますと、Googleの検索バーに、まず、#000000と打ち込みましょうそうすればもう後は、感覚的に利用方法がわかると思います。

注意として、検索窓に打ち込むときは、半角にして下さい。

f:id:rewritemath:20170212192714p:plain

ぜひお試しあれ。