長方形に円を並べるという高校生の問題が難しかった
以下のツイートを見たことからはじまった。高校生の問題のはずなのに中々解けないというか、どのように手をつけて良いかわからず少しの間はまってしまった。 わからなかったので、勉強会で知り合いに聞いたりして、最後にはほぼ答えを教えてもらってなんとかとけました。よかった。。
この問題って有名な問題でしょうか?
— アラクー (@Arakur65536) 2017年5月31日
「偏差値72の高校の試験問題」だそうです pic.twitter.com/aYyy73Sel6
問題
一辺の長さがそれぞれ4,2000である長方形に敷き詰めることができる単位円(半径が1の円)の個数は2011個以上であることを証明せよ。ただし、敷き詰める円は互いに重なり合わないものとする。必要があれば1.9819<<1.982を用いても良い。
試行錯誤
という問題で、普通に格子状に綺麗にならべたら2000個は並べることができるってのはすぐわかるんだけど、これよりももっと隙間なく並べることができるかっている試行錯誤がはじまるわけ。
3つずつ並べてみたり
3つの正三角形を組みにしてならべてはどうかと思うけど、2000個のやつよりもならばないし
対角線に一列に並べてみたり
もしかしたら対角線にならべて、その上と下にうまいことならべたら綺麗にならぶのかとおもったんだけど、1200個くらいしか並びません。
そんなわけで、最終手段として、少しずつ上下にずらしながら、ジグザグに並べたらどうなのかと思い浮かびます。
回答
こんな風にならべると、例えば下の行を見ると5の円を少しだけ上に並べることができるので、上の2000個の並べ方よりも少しだけ詰めて並べることができます。これはすごい。
直線に並べるよりも、どれだけ詰めてならべることができるか(=2-αとおく)は、上の図の5の球を少し上におくことでどれだけ詰めることができるかに帰着できるから
3と5の円の中心の位置を計算するために3と5を抜き出してして図にすると以下のように書くことができ
αを三平方の定理を使って求めるととなります。
三平方の定理を使った計算はこんな感じ。
22 = α2 + (2-)2]
α2 = 4 - (4 - 4 + 3)
α2 = 4 - 3
α =
これで、問題文で与えられていた「必要があれば1.9819<<1.982を用いても良い。」という条件と結びつくんですね。
一直線に並べると、円ある円の中心から隣の円の中心までの距離は2となりますが、5番の円を少しだけ上におくことで、隣の円とのx軸方向の距離は約1.982となり0.018くらいつめて置けるわけです。
このパターンで何個並べることができるか計算すると、2011個となります。
並べた画像は以下。
回答としては、以上となります。
ここからは、これまでの画像を作るコードとtwitterでのつぶやきのコピー
pythonのコード
円を描くコード
0から60を描くコード
1999から2011までを描くコード
やばい、高校の問題とけない笑、どうやって解こうかなー https://t.co/ClwcWUQIO1
— カレーちゃん (@currypurin) 2017年5月31日
RTの問題、こんな感じにまず対角線に並べて、その上と下に並べるのが答えかと思ったんだけど違うみたいだ。並ばない(笑 pic.twitter.com/JyOwKjXlVA
— カレーちゃん (@currypurin) 2017年6月3日
となると、微妙に上下にずらしてジグザグに並べるのが答えか。。
— カレーちゃん (@currypurin) 2017年6月3日
横長に長方形を置いて、左端から下辺に接するように上1:下2の円を並べる。その次は上辺に接するように上2:下2の円を並べる。その繰り返しをすると、
— nob (@nob_ymkw) 2017年6月4日
3*335+1=2011個置けますね。
あー、なるほどそういう置き方ですか!!ようやく置き方がわかりました。感謝です。
— カレーちゃん (@currypurin) 2017年6月4日
例の問題、とりあえず60個並べてみた。
— カレーちゃん (@currypurin) 2017年6月4日
PCの性能が悪いのか、pythonのコードが悪いのか500個以上円を描くと処理落ちする。
実際に2000こ並べることに意味はないけど、円に何個目の円かラベルをつけて並べることができたら、解答としてはわかりやすいかも。 pic.twitter.com/Rl8tmH8quk
この問題初見で、短時間で解ける人はなかなかいないとおもう。自分のばあいは1人でやってたら一生とけなかったかも笑
— カレーちゃん (@currypurin) 2017年6月4日
最密充填て分野に分類されるのかしら? https://t.co/U0fdF2k1QW
最密充填のなかでも、球充填て分野か。https://t.co/iUjeFKyhvf https://t.co/lkbKZ4gl76
— カレーちゃん (@currypurin) 2017年6月4日
最密充填って、そういえば高校の化学で少しやりましたね。
— カレーちゃん (@currypurin) 2017年6月4日
昔すぎて忘れていたわ。でも糸口があれば少しづつ思い出せるんだから、昔の記憶ってすごい。
一気に2000個の円を描く必要はなかったんだな。必要なところだけ描画する方法で、2011個並べることができました。
— カレーちゃん (@currypurin) 2017年6月5日
この方法で2012個目ははみ出してしまって、並べることはできなかったけど、並べることができないっていう証明はできるのかな? pic.twitter.com/Pz5L2PB8Bn
2011以上である証明に加えて、2012以外である証明もあるらしい。前者は出来たが、後者はどうするのだろう?
— nob (@nob_ymkw) 2017年6月5日
え、まだこの問題の続きがあるの。。。2012以下である証明か面白そう。
Rでサンプルデータを作成するのが難しかったので、作ってみた
一昨日の勉強会で、参加者全員でモデルに当てはまるサンプルデータをRで作ってみようとなった時になかなか良いサンプルを作れなかったので、落ち着いて作ってみる。 data-refinement.connpass.com
勉強会の内容と作成するモデル
勉強会の内容は、発表者のSSAS3さんが書いてくれたこれ。ランダム化実験が驚くほどよくわかってすごかった。 qiita.com
作りたいサンプルは以下の条件を満たすことだけで、あとは適当でOKという条件(少し勉強会のときから条件を変えています)
Y1(任意) | Y2(ランダム) | |
---|---|---|
作業手伝いなし | a | b |
作業手伝いあり | A | B |
a,b,A,Bはテストの点数の平均。
- a<A
- 任意にやらせると、準備が整っている生徒が作業をするので、作業ありの方が点数が高くなる
- b>B
- ランダムで作業をやらせると、作業なしグループは準備ができるので点数が高くなる
使う関数の候補
関数 | 概要 |
---|---|
rnorm | 正規分布に従う乱数を発生 |
runif | 一様分布に従う乱数を発生 |
sumple | 無作為抽出 |
round | 少数点以下を丸める |
floor | 少数点以下を繰り下げ |
ceiling | 小数点以下を繰り上げ |
練習
n <- 10 # クラスの人数を10人とする pre <- runif(n,min=-1,max=1) # 一様分布から乱数を作成 ceiling(pre) # preを切り上げて、0と1にする sample(c(1,0),size=n,replace=TRUE) #ランダムでトリートメントグループとコントロールグループに分ける sample(rep(c(1,0),times=n/2),size=n) # 半分ずつトリートメントグループとコントロールグループに分ける sample(rep(c(1,0),times=c(10,30)),size=n) #10人、30人のトリートメントグループとコントロールグループに分ける
サンプルデータ作成
library(dplyr) set.seed(2) NO <- 1:40 # 出席番号 pre <- runif(40,-1,1) # 準備ができているか Tvol <- ceiling(pre) # 準備ができていれば1で作業を手伝う、できていなければ0で作業を手伝わない y1 <- round(pre*20+70) +(1-Tvol)*sample(1:5,40,replace=TRUE) # 1回目の点数 Trand <-sample(c(0,1),40,replace = TRUE) # ランダムに作業手伝いを決める y2 <- round(pre*20+70)+(1-Trand)*sample(1:5,40,replace=TRUE) # 2回目の点数 sample1 <- data.frame(出席番号=NO,Tvol,y1,Trand,y2) # データフレームを作成 # 1回目の小テストをクロス集計 sample1 %>% group_by(Tvol) %>% summarise(n=length(y1),mean=mean(y1)) # 2回目のテストをクロス集計 sample1 %>% group_by(Trand) %>% summarise(n=length(y2),mean=mean(y2))
jupyterのファイルを下記にあげています。 他にもやり方が色々あるだろうから、コメントとか次の勉強会で教えてください。
緑本3.4.2(あてはめとあてはまりの良さ)のメモ
緑本を読んでいて、3.4.2のポアソン回帰の最大対数尤度のところで、つまづいたのでメモ。
- ある個体iの平均種子数 が
であると仮定
- リンク関数によって
- このモデルの対数尤度は
- 本のデータで最大対数尤度を計算すると-235.4ぐらいとわかります。
ってところが複雑な式だなぁ、実際にどの数字を使って計算すれば計算できるのかなっていうんで、本のデータで計算してみた。
# データの読み込み >d <- read.csv("http://hosho.ees.hokudai.ac.jp/~kubo/stat/iwanamibook/fig/poisson/data3a.csv") # GLMへの当てはめ >fit<- glm(y~x,data=d,family=poisson) Coefficients: (Intercept) x 1.29172 0.07566 # 最大対数尤度を計算 > logLik(fit) 'log Lik.' -235.3863 (df=2) # 最大対数尤度を上記の式で計算してみる >logL <- function(x,y) log({exp(1.29172+0.07566*x)^y}*exp(-(exp(1.29172+0.07566*x)))/factorial(y)) >sum(mapply(logL,d$x,d$y)) [1] -235.3863
ポアソン回帰で切片と傾きの最尤推定値が得られた後に、最大対数尤度を念のため計算してみて、logLik関数の結果と一致したという結果でした。
データ解析のための統計モデリング入門――一般化線形モデル・階層ベイズモデル・MCMC (確率と情報の科学)
- 作者: 久保拓弥
- 出版社/メーカー: 岩波書店
- 発売日: 2012/05/19
- メディア: 単行本
- 購入: 16人 クリック: 163回
- この商品を含むブログ (29件) を見る
2017年1月から3月の統計学学習計画
きっかけ
Niseiさんの以下のつぶやきに触発されて、勉強の計画と結果を書き記していくことにしました。とりあえず読みたい本が決まっている3月までの予定を書きます。4月頭にはどれくらい進んだかちゃんと報告したい。
久々にブログ更新 - 機械学習に本気で取り組むためにやった数学周り 前半戦結果 | きのこる庭ブログ https://t.co/r4Hc8c7C5g
— Nisei (@irration) 2017年1月22日
最終的な目標
- 統計とか機械学習を数学的なところから理解して、今後もずっと学び続けたい
- ガチで競馬の予想をやりたい
1月から3月の計画
1ヶ月間に1冊の本を内容を理解した上で読了することが目標。数学的にわからないところがあれば、なるべく統計学や解析学等の本を読んで理解を目指す。でも、完璧を目指すと時間がかかりすぎるので、どうしてもわからない箇所はメモって飛ばして、Rで何をやっているのみ理解することとする方針。先に進めばわかるかもしれないし、後で数学的な部分のみ復習しても良いので。 なお、1月分と2月分は途中まで読み進めているので、全く初めからではない。
1月 Rによるやさしい統計学
- 作者: 山田剛史,杉澤武俊,村井潤一郎
- 出版社/メーカー: オーム社
- 発売日: 2008/01/25
- メディア: 単行本
- 購入: 64人 クリック: 782回
- この商品を含むブログ (68件) を見る
2月 統計学:Rを用いた入門書
- 作者: Michael J. Crawley,野間口謙太郎,菊池泰樹
- 出版社/メーカー: 共立出版
- 発売日: 2016/04/08
- メディア: 単行本
- この商品を含むブログ (4件) を見る
3月 多変量解析法入門
- 作者: 永田靖,棟近雅彦
- 出版社/メーカー: サイエンス社
- 発売日: 2001/04
- メディア: 単行本
- 購入: 2人 クリック: 9回
- この商品を含むブログ (1件) を見る
反省
9月に 本当のR初心者がRを始める際の順序(随時更新) - R、統計学、人工知能を書いたのですが、進捗が悪かったので反省の意味も込めて書きました。途中でpythonにうつつを抜かしてしまったので、pythonはとりあえずお休みして、統計学とR勉強して、多変量解析までやってしまいます。
ウマナリティクス #2の資料のまとめ
ウマナリティクス#2で発表があった資料とか、言及があったページのまとめです。後で見返す時ようにまとめ。
トータライザー
競馬とプロスペクト理論:微小確率の過大評価の実証分析
https://www.jstage.jst.go.jp/article/jbef/7/0/7_1/_pdf
ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』
#1 ランキング学習ことはじめ
ウマナリティクス#2で競馬の予想の仕方について喋ってきました
時代を超えた幻の有馬記念、開幕。
【夢の第11R】競馬AIによる時代を超えた幻の有馬記念
【夢の第11R】競馬AIによる時代を超えた『幻の有馬記念』
競馬予想でもAIの時代? 予想プログラムイベント詳報
【追記】
・2016.12.25 PAI競馬予測さんと、ネット競馬の記事へのリンクを追加
本当のR初心者がRを始める際の順序(随時更新)
統計ソフトの「R」ですが、初心者が学ぶ際にどの順序で学んでいった良いかを記載してみます。
私も本当の初心者で試行錯誤しながら一年で身に付ける!Rと統計学・機械学習の4ステップ - iAnalysis 〜おとうさんの解析日記〜を参考にして、初学者として学んでいます。1年でこの記事のステップ4まで到達することが目標です。おすすめのがありましたら、コメントもらえると嬉しいです。
1 Rのインストール
まずは、インストールしないといけないということで、
などは見ながらインストールします。インストール自体は難しくないし、インストールすればすぐに使い始められます。
2 ドットインストールで動画ではじめてみる
Webページとか、書籍とかで「絶対できる入門」とか「初心者のための」とかわかりやすそうな題名のページがあるじゃないですか。でも本当の初心者だと少し敷居が高いんですよね。
その点、ドットインストールのR言語入門(全13回)なら、実際に動かすところを見ながら自分もRを動かしてみることができるので、オススメです。約3分×全13回で変数、ベクトル、行列、リスト、データフレーム、グラフの描画などと一通りやれるのでとっかかりとしてはすごくわかりやすかったです。
2’ 「ゼロから始めるR―四則演算から多変量解析まで」を読む
ドットインストールの動画を見るのが億劫だったり、書籍の方が馴染みやすかったらこの本をやるのもいいと思う。本当に基礎的計算や統計分析、グラフの描き方などから、多変量解析の触りまで一通りのことを教えてくれるから。この段階で挫折することはないはず。自分は2も2’も両方やったけどすんなりいけました。
時間のない人とか、ある程度知識がある人は2の段階はすっ飛ばせそう。問題は次の3から。
3 「Rによるやさしい統計学」でRを使いながら、統計学を学ぶ
「"Rで"統計学の初歩を(独学で)勉強できるような本」というコンセプトで書かれた本です。コンセプト通り第1部の基礎編と第2部の応用編で統計の基礎的なことを学ぶことができ、実例を踏まえ易しく書かれているので、初学者でも十分読むことができる。
多分この本を終えた段階で、統計学の本を読むと理解が進むと思っており、どの本をお勧めできるかは検討中。
- 作者: 山田剛史,杉澤武俊,村井潤一郎
- 出版社/メーカー: オーム社
- 発売日: 2008/01/25
- メディア: 単行本
- 購入: 64人 クリック: 782回
- この商品を含むブログ (68件) を見る
この本に以下の記載があり、よくわかる心理統計を一緒に読むと効果が高まるようです。
「本書の内容は『よくわかる心理統計』の内容を取り上げています。」(中略)手元に『よくわかる心理統計』をおいて副読本として利用していただくと、さらに効果があるとおもいます(すでに『よくわかる心理統計』を読み終えたという方には、本書が演習のためのテキストとして十二分に効力を発揮するでしょう)。
よくわかる心理統計 (やわらかアカデミズム・わかるシリーズ)
- 作者: 山田剛史,村井潤一郎
- 出版社/メーカー: ミネルヴァ書房
- 発売日: 2004/09
- メディア: 単行本
- 購入: 12人 クリック: 108回
- この商品を含むブログ (29件) を見る