Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

AAをつくろう!

14,281 views

Published on

遺伝的アルゴリズムでAA自動生成

PDF化に伴いGIFは動かないので、ブログの方を参照お願いします。
http://yutori-datascience.hatenablog.com/entry/2015/06/08/170818

  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 実は↑でも、マルチラインテンプレートでの文字出現上位でやってたりします。使用文字数の正則化とかも考ええたが、人間の目のデフォルメ省略を如何に再現するかの方が本質的だと思ってます。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 既存のAAでよく使われる文字を集計して、評価に重み付けするとかはどうでしょう
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

AAをつくろう!

  1. 1. AAをつくろう! 佐藤 貴海 @リブセンスTechNight 1/28 @tkm2261
  2. 2. 自己紹介 名前: @tkm2261 専門: 経営工学/数理最適化 所属: 株式会社ブレインパッド 2年目 お仕事: 分析何でも屋さん (研究開発) 趣味: 自転車 自宅 ⇒
  3. 3. 過去にやったこと 仕事の内容は大体話せないので・・・
  4. 4. 過去にやったこと 基本的にネタ要員
  5. 5. 本題 みなさん、AAはご存知ですか?
  6. 6. AA(アスキーアート) アスキーアート(ASCII art)とは、 プレーンテキストによる視覚的表現 技法のこと。テキストアート、活字 アート、文字絵などとも呼ばれる。し ばしばAAと略される。ASCIIでない文 字コードのテキストアートも日本語で は「アスキーアート」と呼ぶ。 引用 Wikipedia 確認されている最古のAA (1898年) 引用: http://www.roysac.com/asciiarthistory.html
  7. 7. でも、こんなんじゃなくて・・・
  8. 8. こういう方がいいよね! __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´
  9. 9. どうやって作ってるか知ってますか? そ ん な ん 最 近 は 自 動 の ソ フ ト と か あ ん だ ろ ?
  10. 10. 全部職人芸です http://www.geocities.jp/mata_ri_watch/salon _01.html
  11. 11. 詳しく知りたい方はこちら • クマでも分かるトレースAAの作り方 http://dokoaa.com/trace/ • ゼロから始めるAA講座 http://www.geocities.jp/mata_ri_watch/salon_01.html ∩___∩ | ノ ヽ / ● ● | クマ──!! | ( _●_) ミ 彡、 |∪| 、`\ / __ ヽノ /´> ) (___) / (_/ | / | /\ \ | / ) ) ∪ ( \ \_)
  12. 12. やる夫スレの作者はどうしてるの? 2chにはAAに語らせて、 漫画みたいなの作るスレがあります / ̄ ̄\ / ─ ─\ | (●)(●)| ____. .| (__人__) | / \ ` ⌒´ ノ / ─ ─\ .} / (●) (●) \ } | (__人__) | ノ.ヽ / ∩ノ ⊃ /∩ノ ⊃| | ( \ / _ノ | |/ _ノ | | .\ “ /__| | /__| | \ /___ //___ /
  13. 13. 歴史系の作者はコイツ何者だってレベルの知識量 マンガ日本の歴史のAA版 (地図も全部AA) やる夫がフューラーになるようです (ヒトラー) やる夫は鎌倉幕府を成立させるようです (鎌倉時代) やる夫が徳川家康になるようです (安土桃山) AAで学ぶ南北戦争への道 (アメリカ) やる夫が『梅松論』を語るそうです。 (南北朝) etc…
  14. 14. やる夫スレの作者はどうしてるの? 方法1: マルチラインテンプレートを使う 過去作成された膨大なAAがインデックスされている
  15. 15. やる夫スレの作者はどうしてるの? (´д`)Editというツールで閲覧・使用が可能 編集画面 インデックス AA確認画面
  16. 16. やる夫スレの作者はどうしてるの? 方法2: AA作成依頼を出す
  17. 17. 結局、職人芸
  18. 18. こんな現状を救うべく . . .... ..: : :: :: ::: :::::: ::::::::::: * 。+ ゚ + ・ ∧ ∧. _::::。・._、_ ゚ ・ /:彡ミ゛ヽ;)(m,_)‐-(<_,` )-、 * / :::/:: ヽ、ヽ、 ::iー-、 .i ゚ + / :::/;;: ヽ ヽ ::l ゝ ,n _i l  ̄ ̄ ̄(_,ノ  ̄ ̄ ̄ヽ、_ノ ̄ ̄E_ )__ノ ̄
  19. 19. ちょっと、立ち上がってみた
  20. 20. AAをつくろう!
  21. 21. __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ 理想
  22. 22. 必要ステップ STEP1 : 画像処理 STEP2 : 評価関数の定義 STEP3 : 最適化 STEP4 : 出力 使用言語: Python 画像処理:OpenCV、PIL
  23. 23. STEP1 : 画像処理 AAは文字(白黒)しか表現できないので以下で処理 グレースケール(0-1値化) エッジ抽出 お好みでどちらかを使用
  24. 24. STEP1 : 画像処理 文字も画像なので、 ピクセル単位の色の有無を予め保存 PILのImageFont.truetypeでフォントを指定して getsize関数で取得可能
  25. 25. STEP2 : 評価関数の定義 作ったAAがどれほど画像に似ているかを評価 とりあえず、 ピクセル単位の色の有無の一致度を使用 10 01 vs. 11 01 一致度: 3
  26. 26. STEP2 : 評価関数の定義 作ったAAがどれほど画像に似ているかを評価 とりあえず、 ピクセル単位の色の有無の一致度を使用 10 01 vs. 11 01 一致度: 3 人間の目には補完機能があるため、 0を1と外した場合はより重いペナルティを課した
  27. 27. STEP3 : 最適化 評価関数が決まったので、 より一致度の高いAAを作る
  28. 28. 今回は遺伝的アルゴリズム 生物進化の仕組みを模倣して、より良い解を見つけるアルゴリズム 引用: http://www.sist.ac.jp/~kanakubo/research/evolutionary_computing/genetic_algorithms.html 選択淘汰: 強い個体(良い解)が 生き残りやすい 交叉: 次世代を作る 突然変異: 突然変異種を作る 最適化分野で最も中2心をくすぐるアルゴリズム
  29. 29. つまり、
  30. 30. __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ ミクさんをいっぱいつくって
  31. 31. 交配 させて・・・
  32. 32. 交配 させて・・・ 何世代も
  33. 33. マッチョ(優秀)な個体を作り上げるアルゴリズム
  34. 34. 動的計画法したほうが良いかも あるピクセルの矩形に対する、 評価関数を最大にする文字は常に一定なので 動的計画法でもいけるかも・・・ ただ、考えるのが面倒くさいので 一度計算した評価関数をキャッシュするだけにした
  35. 35. まずは初期解 乱数で始祖ミクさん達を作っても良いが・・・ さすがに何が何だかわからない
  36. 36. とりあえず、空白検知 空白地帯を全角と半角スペースで埋めると・・・ ※半角スペース2連続は禁止 ミクさんぽい!
  37. 37. 近傍探索もやっておく 配置文字のピクセルがズレない同型の文字で 評価関数が最大の文字を選ぶと お前が始祖ミクだ!
  38. 38. ネットに転がってる AA自動生成ツールはこんな感じで やってそう
  39. 39. ここからが頑張りドコロ
  40. 40. 交配の定義 GAの肝である、交叉を考える
  41. 41. 交配の定義 ミクさん♂ 今回はこんな感じにしてみた ミクさん♀ ミクさん Jr. 行単位で、ランダムに合成
  42. 42. その他細かいところを ゴニョゴニョやって・・・
  43. 43. 完成!
  44. 44. ・・・が
  45. 45. 死ぬほど遅い 並列計算は実施済み
  46. 46. 高速化しよう! 今回はPythonにJITコンパイラを突っ込む Numbaを選択
  47. 47. その他の選択肢 候補 今回諦めた理由 Cython cdefとか結構手を入れるのでPythonに戻す のが面倒。pyximportも面倒 C拡張 C言語は極力触りたくない PyPy numpyサポートが怪しい。いつか触るかも Julia なるべくPythonでやりたい。これでダメなら入 門するかも。
  48. 48. かなり早くなった 10倍ぐらいは速くなった気がする (力尽きて未計測)
  49. 49. ホントに完成!
  50. 50. GIFにしてみた グレースケール版
  51. 51. GIFにしてみた エッジ抽出版
  52. 52. 現実
  53. 53. 理想と現実のギャップ 現実 __ _ /iiヘ,, ‐::----::‐.._ ///ヘ ,/-:..´: : : : : : : : : : :::///_. ヾ\ /::/: : : : : : : : : : : : ///|: : ヽ// /// : : : ヘ : : i : : : :\ヾヽ|:: : ::× / /: : : 」_ ヽ: ::|ヽ_:_:: : `,_ヽ',: : : : :ヽ /{: : :´/ _` ヽ::i´ \`: ::|::::i ',: : : : : ヽ /: :!: : /イ{゜:i ヽiイiテヾ: : :i::::|:ヘ: : : : : : ヽ /: : :.!:./:::代ソ 弋::ソ}|ヽ:|∠ |: : : : : : :ヽ /: : : :|V |:::ト, 、_ .イ: |≦-,__',: : : : : : : :ヽ /: : : : ,' ヽ| >-、-t ´ |::/|´:⌒:`',: : : : : : : : `、 /: : : : ,' /::::::「ii | |// i⌒i>::',: : : : : : : : ::`、 /: : : : : i ./:::}:::::| ii |´\ /i01.i:::::::',: : : : : : : : : :`、 /: : : : : ::{ /:::::|::::::| ii |`iミY:::r-´ヘ::::::》: : : : : : : : : : ', ./: : : : : : : | \_|:::::::| ii |:::} }ヘ:::::::i/ ',: : : : : : : : : : ', /: : : : : : : : | |:::::::| ii/_ヽ∠ヽ`、:::ヘ´」',: : : : : : : : : : :', ,': : : : : : : : : :', |::::::∨ーt´--`-}::::;::ヽ:|',: : : : : : : : : : : ', i: : : : : : : : : : :\ \/:::::/ |;:r-:::i:! i: : : : : : : : : : : :', {: : : : : : : : : : :ヽ:\ /:::::::/ |:|!;i|:::| |: : : : : : : : : : : : :| ',: : : : : : : : : : : :\___./__:::::,' ,':|iiii|:::|:|: : : : : : : : : : : : :| ヽ: : : : : : : : : : : : : : : : :/::,' /:::|iiiii|::::|: : : : : : : : : : : : ::| \: : : : :\: : : : : : /::::ヽ{ /:::::|iiiiii|./: : : : : : : : : : : |: :| ` - ,,_二==-{:::::::::::::::} ___/::::-=二´: : : : : : : : : : : :ノ: | ヾ三彡 >、`ー---´: : : : : : : : : : /: :/ {:`ー\: : : : : : : : : : : : : /{/ `ー- `ー,, __ ,, -´ 理想
  54. 54. 結 論
  55. 55. 人間すごい!
  56. 56. 人間すごい! • 自動で作ったAAは何か不自然 • 人間の目は画像 ⇒ AAの時に デフォルメと取捨選択を行っている • 人間はなるべく「レ」や「|」といった文字で 境界をはっきりさせている
  57. 57. この仕組は評価関数次第なので 人間の感覚に近い関数を設計できる人 大募集!
  58. 58. ご清聴ありがとうございました!

×