タダで投資

フィボナッチ数列は再帰関数の題材として適切なのか

フィボナッチ数列は再帰関数の題材として適切なのか
### Key:Valueが1:1のMapをListにする “`Kotlin:
// 1:1
val map = mapOf(“key1” to “val1”, “key2” to “val2”, “key3” to “フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか val3”)
// mapのすべてのvalueが格納される
val valueList = ArrayList(map.values)
var list: MutableList
list = ArrayList()
list.addAll(valueList)
“`
### 1:フィボナッチ数列は再帰関数の題材として適切なのか 1のMapを条件分岐でListに格納する “`Kotlin:
val map = mapOf(“key1” to “val1”, “key2” to “val2”, “key3” to “val3”)
val valueList = ArrayList(map.values) // フィボナッチ数列は再帰関数の題材として適切なのか key1のvalueがarray変数に格納される(“val1”)
var araay = map.get(“key1”).toString(

余は満足ぢゃ

主に英語のrecursionとその派生語の訳にあてられる。他にrecurrenceの訳(回帰#物理学及び再帰性を参照のこと)や、reflectionの訳(再帰代名詞、再帰動詞。また、社会学で、対象に対する言及がその対象自体に影響を与えること(en:Reflexivity (social theory)))として「再帰」が使われることがある。数学的帰納法との原理的な共通性から、recursionの訳として数学では「帰納」を使うことがある。

1 再帰呼出し
1.1 再帰呼出しの例
2 類似した概念
3 関連項目 フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか
3.1 一般
3.2 数学
3.3 計算機科学
3.4 日常社会
3.5 文芸

再帰呼出し(さいきよびだし、英 recursive call)は、プログラミング技法の一つである。

処理を中断・終了する条件(下の例では引数 n の値が 0 である場合)が必ず一つは必要で、その部分が誤っていると、無限に関数を呼び出し続けることがある(→暴走)。

/* 階乗 フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか n! を計算する */
int fact(int n)
if (n == 0) return 1; /* 脱出条件。0! は 1 である */
return fact(n フィボナッチ数列は再帰関数の題材として適切なのか - 1) * n; /* n! は (n-1)! に n を乗じたもの。再帰呼出し */
>

JavaScript (ECMAScript) での例:

function fact(n) return n ? n * fact(n - 1) : 1;
>

// JavaScript では arguments.callee プロパティ(自分自身を指す)
// によって、無名再帰を書くことができる。
var fact = function(n) return n ? n * arguments.callee(n - 1) : 1;
>;

;;; 階乗 n! を計算する
(defun fact (n)
(or (and (zerop n) 1) ; 脱出条件。0! は 1 である
(フィボナッチ数列は再帰関数の題材として適切なのか * n (fact (1- n))))) ; n! は (n-1) に n を乗じたもの。再帰呼出し

Rem 階乗 n! を計算する
Function fact(n) As Long
Dim n As フィボナッチ数列は再帰関数の題材として適切なのか Long
If n = 0 Then ' 脱出条件
fact = 1 ' 0! は 1 である
Exit Function
End If
fact = fact(n - 1) * n ' n! は (n-1) に n を乗じたもの。再帰呼出し
End Function

function fact(n : integer): integer;
begin
if n = 0 then フィボナッチ数列は再帰関数の題材として適切なのか
fact := 1
else
fact := fact(n - 1) * n;
end
end;

% 階乗 n! を計算する。解は第二引数に得られる。
fact(0,1) :- !. % !はさらに第一引数が -1,-2. と計算が進むことがないようにする備え
fact(N,F) :-
N_1 is N - 1,
fact(N_1,F_1), % Nから1を引いたN_1の階乗がF_1であれば、
F is F_1 * N. % 階乗は N に F_1 を乗じたものである。

数学的帰納法
再帰理論
帰納的集合
帰納的可算集合
帰納言語
帰納的可算言語
帰納的関数
原始再帰関数
漸化式

末尾再帰
分割統治法
ネスティング
再帰下降構文解析
再帰データ型
ハノイの塔 - プログラムの例題としてよく登場する。
リカーシブスローダウン

プログラミング フィボナッチ数列は再帰関数の題材として適切なのか
制御構造
数理論理学
計算理論

ゲーデル、エッシャー、バッハ

『ゲーデル、エッシャー、バッハ - あるいは不思議の環』(ダグラス・ホフスタッター著、野崎昭弘、はやしはじめ、柳瀬尚紀 訳、原題は Gödel, Escher, Bach: an Eternal Golden Braid)は1979年に米国で刊行された一般向けの科学書。単に GEB とも呼ばれる。

ダグラス・R・ホフスタッター 『ゲーデル、エッシャー、バッハ――あるいは不思議の環』 野崎昭弘・はやしはじめ・柳瀬尚紀訳、白揚社、1985年5月。ISBN 4-8269-0025-2。
ダグラス・R・ホフスタッター 『ゲーデル、エッシャー、バッハ――あるいは不思議の環』 野崎昭弘・はやしはじめ・柳瀬尚紀訳、白揚社、2005年10月、20周年記念版。ISBN 4-8269-0125-9。

Gödel, フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか Escher, Bach Resources(英語)

1979年の書籍
認知科学
科学書
アメリカ合衆国の哲学書
数学書
論理学書

1 起源
2 ドロステ効果の作り方
3 ドロステ効果の例
4 脚注
5 関連項目
6 外部リンク

ジョット・ディ・ボンドーネ作の三連祭壇画『Stefaneschi triptych』(1320年頃)の一枚に描かれた枢機卿ジャコモ・ガエターニ・ステファネスキ(Giacomo Gaetani Stefaneschi)は、当の祭壇画を聖ペトロに捧げている[4]。 フィボナッチ数列は再帰関数の題材として適切なのか
ピンク・フロイドのアルバム『ウマグマ』のカバー
ラムダ計算騎士団(Knights of the Lambda Calculus)

^ Nänny. Max and Fischer, Olga, The Motivated Sign: Iconicity in Language and Literature pp.37, John フィボナッチ数列は再帰関数の題材として適切なのか Benjamins Publishing Company, (2001) ISBN 9-027-22574-5
^ Törnqvist, Egil. Ibsen: A Doll's House, pp.105, Cambridge University Press (1995) ISBN 0-521-47866-9
^ Droste, altijd welkom
^ Giotto di Bondone and assistants: Stefaneschi triptych

再帰
自己相似
フラクタル
ハウリング
紋中紋

Escher and the Droste effect
The Math Behind the Droste Effect (article by Jos Leys summarizing the results of the Leiden study and article)
A moving picture with the Droste effect
Droste NV (Droste Cocoa corporate website)

自己相似

自己相似 (じこそうじ; self-similar) とは、何らかの意味で全体と部分とが相似であることをさす言葉である。

1 例
1.1 対数螺旋
1.2 植物
1.3 海岸線の長さ フィボナッチ数列は再帰関数の題材として適切なのか
1.4 インターネット・トラフィック
1.5 金融市場における価格変動
2 外部リンク
3 脚注
4 関連項目

カリフラワーの一種であるロマネスコは自己相似の様相を呈した花蕾をつける。
バーンスレイのシダ(Barnsley fern) - バーンスレイの考案したシダの葉の数学モデルは植物の葉の形状とよく似ている。

目盛スケールを G とすると、計測される海岸線の長さは おおよそ L(G)フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか =MG1-D となる。ここで、D はフラクタル次元である[1][2]。
インターネット・トラフィック

パケットデータ(Ethernet, IP, TCP, VOIP等)のトラフィックパターンは統計的に自己相似な性質をもつと報告されている[3][4]。

^ ブノワ・マンデルブロ, 1967, How Long Is the Coast of Britain? Statistical Self-Similarity and Fractional Dimension. Science, New Series, Vol. 156, No. 3775. (May 5, 1967), pp. 636-638. doi:10.1126/science.156.3775.636
^ PDF version from Mandelbrot's home page
^ Leland et al. "On the self-similar nature of Ethernet traffic", IEEE/ACM Transactions on Networking, Volume 2, Issue フィボナッチ数列は再帰関数の題材として適切なのか 1 (February 1994)
^ Next generation teletraffic and wired/wireless advanced networking: 6th international conference, NEW2AN 2006, St. Petersburg, Russia, May 29-June 2, 2006 : proceedings, p.236.
^ THE DYNAMICS OF FINANCIAL MARKETS – MANDELBROT’S MULTIFRACTAL CASCADES, AND BEYOND, Lisa Borland, Jean-Philippe Bouchaud,Jean-Fran¸cois Muzy, フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか Gilles Zumbach, February 2, 2008

短距離秩序、長距離秩序
反復関数系
自己アフィン性
自己相似過程
順位・規模法則
斉一次性: f(cx) = cf (x)

フラクタル
システム
数学に関する記事
形態

フラクタル
曖昧さ回避 この項目では、幾何学の概念について記述しています。テレビアニメについては「フラクタル (テレビアニメ)」を、榊原ゆいのアルバムについては「Fractal」をご覧ください。
フラクタルの例(マンデルブロ集合)

1 フィボナッチ数列は再帰関数の題材として適切なのか 定義
2 概要
3 フラクタル研究の歴史
4 フラクタルの例
5 生物とフラクタル
6 参考文献
7 関連項目

「不規則すぎること」に正確な意味が存在しない。
「次元」の定義が唯一でない。
物体が自己相似である方法がいくつも存在する。
全てのフラクタルが再帰的に定義されるとは限らない。

概要
The whole Mandelbrot set
Mandelbrot zoomed 6x
Mandelbrot Zoomed 100x
Mandelbrot Zoomed 2000x
マンデルブロ集合の2000回拡大
シェルピンスキーのギャスケットの構造のアニメーション(無限のうち9回まで)

始まりは、イギリスの気象学者ルイス・フライ・リチャードソンの国境線に関する検討である。国境を接するスペインとポルトガルは、国境線の長さとしてそれぞれ 987 km と 1214 km と別の値を主張していた。リチャードソンは、国境線の長さは用いる地図の縮尺によって変化し、縮尺と国境線の長さがそれぞれ対数を取ると直線状に相関することを発見した。このような特徴をフラクタルと名付けて一般化したのがマンデルブロである。

カントール集合
シェルピンスキーのギャスケット
コッホ曲線
高木曲線
ヒルベルト曲線
マンデルブロ集合
ジュリア集合
メンガーのスポンジ
ロマネスコ・ブロッコリー - 明確なフラクタル図形をした野菜。
バーニングシップ・フラクタル
リアプノフ・フラクタル

K・ファルコナー 『フラクタル幾何学の技法』 フィボナッチ数列は再帰関数の題材として適切なのか 大鑄史男・小和田正訳、シュプリンガー・フェアラーク東京、2002年。ISBN 4-431-70993-2。
Kenneth Falconer 『フラクタル幾何学』 服部久美子・村井浄信訳、共立出版〈新しい解析学の流れ〉、2006年。ISBN 4-320-01801-X。
B・マンデルブロ 『フラクタル幾何学』 広中平祐監訳、日経サイエンス、1985年。ISBN 4-532-06254-3。
B・マンデルブロ 『フラクタル幾何学』上、広中平祐監訳、筑摩書房〈ちくま学芸文庫〉、2011年。ISBN 978-4-480-09356-1。
B・マンデルブロ 『フラクタル幾何学』下、広中平祐監訳、筑摩書房〈ちくま学芸文庫〉、2011年。ISBN 978-4-480-09357-8。

ボックス次元(英語版)
フラクタル幾何
非線形科学
フラクタルアート - フラクタル地形
反復関数系
フラクタル圧縮
数学的な美
コルモゴロフ複雑性
オルバースのパラドックス
中心地理論
空隙性

フラクタル
コンピュータグラフィックス
世界観
数学に関する記事

映画については「ハウリング (映画)」をご覧ください。
宇都宮隆の楽曲については「Howling」をご覧ください。
abingdon boys schoolの楽曲については「HOWLING」をご覧ください。

ハウリング とは音に関する現象のひとつ。多くの場合トラブルと認識されているが、楽器ではこれを利用することもある。元々は英語で遠吠えの意味 (howling)。国内では「音が回る」「ハウる」と表現することもある。

1 マイクによるハウリング
1.1 フィボナッチ数列は再帰関数の題材として適切なのか 発生の仕組み
1.2 対処
2 その他のハウリング
3 その他
4 関連項目

これはスピーカーからの出力の一部がマイクに帰還されたことにより生ずる発振現象である。マイク、アンプ、スピーカー、音声、マイクという経路をたどる正帰還(英語で positive feed-back)が原因であることから「フィードバック」と呼ばれることもある。

ミキサーまたはアンプからの出力を下げる
マイクとスピーカーの距離を遠ざける
マイクとスピーカーの相対角度を変える
イコライザーで発振する周波数を減衰させる
リミッターを用いてハウリングが起きない音量を維持する。リミッターにはその他の過大入力によるスピーカーの破損から守る役割もある
ディレイを用いて 2 - 3 ミリ秒程度出力を遅らせる。これは擬似的にマイクとスピーカーの距離を遠ざける効果がある
ハウリング除去機能のあるデジタルプロセッサを使う(ハウリングの検知と上記の機能を自動で行う)。

レコード再生において、再生音の振動がスピーカから床や机などを経由してレコードプレーヤーに伝わり、カートリッジにまでその振動が及んだ場合、マイクと同様に正帰還が発生することがある。 フィボナッチ数列は再帰関数の題材として適切なのか
エレクトリックギターやエレクトリックベースにおいて、アンプの出力(演奏音)がボディや弦と共振し、ピックアップから検出されると正帰還が起きる。これを利用して意図的にハウリングを起こさせるフィードバック奏法がある。このフィードバックで得られる音の周波数(音程)が高くなり過ぎると耳障りな音になるので、ハウリングと読んで区別する。また、弦が振動しなくともピックアップ内のコイルが振動すると、ハウリングを起こし易い。この対策として、コイルを蝋に漬けて固める手段がある。高価なピックアップではよく行われている方法だが、音色も変わるのであえて蝋漬けしていない商品もある。
建築音響において、スピーカ等の発声と部屋の固有振動数が共振することをハウリングまたは「音が回る」と表現することがある。
テレビあるいはラジオの生放送に於いて、スタジオから視聴者(聴取者)に電話を架けるとする。視聴者がその放送の音声を聞ける状況にある場合、受話器がその音声を拾ってスタジオに返すと、正帰還が発生したり、エコーがかかっているように聞こえたり、あるいはSFの効果音のような音が発生することがある。このようなとき、しばしば司会者が「テレビ(ラジオ)の前から離れてください」「音量を下げてください」と指示するのは、正帰還のルートを断つためである(逆電参照)。

2005年10月

先日 日記で紹介した朗読劇団の方から、『賢者の贈り物』の発表が終わりました、 という丁寧なメールをいただきました。 「物語が演者やお客さんに楽しんでもらえたのも、これを版権自由の状態で翻訳してくださった結城さんのおかげです」 とのこと。結城も、とてもうれしいです。 「言葉がいろいろな人の間を色々にわたっていく、最近、そのことがひどく感動的なことに思えます」 と書いておられました。 結城もまったく同感です。

「賢者の贈り物」は、 山形浩生さんの「プロジェクト杉田玄白」に賛同して翻訳したテキストでした。 思い返せば6年前(!)のこと。 1999年のクリスマスに向けての活動でした。

  • 『賢者の贈り物』
  • 翻訳の部屋
  • プロジェクト杉田玄白の応援ページ 〜あなたも翻訳をしませんか〜
  • プロジェクト杉田玄白(山形浩生さん主宰)

■ 仕事 / みなさんからのメッセージを読む フィボナッチ数列は再帰関数の題材として適切なのか 2005年10月28日 10:08

朝は、 『改訂第2版Java言語プログラミングレッスン』 の掲載ソースリストの整理を進める。

みなさんからのメッセージをにこにこしながら(時にはしんみりとしながら)読む。 結城は、読者さんがどんな方なのかにとても関心があります。 集計しちゃうと消えてしまうような、 一人ひとりの「ごつごつ」や「さらさら」を大事にしたいと思っています。 なので、時間はかかりますけれどメッセージを「読む」のが大事かなと思っています。

『のだめカンタービレ』の人気がとても高いことがわかりました。 今度機会があったら読んでみようと思います。音楽の話なんですよね。 「カンタービレ」は「歌うように」だったかな。 「のだめ」って何だろう…。(追記:主人公のあだなとのこと)

「Rubyの本」を書いて! という要望がとてもたくさんありました。 例の「結城さんがRuby本を書くことを既成事実化しようプロジェクト(?)」 に加担している人の多いこと多いこと (^_^; こんな風に期待されるというのは、なんとも光栄なことだと思っています。 人数もさることながら、熱気がすごいなあ。ふうむ…。

「いつも日記を読んでいますが、この機会に感想を送ります」 フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか という方もたくさんいらして、うれしくなりました。 結城の活動を応援してくれるみなさんに感謝し、 結城の命を支えてくださる神さまに感謝します。

■ 『改訂第2版Java言語プログラミングレッスン』無料プレゼント抽選 2005年10月28日 00:00

2005年10月28日 07:18 頃、 『改訂第2版Java言語プログラミングレッスン』 無料プレゼントの抽選を行ない、当選した7名の方に連絡のメールをお送りしました。

申し込み人数は97名でした。 多数の申し込みをありがとうございます。 残念ながら当たらなかった方、本当にごめんなさい。

抽選は、結城の恣意的な操作が入らないように (応募者の名前を見て判断することがないように)、 一覧表を作ったうえで、プログラムを使って当選者を抽出しました。

  • 『改訂第2版Java言語プログラミングレッスン』無料プレゼントのお知らせ
  • 『改訂第2版Java言語プログラミングレッスン』

2005年10月27日

■ 夜 2005年10月27日 20:16

『改訂第2版Java言語プログラミングレッスン』の無料プレゼントの申し込みは、 現在90名になりました (@[email protected]) 。たくさんのご応募ありがとうございます! はげましの言葉やアドバイスもありがたく読ませていただいています。

  • 『改訂第2版Java言語プログラミングレッスン』無料プレゼントのお知らせ
  • 『改訂第2版Java言語プログラミングレッスン』

■ 本 2005年10月27日 10:18

■ 朝 2005年10月27日 06:55

2005年10月26日

■ 夜 2005年10月26日 22:42

『改訂第2版Java言語プログラミングレッスン』の無料プレゼントの申し込みは、 現在67名になりました。たくさんのご応募ありがとうございます。 応援のメッセージもすごくうれしいです。

  • 『改訂第2版Java言語プログラミングレッスン』無料プレゼントのお知らせ
  • 『改訂第2版Java言語プログラミングレッスン』

■ 自分の理解を確かめて学習するということ 2005年10月26日 10:02

道を歩きながら、最近学んでいることを頭の中で復習する。 コンピュータを開いてから、さっき歩きながら復習したことを文章として書く。 書いた文章を読み返すと、あちこち理解が怪しい箇所が分かってくる。 そこに印を付けておき、その疑問を解決すべく調べ物をする。 少し調べても、わからないことが多い。 そうしたら、疑問に思ったことを文章の形にして残しておく。 疑問に思ったことの解答に後から出会うこともある。 そのときには、解答をそこに文章として書いておく。 要するに、文章を使って学習を進めているのだね。

学習するとき、特に独学しているときには 「自分が本当に理解している」ことを確認するのが大事だ。 では、どうやれば自分の理解を確認できるか。

その題材について「A. わかりやすい文章を書くことができる」ならば、 フィボナッチ数列は再帰関数の題材として適切なのか 「B. 理解している」といえる。

文章を書くことは、テストをしているようなものだ。 テストドリブンなソフトウェア開発ならぬ、 テストドリブンな学習ということだ。

ところで(何度も日記で書いている話だが)、 文章を書いて自分の理解を試そうとした場合、もっとも重要なのが 「わかったふりをしない」ということだ。 「わかったふり」は、非常に学習の邪魔になる。

わかったふりをする・しないというのは、習慣の問題でもある。 いつもわかったふりをしていると、それが習慣になってしまう。 いつも「私はほんとうにわかっているのかな? 自分の言葉で説明できるかな?」という態度をとっていると、 学習効果は非常に高くなる。

わかったふりをするかどうかは、意外なことに(いや、意外じゃないかな)、 自分の心の状態や人間関係にもかかわる。 いつも虚勢をはったり、他人に対して偉そうなそぶりを見せないと自分自身の立場が危ういと感じている人は、 「わかったふり」をしてしまう可能性が高い。 「そんなことは知っているよ」という態度をとらないと馬鹿にされる、 と恐れている人は学習の機会を逸する危険性が高い。

■ 朝 2005年10月26日 07:15

『改訂第2版Java言語プログラミングレッスン』の無料プレゼントの申し込みは、 フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか 現在39名です。ありがとうございます。 〆切は明日(木曜日)です。

  • 『改訂第2版Java言語プログラミングレッスン』無料プレゼントのお知らせ
  • 『改訂第2版Java言語プログラミングレッスン』

2005年10月25日

■ 日記ダイジェストを更新 2005年10月25日 23:58

■ 必要条件と十分条件 2005年10月25日 15:46

音楽シャッフル・クイズ(解答編)に対して、読者さんから 「配列の要素の取り得る順列が等確率で得られるためには、 size size フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか がsize!で割り切れることが必要である」 という部分がよく分からないというご質問がありました。 この方は、 「size size がsize!で割り切れたとしても、等確率になるとは限らないのでは?」 という疑問を抱かれたようでした。 この疑問は正当ですが、 今回のクイズの解答とは直接の関係はありません。 必要条件と十分条件を混同なさっているのだと思います。

「A. 順列が等確率で得られる」という命題と「B. size^sizeがsize!で割り切れる」という命題の関係を整理してみましょう。 AとBの関係は、

  • 命題(1)が真であること
  • 命題Bが偽であること

という命題が真のとき、BをAの必要条件といい、AをBの十分条件といいます。 この「必要」と「十分」という用語は非常にあたまを混乱させるのですが、 「Aが成り立つためには、Bは絶対に成り立っている必要がある」(フィボナッチ数列は再帰関数の題材として適切なのか つまりBを崩せばAも崩れる)ということと、 「Bが成り立つためには、Aが成り立っていることが確認できれば十分である」(つまりAさえ言えればBも言える)ということを 考えれば思い出すことができます。

これでお答えになっていますでしょうかね (追記: 読者さんによれば、答えになっていたようです。よかったよかった)。

補足(a) ※印は、((A⇒B)∧(¬B))⇒¬A が常に真になるということですね。 これは、(A⇒B)の定義が(¬A∨B)であることを思い出せば(式の変形または真理値表で)証明できます。

補足(b) 今回の解答としては「等確率ではない」ことを示せたので終わりなのですが、 ここから先には 「それではどういう条件が成り立てば等確率になるのか?」 という問題は残ります。

■ 仕事 2005年10月25日 10:35

『改訂第2版Java言語プログラミングレッスン』 の掲載ソースリストをWebで公開する準備を進める。 readme.txtとの整合性を調べるためのチェックツールをPerlで書く。

『改訂第2版Java言語プログラミングレッスン』の無料プレゼントへは、 現在24名の方が申し込んでくださっています。 みなさんからのメッセージを読んでいると、参考になるだけではなく、とても励みになりますね。 ありがとうございます。

  • 『改訂第2版Java言語プログラミングレッスン』無料プレゼントのお知らせ
  • 『改訂第2版Java言語プログラミングレッスン』

■ おはようございます 2005年10月25日 05:36

2005年10月24日

フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか コクヨのSlimB5ノートを使った感想 2005年10月24日 16:35

「コクヨが人間工学に基づいた新サイズのノートを発売」というニュースを聞き、さっそく購入して使っています。 今日でちょうど2週間目。 私はSlimB5のツインリングノートというのを使っています。

SlimB5は確かにスリムで、乗り物の中でも開いたりメモしたりするのに良いです。 じゃまにならないし、「さっと」使える感じです。 特にリングノートは場所を取らないため、SlimB5のスリムさが引き立つようです。

大量の文章は、すぐにコンピュータに向かって書きます。 ですから、私が紙のノートを開いて書くというのは、 「ゆっくり書きたいとき」や「自分でもよく分かっていないことを書くとき」ですね。 頭を「考えさせる」ために、わざとゆっくり書くこともあります。 紙のノートに書くのには時間がかかる。それを逆手にとるのです。

日付を書く。ゆっくり深呼吸する。 タイトルを書く。首をぐるっとまわして一息入れる。 頭の中で誰かに説明しながら、一行一行ていねいに書いていく。 わざと冗長に数式を展開することも。

コンピュータを使った仕事の合間には、紙のノートを読み返します。 ノートを読み返してみて「ああ、この文章は面白いからタイプしてみようか」とか、 「この数式をきちんとLaTeXで清書してみよう」などと思うことも多いです。 コンピュータに入力したら、 ノートのそのページに、入力したことを示すマークを付けておきます。

暇なときに、ノートをぱらぱらめくっていると、 自分の時系列での活動が見えて面白いですね。 またノートに記された日付を見ていると、 「最近なんにもやってないと思ってたけど、 意外といろんなこと考えているじゃん」と、何だか嬉しい気持ちになります。

紙のノートは直接検索できません。 でも、必要そうなことはコンピュータに入れ直すし、 それになにより、ぱらぱらノートを見返すことで、 自分の頭の中に入っちゃう感じがします。 だから、検索できないことはあまり苦になりません。

先日出した連載原稿も、 ランダム・アルバイト・クイズも、 音楽シャッフル・クイズも、 スタートは、SlimB5のノートでした。

  • コクヨ: 人間工学に基づいた新サイズのノートを発売

2005年10月23日

■ 音楽シャッフル・クイズ(解答編) 2005年10月23日 14:00

クイズに挑戦したい方は、 先を読み進める前に、 問題編をお読みください。

結城の解答

理由:配列の要素の取り得る順列は全部でsize!通りある。 一方、関数shuffleを1回呼び出したときの式random(フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか 0, size)の戻り値の列(size個からなる乱数列)は、 全部でsize size 通り(sizeのsize乗通り)ある。 このsize size 通りはすべて等確率で得られるため、 配列の要素の取り得る順列が等確率で得られるためには、 size size がsize!で割り切れることが必要である (さもないと均等に分布しない)。 しかし、size≧3のとき、size size がsize!で割り切れることはない。 したがって、関数shuffleは(3以上のどんなsizeを与えても)正しくシャッフルしない。

補足(フィボナッチ数列は再帰関数の題材として適切なのか 1): この問題は、 Introduction to AlgorithmsのExercise 5.3-3 (p.105)を参考にしました。 (余談ですが、Introduction to Algorithmsには、 ペーパーバック版もあるようです)

補足(2): n n がn!で割り切れないのは、n≧3のとき、nがn-1で割り切れないことから明らか。

補足(3): n≧3のとき、nがn-1で割り切れないのは、nとn-1はn≧3のとき共通の素因数を持たないから。 フィボナッチ数列は再帰関数の題材として適切なのか もしnとn-1が共通の素因数p≧2を持ったとすると、nとn-1の差はpの整数倍でなければならない。 しかしnとn-1の差(1)はp≧2の整数倍にはならない (n=ap, n-1=bp を n-(n-1)=(a-b)p にする)。

補足(4): 以下のようにすると正しいシャッフルになります。 (ループの終了条件とrandomの引数に注意)。

補足(5): 均等に分布するかどうかを調べるには、 randomを乱数生成の関数にするのではなく、 すべての場合を順番に生成する関数にして実験すると見通しを付けやすくなります。 たとえば、size=3のとき、random(0, size)が、 0, 0, 0; 0, 0, 1; 0, 0, 2; 0, 1, 0; . 2, 2, 1; 2, 2, 2という順番で値を返すようにするのです。

補足(6): 読者の中には、 「どう考えていいかまったくわからない。数学は難しくて嫌だ」 フィボナッチ数列は再帰関数の題材として適切なのか と嘆いていらっしゃる方がいらっしゃいました。 こういう問題に向かったときには、最初から一般的に考えるのではなく、 まず、少ない数で試してみるという態度が極めて重要です。 たとえば、 id:seamlessbiasさんがミルカさん風に書いてくださったように、 size=3の場合は、すべての順列を書き上げて考えることができます。 そうすれば、少なくともsize=3の場合には正しくないことが分かると思います。 これは重要な手がかりになりますね。

はらさんからのコメント

結城さんの補足(2)で、nのn乗がn!で割り切れない理由を、 「nがn-1で割り切れないことから明らか」 と述べていますが、これは若干(ほんとに若干ですが)誤解を招 くと思います。なぜなら、一般にaがbで割り切れないからといって、 aのn乗がbで割り切れないとは限らないからです。

正しくは、 「nのn乗がnの階乗で割り切れないのは、『nをn-1で割った余りが1なので、n のn乗をn-1で割った余りは1のn乗=1となる』ということから明らか」 とすべきでしょう。『』は、剰余類の乗法に関する性質です。

この「nをn-1で割った余りは1」より、補足(3)はトリビアルでしょう。

nさんの解答

結城さん,こんにちは. 前回のランダム・アルバイト・クイズでは壮絶な勘違いをしでかしてしまいましたが, めげずにシャッフルクイズにも回答してみます...

(理由) シャッフルの仕方が何通りあるかを考えてみます. ループ内で r を選ぶのに size 通りの選び方があり, さらにこの過程が i=0 から size-1 まで繰り返されるので, シャッフルされた音楽リストの作り方は size^size (size の size フィボナッチ数列は再帰関数の題材として適切なのか 乗) 通りあります. これらは明らかに等確率で選ばれます. 一方,配列の要素の順列は size! 通りです. 前者を後者で割ると size^size/size! = size^(size-1)/(size-1)! となりますが, 明らかにこの商は整数になりません. (size>=3 では size/(size-1) が整数にならないため) このことは,シャッフルリストの作り方を等確率で各順列に割り振ることができず, 順列によって生起確率に差ができることを意味します. フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか よって,等確率で順列を得る(正しくシャッフルする)ことはできません.

JAVA関連のことを調べてみた2021年01月22日

JAVA関連のことを調べてみた2021年01月22日

前回、ファイルオブジェクトを生成し文字を書き込んだり読み込んだりする処理を書きました。
今回は、プログラマーが作ったクラスで生成したオブジェクトを入出力する方法について書きたいと思います。

##シリアライズ
生成したインスタンスをバイト列に変換したり(**シリアライズ**)、またそのバイト列をインスタンスに戻したり(**デシリアライズ**)する仕組みです。
この仕組みによって、入出力ストリームを使用してファイルに保存したりネットワークで伝送したりできます。
シリアライズは直列化とも呼ばれます。

##オブジェクトをシリアライズ可能にする
通常のクラスをシリアライズ可能にするには、**java.io.Serializableインターフェース**を実装する必要があります。このインターフェースはマーカーインターフェースのため、オーバーライドすべきメソッドは持ちません。

下のプログラムは、PersonクラスがSerializableインターフェースを実装し、シリアライズ可能なオブジェクトにしています。

“`java:Person.java
import java.io.フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか *;

clas

Java の UUID は素晴らしい!

ユニークのキーを生成したいと思って、この記事を見つけました。

https://qiita.com/kawasima/items/6b0f47a60c9cb5ffb5c4

まさにこの記事の通りです。素晴らしい。

結論から言うと、UUID version4 が良さそうです。
UUID 以前から知ってましたが、バージョンまであるのは知りませんでした。

じゅあ、どうやってバージョンを調べるの?と調べたら、この記事

http://xawa99.blogspot.com/2013/07/UUID-Version.html

xxxxxxxx-xxxx- フィボナッチ数列は再帰関数の題材として適切なのか V xxx-xxxx-xxxxxxxxxxxx
なるほど!

Java 8 で検証してみました。

“`java
import java.util.UUID;

public class App public static void main(String[] args) for (int i = 0; i

【Spring】@SessionAttributesでセッションオブジェクトでオブジェクトを持ち回りたいのに・・・

###No primary or single public constructor found for interface java.util.List
このエラーに5時間位かかりましたね。意味わからんかったー
結局セッションオブジェクトの扱い方がわかっていなくて、コントローラーのメソッドの引数に@ModelAttributeなしで`List ListInt,`みたいに渡してて、これがアカン買ったようです。

###大まかなイメージ
1. セッションに置きたい名前を準備
2. その名前にオブジェクトを結びつける
3. model.addAttributeでセッションに保存する
4. メソッドの引数に@ModelAttributeをつけてセッションから取得

###実装する場所
####コントローラーの上に

“`java
@SessionAttributes( value=”〇〇”)
“`
`〇〇`にはオブジェクトの名前(属性名)

####コントローラーの中の一番上に@ModelAttributeでオブジェクトを準備

“`java

フィボナッチ数列は再帰関数の題材として適切なのか

@ModelAtt

KotlinでMapとListをfor文で操作しよう!

### Key:Valueが1:1のMapをListにする

“`Kotlin:
// 1:1
val map = mapOf(“key1” to “val1”, “key2” to “val2”, “key3” to “val3”)
// mapのすべてのvalueが格納される
val valueList = ArrayList(map.values)
var list: MutableList
list = ArrayList()
list.addAll(valueList)
“`
### 1:フィボナッチ数列は再帰関数の題材として適切なのか 1のMapを条件分岐でListに格納する

“`Kotlin:
val map = mapOf(“key1” to “val1”, “key2” to “val2”, “key3” to “val3”)
val valueList = ArrayList(map.values)

// key1のvalueがarray変数に格納される(“val1”)
var araay = map.get(“key1”).toString(

Java メモ

初心者が1から始めるJava開発-Vol.3- クラス、メソッド編

今回はJavaの最も重要な概念であるクラス、メソッドについて説明していきます。

私もまだまだプログラマーとしては発展途上で、こういう概念の話は言語化がむずい。
分かりにくい概念の話が多いですが、実装を経て「あーそういう事か」と分かればOKです。

もちろん、Hands On形式で実際にコードも書いていきますよ!

———————————
**Javaの初心者向けおすすめ本**
~今さらながらJavaで関数型プログラミングを学習してみた~(フィボナッチ数列は再帰関数の題材として適切なのか 第2部)

「関数型プログラミングとJava8での取り組みと追加API説明」を中心テーマとした第1部はすでに投稿されています。
[第1部へのリンク](https://qiita.com/greencycle/items/d864a56da30b3861fb4b)

##はじめに##
第1部では関数型プログラミング自体の概説と、Java8で新たに取り入れられたAPI+そのサンプルを中心に紹介しました。
本第2部では「実際Javaシステム開発においてどの程度関数型プログラミングを取り込むべきなのか?」を中心テーマとして少し現実的なサンプルも交えて検討していきたいと思います。
あわせて関数型プログラミングの説明でよく用いられている「パイプライン、高階関数、カリー化」という用語についてもJavaベースでの説明を行っていきます。
なお、内容には主観にもとづく部分や、個人的指向が入ったプログラムスタイルになっている場合がありますので了承お願い致します。
関数プログラミング特有の語句については第1部の後尾部分に理解した範囲での簡単な説明を記述していますので参考にして下さい。

##関数型プログラミングにおける

Java Silver SE11 継承とオーバーライドの間違えやすい部分

Java Silver SE11の問題を解いていて継承とオーバーライドに関する問題を間違えるので備忘録として残す。

大事なのは何の型で宣言されて、何のインスタンスを生成しているか。
メソッドはどのようなアクセス修飾子が付与されているか。

“`
public class Main public static void main(String[] args) throws Exception //case A
Super superClass = new Sub();

//case B フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか
// Super superClass = new Super();

Sub subClass = new Sub();

//code 1
// subClass = superClass;

//code 2 フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか
// subClass = (Sub)superClass;

DynamoDB Enhanced Client にて、なぜかインデックステーブルに対してアクセスしてしまう

# エラー内容
エラー文は以下の通り。

“`java
java.lang.IllegalArgumentException: A sort key value was supplied for an index that does not support one. Index: $PRIMARY_INDEX
“`
# 結論
属性に対するゲッター・セッターの定義がおかしい。(敗北N回目、、、)

# 対処
適切なゲッター・セッターを設定しましょう。
具体的には以下の2点をチェック。

– メソッド名 フィボナッチ数列は再帰関数の題材として適切なのか
– 引数の型

# 発生状況
筆者の場合は以下のような形で発生しました。

“`java
@DynamoDbBean
@Setter
public class Foo

private String name;
private String date;

@DynamoDbAttribute(“name”)
public フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか String getName() return name;
>

@DynamoDbAttribute(“date”)

Selenium DOM要素をホバー&クリックする方法

## Seleniumを使用してDOM要素をホバーしてからクリックする方法について明記します。

SeleniumはWebサイトやWebページの閲覧を自動化することができます。
今回は、抽出したDOM要素をホバーしてからクリックする方法について明記します。
要素をホバーすることでプログラム上、`マウスカーソルがDOM要素に重なっている状態`を表現します。

“`qiita:Java
import org.openqa.selenium.interactions.Actions;

public static void autoHoverClick(WebDriver driver, WebElement element) Actions act = new Actions(driver);
act.moveToElement(element).perform(); // 指定したDOM要素をホバーする(フィボナッチ数列は再帰関数の題材として適切なのか hover)
element.click(); // DOM要素をクリック
>

“`

たったこれだけ!チーム開発でコードフォーマット忘れを防ぐ方法

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122958/37d8e44e-07cb-355a-809b-25bf16a3b198.png)

# はじめに

**「コードフォーマットが適用されておりません。」** フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか
こんな指摘をした人、された人。いるのではないでしょうか?
今回はコードフォーマットを**CIツール**で実行し、開発者はフォーマッターの実行をしないような仕組みを紹介します。

# この記事を書こうと思った動機

**お客様指定のコードスタイルのある規約があるプロダクト**において以下の問題に直面し、結果的に工数が増大したため。

:star: **ケース1. ローカルで「コードフォーマッター」が適用されずにPull Requestを出すケース**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122958/4e6534c9-9f34-1a71-6865-0ddd34e1b0

Javaでディープラーニングを実装してみた

ディープラーニングをスクラッチから実装して理解するアプローチの書籍としては、『[ゼロから作るDeeplearning](https://www.oreilly.co.jp/books/9784873117584/)』が有名ですが、同じ趣旨の『[ディープラーニングの数学](https://www.nikkeibp.co.jp/atclpubmkt/book/19/273470/)』という書籍がとても分かりやすかったので、[Pythonのコード](https://github.com/makaishi2/math_dl_book_info)を[Javaで実装](https://github.com/kinmojr/math_deeplearning_java)してみました。

Javaは機械学習不毛地帯(というかデータサイエンス領域がPythonの独壇場?)ですが、Javaで機械学習のロジックを理解したいという奇特な方がいれば参考にしてください。

オリジナルと同様にできる限りライブラリを使わず、スクラッチで実装しました。
(フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか 実行速度の問題で行列やベクトルの演算部分はcommons mat

SpringBootで日付の相関チェックをする

#概要
SpringBootで複数項目を比較してバリデーションを行う方法(相関チェック)をまとめる。

#コード
まず、ユーザから日付の入力を受け取るエンティティクラス。

“` java
package com.sample.Form;

import com.sample.Annotation.DayCheck;
import lombok.Data;

フィボナッチ数列は再帰関数の題材として適切なのか

import javax.validation.constraints.NotNull;
import java.time.LocalDate;

@Data
@DayCheck //(1)
public class SearchLogForm @NotNull(message = “日付入れてね^^”) //(2)
private LocalDate startDate;

@NotNull(message = “日付入れてね^^”)
private LocalDate endDate;
>
“`

解説
(1)->このあと作成する自作のアノテーションをクラス全体に付与。
(2)->そもそも日付が入力され

Java Powerpointにフッタを挿入

今日はJavaでPowerpointにフッタを挿入する方法を紹介します。Spire.Presentation for Javaというライブラリを使ってPowerpointにフッタを簡単に挿入することができます。

下準備

f:id:lendoris:20210120151857p:plain

1.E-iceblueの公式サイトからFree Spire. Presentation for Java無料版をダウンロードしてください。

Java PowerPoint パスワード設定と解除

Spire.Presentation for Javaを使ってPowerPointのファイルにパスワード設定することができます。今回はPowerPointにパスワードを設定・解除する方法を紹介していきます。

下準備

f:id:lendoris:20210120151857p:plain

1.E-iceblueの公式サイトからFree Spire. Presentation for Java無料版をダウンロードしてください。

フィボナッチ数列は再帰関数の題材として適切なのか

フィボナッチ数列の初歩メモ

・フィボナッチ数列

**フィボナッチ数列**は、イタリアの数学者レオナルド・フィボナッチが考えた「[ウサギ算](https://talavax.com/usagizan.html)」から導かれる数列です。この数列は、自然界の現象に数多く出現し、ヒマワリの種の[配列](https://talavax.com/array.html)にも**フィボナッチ数列**の法則が働いているといわれている。

n番目のフィボナッチ数をFnで表すと、Fnは再帰的に

“`jsx
F0 = 0
F1 = 1

Fn+2 フィボナッチ数列は再帰関数の題材として適切なのか = Fn + Fn+1 (n≧0)
“`

で定義される。

1番目と2番目の値を足すと3番目の値になる。
言い方を変えると、ひとつ前とふたつ前の値を足した数が次の数となる。

・実際に書いたコード

“`java
public class TryJava0120

public static void main(String[] args) フィボナッチ数列は再帰関数の題材として適切なのか

int f0, f1, fn;

f0 = 0;
System.out.println

Java基礎 ファイルの読み書き

## FileWriter、FileReaderを使ってファイルを読み書きする

まずファイル名を指定し、Fileオブジェクトを生成します。
それをもとにキャラクタストリームである「**FileWriter**」「**FileReader**」を使って、char単位で読み書きを行います。

ちなみにキャラクターストリームを使用すると、文字コードが自動的に変換されるので、ファイルが保存されているOSの文字コードを意識することなく入出力を行えます。

以下のコードは、「text.txt」というファイルを生成し書き込みを行ったのち、
そのファイルの中身を読み込んで出力しているというプログラムです。

“`Main.java
import java.io.*;

public class Main public static void main(String[] args) try (FileWriter text1 = new FileWriter(new File(“text.txt”));
FileReader text2 = new FileReader(new

Oracle Autonomous Database 21c へJDBC Thin接続してみてみた

Autonomous DatabaseではTransport Layer Security (TLSv1.2)を使用するセキュアな接続が要求されます。 JDBC Thinドライバを使用するJavaアプリケーションには、Oracle WalletまたはJava KeyStore (JKS)が必要です。
ということで、[JDBCコード・サンプル](https://github.com/oracle/oracle-db-examples/tree/master/java/jdbc/ConnectionSamples)から[DataSourceSample.java](https://github.com/oracle/oracle-db-examples/blob/master/java/jdbc/ConnectionSamples/DataSourceSample.java)と[UCPSample.java](https://github.com/oracle/oracle-db-examples/blob/master/java/jdbc/ConnectionSamples/UCPSa

意外と知られていない。SpringBoot のもう一つのPlatformTransactionManager

意外と知られていない。SpringBoot のもう一つのPlatformTransactionManager
それは:org.springframework.フィボナッチ数列は再帰関数の題材として適切なのか data.transaction.ChainedTransactionManager です。

使用するイメージ

“`java
@Bean(name = “chainedTransactionManager”)
public ChainedTransactionManager transactionManager(@Qualifier(“primaryDs”) PlatformTransactionManager ds1,
@Qualifier(“secondaryDs”) PlatformTransactionManager ds2) return new ChainedTransactionManager(ds1, ds2);
>
“`

“`java
@Transact

負の数番への拡張

駄目でした。再帰エラーが出てしまいます。何故でしょう?
return Fib(n-1)+Fib(n-2) であるため、 Fib(-5) は再帰的に Fib(-6) フィボナッチ数列は再帰関数の題材として適切なのか と Fib(-7) を呼び出します。 Fib(-6) は Fib(-7) と Fib(-8) を呼び出します。 Fib(-7) は.
一向に初期値にたどり着きません。無限再帰に陥ってしまうのです。

それでも諦めてはいけません。引数が負のときに用いる漸化式を工夫すれば解決できます。
$F_n=F_+F_$ を移項して $F_=F_-F_$ すなわち フィボナッチ数列は再帰関数の題材として適切なのか $F_=F_-F_$ と変形できます。これならば引数が負数でも初期値にたどり着き、無限再帰を回避できます。
このことを使って再帰法を整数全体に拡張しましょう。

一般項の式は使える?

今回はフィボナッチ数$F_k$の$k$の範囲を「非負の整数全体」から「整数全体」に拡張しました。

Part2はフィボナッチ数列の項数を増やします。今回よりも数学要素が強くなります。

誤字脱字や誤った記述、更に良いアルゴリズム、気づいたこと、分かりにくい箇所、感想などがあればぜひコメントをください。

  1. 前回記事と異なり、 Fib(i) はそのまま$F_i$のことを指します。 ↩

  • 投稿日:2019-03-08T23:54:14+09:00

Pythonでモンテカルロ法によるテニスの勝率推移シミュレーションをつくってみた

モンテカルロシミュレーション

なんのためにつくったの?(目的)

テニスの試合で、ゲームスコア、統計スタッツ以外で試合の内容を伝えられるデータ可視化方法はないかなあ、と前から考えてました。

というのも、テニスは数時間戦うスポーツで、どうしても試合の中でアップダウンがあります。
その試合の流れというか、選手の優勢・劣勢の推移を表現できれば、より試合の全体像が伝えられるんじゃないか。

そんな思いもあって、試合の流れを可視化・表現することにトライしてみました。

モンテカルロシミュレーションで勝率を算出してその勝率推移をチャート化します。

勝率推移チャート

Image1 (1).png

2018年錦織選手とグルビス選手が対戦した試合のデータを用いて説明していきます。
↓は勝率推移をプロットした結果となっています。

直近30ポイントのサーブポイント率を算出し、そのポイント率で残りの試合を進行させたときの勝率をモンテカルロシミュレーションにて計算し、その推移をプロットしてます。

勝率はサーブポイント率をもとにモンテカルロシミュレーションを行い算出

Image4.png

勝率の計算方法について、簡単ですが説明します。
計算のイメージ図は↓のようになっています。

まずはサーブポイント率を計算し、それをもとにモンテカルロシミュレーションを行います。
乱数シミュレーションではどちらの選手が勝つかを判定し、それを1000回行い、1000回中何回勝つかをみて勝率を計算します。

勝率を計算したら、次のポイントに移行し、サーブポイント率の計算・モンテカルロシミュレーションと前のポイントと同じようにして勝率を計算します。

こうして全ポイントの勝率を計算していきます。

各選手のサーブポイント率を計算する

Image2.png

どうやってサーブポイント率を計算しているか説明しましょう。

↓の表は錦織とグルビスのどちらがポイントを取得したかを示しています。
錦織が○、グルビスが×になっていれば錦織がポイントをとったことになります。

例えば、34ポイント目のポイント率を計算する場合、その前10ポイントが計算対象となります。
(実際は、直近30ポイントで計算してますが、表が長くなるので説明では10ポイントとします)

サーブのポイント率を計算するので、錦織であれば錦織のサーブ10ポイント(黄色)、グルビスであればグルビスのサーブ10ポイント(オレンジ色)となります。

それぞれのサーブポイント率を計算すると、
錦織は○が4つあるので、4/10で40%のサーブポイント率
グルビスは○が9つあるので、9/10で90%のサーブポイント率
となります。
(実際は、1stサーブと2ndサーブそれぞれのポイント率を算出してます。また1stサーブのIn率も計算してます。)

一番最初のポイントは両選手50%のサーブポイント率とします。
両選手の1(〇)の数、0(×)をカウントするため、↓のように設定します。

モンテカルロシミュレーションにて残りのポイントを進行させ、勝つか負けるかを判定させる

計算したサーブポイント率で残りのポイントを進行させた場合、試合に勝つか負けるかを判定させます。

34ポイント目の次の35ポイント目は、錦織のサーブなので、40%の確率で錦織がポイント勝利し、60%の確率でグルビスがポイントロスとなるように、
乱数シミレーションを実施します。

コードは↓のようにかいています。
np.random.randint(フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか 0, 100)で、0~99の乱数を生成し、サーブポイント率perServeを上回るかを判定することで、ポイントを進行させます。

モンテカルロシミュレーションを1000回繰り返して、勝った回数から勝率を計算する

↑の乱数計算による勝ち負け判定を1000回繰り返し、錦織が200回勝ち、グルビスが800回勝つという結果になれば、このときの錦織の勝率は20%となります。

これで34ポイント目の勝率計算は終了し、次の35ポイント目の勝率の計算に進みます。
前のポイントと同じように、サーブポイント率とモンテカルロシミュレーションを実施し、勝率を計算します。

これを最後までやることで前述した全ポイントの勝率チャートが得られます。

以上、こんな感じで勝率の計算をしています。

gifアニメーション

少しでも臨場感が伝わればと思い、グラフをアニメーションにして動きをもたせてみました。

テニスの勝率推移シミュレーションのグラフアニメーション見た目を少し修正しました。錦織ロッテルダム4試合(エルベール→グルビス→フチョビッチ→ワウリンカ)データの取得から計算、グラフ化まで一気通貫で出力できるよう自動化してます #テニスデータの視覚化 #テニスの勝率推移シミュレーション pic.twitter.com/PANZgDJjka

— おたこ (@otakoma) 2019年2月17日

Pythonコード

  • 投稿日:2019-03-08T23:54:14+09:00

モンテカルロ法によるテニスの勝率推移シミュレーション【試合の流れの可視化】

モンテカルロシミュレーション

なんのためにつくったの?(目的)

テニスの試合で、ゲームスコア、統計スタッツ以外で試合の内容を伝えられるデータ可視化方法はないかなあ、と前から考えてました。

というのも、テニスは数時間戦うスポーツで、どうしても試合の中でアップダウンがあります。 フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか
その試合の流れというか、選手の優勢・劣勢の推移を表現できれば、より試合の全体像が伝えられるんじゃないか。

そんな思いもあって、試合の流れを可視化・表現することにトライしてみました。

モンテカルロシミュレーションで勝率を算出してその勝率推移をチャート化します。

勝率推移チャート

Image1 (1).png

2018年錦織選手とグルビス選手が対戦した試合のデータを用いて説明していきます。
↓は勝率推移をプロットした結果となっています。

直近30ポイントのサーブポイント率を算出し、そのポイント率で残りの試合を進行させたときの勝率をモンテカルロシミュレーションにて計算し、その推移をプロットしてます。

勝率はサーブポイント率をもとにモンテカルロシミュレーションを行い算出

Image4.png

勝率の計算方法について、簡単ですが説明します。
計算のイメージ図は↓のようになっています。

まずはサーブポイント率を計算し、それをもとにモンテカルロシミュレーションを行います。
乱数シミュレーションではどちらの選手が勝つかを判定し、それを1000回行い、1000回中何回勝つかをみて勝率を計算します。

勝率を計算したら、次のポイントに移行し、サーブポイント率の計算・モンテカルロシミュレーションと前のポイントと同じようにして勝率を計算します。

こうして全ポイントの勝率を計算していきます。

各選手のサーブポイント率を計算する

Image2.png

どうやってサーブポイント率を計算しているか説明しましょう。

↓の表は錦織とグルビスのどちらがポイントを取得したかを示しています。
錦織が○、グルビスが×になっていれば錦織がポイントをとったことになります。

例えば、34ポイント目のポイント率を計算する場合、その前10ポイントが計算対象となります。
(実際は、直近30ポイントで計算してますが、表が長くなるので説明では10ポイントとします)

サーブのポイント率を計算するので、錦織であれば錦織のサーブ10ポイント(黄色)、グルビスであればグルビスのサーブ10ポイント(オレンジ色)となります。

それぞれのサーブポイント率を計算すると、
錦織は○が4つあるので、4/10で40%のサーブポイント率
グルビスは○が9つあるので、9/10で90%のサーブポイント率
となります。
(実際は、1stサーブと2ndサーブそれぞれのポイント率を算出してます。また1stサーブのIn率も計算してます。)

一番最初のポイントは両選手50%のサーブポイント率とします。 フィボナッチ数列は再帰関数の題材として適切なのか
両選手の1(〇)の数、0(×)をカウントするため、↓のように設定します。

モンテカルロシミュレーションにて残りのポイントを進行させ、勝つか負けるかを判定させる

計算したサーブポイント率で残りのポイントを進行させた場合、試合に勝つか負けるかを判定させます。

34ポイント目の次の35ポイント目は、錦織のサーブなので、40%の確率で錦織がポイント勝利し、60%の確率でグルビスがポイントロスとなるように、
乱数シミレーションを実施します。

コードは↓のようにかいています。
np.random.randint(0, 100)で、0~99の乱数を生成し、サーブポイント率perServeを上回るかを判定することで、ポイントを進行させます。

モンテカルロシミュレーションを1000回繰り返して、勝った回数から勝率を計算する

↑の乱数計算による勝ち負け判定を1000回繰り返し、錦織が200回勝ち、グルビスが800回勝つという結果になれば、このときの錦織の勝率は20%となります。

これで34ポイント目の勝率計算は終了し、次の35ポイント目の勝率の計算に進みます。
前のポイントと同じように、サーブポイント率とモンテカルロシミュレーションを実施し、勝率を計算します。

これを最後までやることで前述した全ポイントの勝率チャートが得られます。

以上、こんな感じで勝率の計算をしています。

コードのありか

gifアニメーション

少しでも臨場感が伝わればと思い、グラフをアニメーションにして動きをもたせてみました。

テニスの勝率推移シミュレーションのグラフアニメーション見た目を少し修正しました。錦織ロッテルダム4試合(エルベール→グルビス→フチョビッチ→ワウリンカ)データの取得から計算、グラフ化まで一気通貫で出力できるよう自動化してます #テニスデータの視覚化 #テニスの勝率推移シミュレーション pic.twitter.com/PANZgDJjka

— おたこ (@otakoma) 2019年2月17日
  • 投稿日:2019-03-08T22:57:14+09:00

日本語訳 NEO Smart Contract Part 2 前半

image.png

NEO-Pythonを使ってスマートコントラクトを扱うNEOのワークショップPart2の前半の日本語版です。
主要な部分の日本語訳とともに、現在(2019年3月8日)は新バージョンとなっている NEO-Python のコマンドに修正し加筆しました。NEOで開発を始めたい方々の参考になれば幸いです。

日本語訳 NEO Smart Contract Workshop Part 1はこちら

2. ウォレットを扱う

2-1. ヘルプを実行してみよう

以降では、neo-pythonが起動していることを前提としています。
次のコマンドを実行するとNEO Pythonにおいて実行可能な全コマンドが次のように表示されます。
help

さらに、 wallet ~ のコマンドで実行可能な全てのコマンドについて知りたい場合は次を実行すると教えてもらうことができます。

wallet help

このように、知っているコマンドとその知らない部分に help を入力して実行すると、コマンドをどのように実行することができるかを教えてもらうことができます。

従って、 wallet send ~ のコマンドで実行できるものをさらに知りたい場合は、次のコマンドを実行します。
wallet send help

2-2. ウォレットを開けてみよう

それでは、スマートコントラクトの様々な機能を扱うために、まずウォレットを開けてみましょう。すでに起動しているDockerのコンテナにあるサンプルのウォレットを使用します。

次のコマンドを実行してサンプルのウォレットを開けてましょう。入力が求められるパスワードは coz です。
wallet open neo-privnet.wallet

ウォレットを開けることができたら、次のコマンドを実行してウォレットの中身を確認してみましょう。すると次のような画面になると思います。
wallet


ここでは、開けたウォレットのなかにNEOが 100000000.0 、NEOGasが 16032.0 だけ入っていることが確認できます。もしウォレットに何か不具合があれば、'wallet rebuild'というコマンドを実行することでウォレットを再構築することができます。

2-3. ウォレットをつくってみよう

image.png

自分自身のウォレットをつくってみましょう。次のコマンドを実行しましょう。
wallet create
ここでとは、自分がウォレットを保存したいpath(パス)のことをいいます。

自分の名前を使って次のようなpathでウォレットをつくるコマンドを実行してみます。
wallet create keigowallet

実行すると、パスワードを求められます。これは「自分でつくるパスワードを設定してください」ということなので、好きなパスワードを設定しましょう。

すると、上のようなウォレットが表示されます。これが新しくつくられた自分のウォレットで、中身としてNEOやNEOGasは入っていません。ウォレットは同じディレクトリに保存されます。

以降では、最初に開けた中身のあるウォレットから、今つくった中身のないウォレットに資産を送ってみたいと思います。

2.4. 送金をしてみよう

トークンをウォレットに送るためには、送る先のウォレットのアドレスがわかっていなければなりません。上でつくったウォレットのアドレスは次のような場所で確認できます。


そこで、自分のウォレットが表示された上の画面を見ると、自分のウォレットのアドレスは AaBRoup5ZJfVYujDdwcgo7VbycA41ZzYkX だと理解できます。

NEOのプラットフォーム上では、ウォレットのアドレスが他のウォレットのそれと重なることはほとんどないと考えられ、偶然重なる確率は天文学的に小さくなるように設計されています。ウォレットのアドレスは忘れないように、どこか違うところにもコピーしておきましょう。

次に、下のコマンドを実行することで、中身のあるサンプルのウォレットを開けましょう。パスワードは先ほどと同じ フィボナッチ数列は再帰関数の題材として適切なのか coz です。
wallet open neo-privnet.wallet

これによって先ほどまで開けていた keigowallet は自動的に閉まり、 neo-privnet.wallet が開けます。

それでは、 neo-privnet.wallet から keigowallet に、NEOとNEOGasという資産を移動させてみましょう。
次のコマンドをそれぞれ実行します。

wallet send neo フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか 10000
wallet send gas 10000

ここで には、資産を送る先のアドレスを指しているので、ここでは自分のつくったウォレットのアドレスである AaBRoup5ZJfVYujDdwcgo7VbycA41ZzYkX を入力します。

従って、次の二つのコマンドをそれぞれ実行します。
wallet send neo AaBRoup5ZJfVYujDdwcgo7VbycA41ZzYkX 10000
wallet send gas AaBRoup5ZJfVYujDdwcgo7VbycA41ZzYkX 10000

パスワードが求められますが、これは開けている方のウォレット(:資産を送る元のウォレット)のパスワードなので coz フィボナッチ数列は再帰関数の題材として適切なのか を入力し実行します。


ここで、確認のため、自分でつくったウォレットを開けて中身を確認してみましょう。
次のコマンドを順番に実行してみます。
wallet open keigowallet

wallet

中身をみてみると、確かにNEOが 10000.0 、NEOGasが 10000.0 入っていることが確認できます。

逆に、送金元のウォレットを開けてみてみると、次のようになっています。
(コマンドは wallet open フィボナッチ数列は再帰関数の題材として適切なのか フィボナッチ数列は再帰関数の題材として適切なのか keigowallet と wallet を順番に実行します)

中身について、NEOが 99990000.0 、NEOGasが 6032.0 になっており、送金した分だけ減っていることがわかります。以上でウォレットを扱う章は終了です。

もしも、自分の資産(アセット)の移動がすぐに表示されない場合は、トランザクションが確定する間の15~20秒だけ待ってからチェックしてみましょう。

2019年初めにneo-pythonのバージョンが新しくなってから、次のようなコマンドの変化がみられます。
open wallet => wallet open
build => sc build
import フィボナッチ数列は再帰関数の題材として適切なのか contract => sc deploy
testinvoke => sc invoke

バージョンアップの前後についてコマンドはほとんど同じですが、
エラーメッセージとして、 Command not found と表示された際は help のコマンドで随時チェックしてみましょう。

次回の「日本語訳 NEO Smart Contract Workshop Part 2 後半」では、neo-pythonが起動していて、本記事のウォレットの扱いができていることを前提に進めていきます。

関連記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次
閉じる