SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
ゲーム開発におけるバックトラック法
2015年 1月 30日 第一回数学勉強会
はじめに
はじめに
自分が一番イラッ☆とくるのが、そもそも論。
「そもそもダメじゃね?」「いや、そうゆうの最初
から調べるでしょ??」を座標の中心で叫んでおり
ます。
はじめに
そんな自分のコーディングスタイルですが、「まず
何を除外するべきか?」これが体にしみ込んでいま
した。
そこからプログラミングを掘り下げた時に、面白い
アルゴリズムに出会いました。
バックトラック法
はじめに
「そもそもダメならハイ次ー」
「そこから始るならダメだねー」
って感じです。
なので、実は「バックトラック法だー!」って仰々しく
語る事ではないのですが、アルゴリズムとして成立して
いるものなのであれば、しっかり身に付けておこうと考
えた次第です。
はじめに
しかしながら、自分の中のルール決めだけで終わる
ような事をせず、本来どういったものであるかの認
識が必要だと考えました。
今回はその「認識」の部分をお話ししたいと思いま
す。
Unityのおはなし
Unityのお話
本日は「Unity3D」という、ゲーム開発エンジンを使
用してプレゼンテーションしてみたいと思います。
開発言語はC#です。
基本オブジェクト指向ですが、GUIを使用して誰でも
3Dゲームの開発が出来る、とても便利なミドルウェ
アです。
Unityのお話
デバックコンソールがみずらいので、一部実行ファイ
ルとして検証用に使用します。
具体的な動作としては、クラス単位でコーディング
→オブジェクトに配置→実行 となります。
バックトラック法とは
バックトラック法とは
バックトラッキング(backtracking)は、制約充足問
題の解を探索する戦略の一種で、力まかせ探索を改
良したもの。「バックトラック」という用語は、ア
メリカの数学者デリック・ヘンリー・リーマー
(Derrick Henry Lehmer)が1950年代に作った造語で
ある。
バックトラック法とは
制約充足問題は完全な解の存在する問題であり、要
素の順序は問題とはならない。一連の変数が与えら
れ、指定された制約を満足するようにそれらに値を
設定しなければならない。バックトラッキングでは、
変数の値の組み合わせを試行錯誤して解を探す。バッ
クトラッキングの効果は部分的組み合わせを排除す
る実装にあり、それによって実行時間を短縮する。
バックトラックアルゴリズム
探査の木
木やグラフを探索するためのアルゴリズムである。
アルゴリズムは根から(グラフの場合はどのノードを
根にするか決定する)始まり、バックトラックするま
で可能な限り探索を行う。「縦型探索」とも呼ばれ
る
NQueen
チェスのクイーンの動作をベースに、
N個のクイーンを置いて、どのクイー
ンからも、一手で詰められない場所
に配置をさせるアルゴリズム
その配置パターンがいくつあるかも
検出可能
基本思想
基本思想
今回は、条件に合わせて何かアクションを起こす事
を前提に、その条件の効率化を図りたいと思います。
あまり大きなコードになると余計な説明で混乱して
しまうので、完結にいきたいと思います!
世界のナベアツ算
Nの倍数でアホになるアレですw
基本ロジック
提示された整数を3で割ったものから、同じく3で
割り、小数点以下を切り捨てた数字をひいて、0で
あればTrue。
そもそも3で0にならない数字は演算終了。
例題:世界のナベアツ算
40までかぞえます
3の倍数でアホになります
サンプルコード( Qiita )
Nabeatsu.cs参照
判定用プロパティ m_nabeatsu (初期値 floart 0)
カウント用プロパティ m_maxCount (初期値 int 40)
サンプルコード( Qiita )
14行目で3で割った浮動小数点型の値から、3で割っ
て、小数点以下を切り捨てた値を引きます。
あまりがなく、ちょうど0になればTrueが返ってき
て、「Aho」がコンソールに表示されます。
例題:世界のナベアツ算2
40までかぞえます
3の倍数でアホになります
3がつく数字はアホアホになります
3がついて3の倍数もアホアホになります
サンプルコード( Qiita )
Nabeatsu_SanTsuku.cs参照
判定用プロパティ m_nabeatsu (初期値 floart 0)
カウント用プロパティ m_maxCount (初期値 int 40)
サンプルコード( Qiita )
14行目で整数の中に3が含まれているか、C#の
IndexOfメソッドで確認します。ここで一度、検索の
ために整数から、String型に変換を行います。
Trueが返ってきたらその数字は「AhoAho」として出
力されます。
サンプルコード( Qiita )
15行目で3で割った浮動小数点型の値から、3で割っ
て、小数点以下を切り捨てた値を引きます。
あまりがなく、ちょうど0になればTrueが返ってき
て、「Aho」がコンソールに表示されます。
…これらをふまえて
FizzBuzz式
FizzBuzz式とは?
入社試験とかで(…コイツ本当にプログラマーかぁ
…?)と、いらぬ疑いをかけられた時に試されるプロ
グラミング
普通に書ける人達は、どこまで効率よく書かれてい
るかを議論する良い問題
基本ナベアツ算です(笑)
FizzBuzz式とは
そもそも3の倍数、5の倍数でなければ次の数字
ひとつの数字で、3の倍数であるか?5の倍数であ
るか?3と5の倍数であるか?を全て調べる必要は
無く、そもそも3でも5でもどちらにも倍数として
当てはまらなければ、次の数字と言ったロジック。
FizzBuzz式
40までかぞえます
3の倍数ではFizzといいます
5の倍数ではBuzzといいます
3と5の倍数ではFizzBuzzといいます
サンプルコード( Qiita )
FizzBuzz.cs参照
判定用プロパティ m_count (初期値 floart 0)
カウント用プロパティ m_maxCount (初期値 int 40)
サンプルコード( Qiita )
14行目で、そもそも3の倍数でも5の倍数でもない
数字の演算を終了させます。
そこから、3の倍数の処理、5の倍数の処理、3の
倍数で、5の倍数も含む数字の処理を行ないます。
実演
バックトラック法の使い方
NQueen
本日はこちらで解説したかったのですが、時間が足
りないのでまたの機会に。
ちなみにこれが出来ると、キャンディークラッシュ
のような3マッチパズルゲームでの駒の配置が、自動
でコントロールできる。( ←これに関連づけて話した
かった…orz)
その他の使い方
探索などの振る舞いが得意
ダンジョンのルート検索にとても有用
ノベルゲームのデバック
ご清聴
有り難うございました!

Weitere ähnliche Inhalte

Was ist angesagt?

ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木理玖 川崎
 
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃trmr
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Hokkaido.cap#1 Wiresharkの使い方(基礎編)Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Hokkaido.cap#1 Wiresharkの使い方(基礎編)Panda Yamaki
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装MITSUNARI Shigeo
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013Shuyo Nakatani
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話Nagisa Eto
 
日曜数学者のための面白いと思ってもらえるプレゼン術
日曜数学者のための面白いと思ってもらえるプレゼン術日曜数学者のための面白いと思ってもらえるプレゼン術
日曜数学者のための面白いと思ってもらえるプレゼン術Junpei Tsuji
 
数独のアルゴリズムを考える ― 各種法の改善と高速化
数独のアルゴリズムを考える ― 各種法の改善と高速化数独のアルゴリズムを考える ― 各種法の改善と高速化
数独のアルゴリズムを考える ― 各種法の改善と高速化atmarksharp
 
強化学習その4
強化学習その4強化学習その4
強化学習その4nishio
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
強化学習その2
強化学習その2強化学習その2
強化学習その2nishio
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~Takuya Akiba
 
Deflate
DeflateDeflate
Deflate7shi
 
5分でわかるベイズ確率
5分でわかるベイズ確率5分でわかるベイズ確率
5分でわかるベイズ確率hoxo_m
 

Was ist angesagt? (20)

ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木
 
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Hokkaido.cap#1 Wiresharkの使い方(基礎編)Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Hokkaido.cap#1 Wiresharkの使い方(基礎編)
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
 
日曜数学者のための面白いと思ってもらえるプレゼン術
日曜数学者のための面白いと思ってもらえるプレゼン術日曜数学者のための面白いと思ってもらえるプレゼン術
日曜数学者のための面白いと思ってもらえるプレゼン術
 
最適腕識別
最適腕識別最適腕識別
最適腕識別
 
数独のアルゴリズムを考える ― 各種法の改善と高速化
数独のアルゴリズムを考える ― 各種法の改善と高速化数独のアルゴリズムを考える ― 各種法の改善と高速化
数独のアルゴリズムを考える ― 各種法の改善と高速化
 
強化学習その4
強化学習その4強化学習その4
強化学習その4
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
Nazoki
NazokiNazoki
Nazoki
 
強化学習その2
強化学習その2強化学習その2
強化学習その2
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 
Deflate
DeflateDeflate
Deflate
 
5分でわかるベイズ確率
5分でわかるベイズ確率5分でわかるベイズ確率
5分でわかるベイズ確率
 
最大流 (max flow)
最大流 (max flow)最大流 (max flow)
最大流 (max flow)
 

Mehr von 大介 束田

第1回GameDesign-遊びの体験と文化
第1回GameDesign-遊びの体験と文化第1回GameDesign-遊びの体験と文化
第1回GameDesign-遊びの体験と文化大介 束田
 
WWDC 2015 情報共有会
WWDC 2015 情報共有会WWDC 2015 情報共有会
WWDC 2015 情報共有会大介 束田
 
20141218 お・と・なのlt大会
20141218 お・と・なのlt大会20141218 お・と・なのlt大会
20141218 お・と・なのlt大会大介 束田
 
iOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフーiOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフー大介 束田
 
メンボフェスタ
メンボフェスタ メンボフェスタ
メンボフェスタ 大介 束田
 
20130119 さいたま勉強会
20130119 さいたま勉強会20130119 さいたま勉強会
20130119 さいたま勉強会大介 束田
 
20130427 さいたま勉強会
20130427 さいたま勉強会20130427 さいたま勉強会
20130427 さいたま勉強会大介 束田
 

Mehr von 大介 束田 (8)

第1回GameDesign-遊びの体験と文化
第1回GameDesign-遊びの体験と文化第1回GameDesign-遊びの体験と文化
第1回GameDesign-遊びの体験と文化
 
WWDC 2015 情報共有会
WWDC 2015 情報共有会WWDC 2015 情報共有会
WWDC 2015 情報共有会
 
Unity testtool
Unity testtoolUnity testtool
Unity testtool
 
20141218 お・と・なのlt大会
20141218 お・と・なのlt大会20141218 お・と・なのlt大会
20141218 お・と・なのlt大会
 
iOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフーiOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフー
 
メンボフェスタ
メンボフェスタ メンボフェスタ
メンボフェスタ
 
20130119 さいたま勉強会
20130119 さいたま勉強会20130119 さいたま勉強会
20130119 さいたま勉強会
 
20130427 さいたま勉強会
20130427 さいたま勉強会20130427 さいたま勉強会
20130427 さいたま勉強会
 

Kürzlich hochgeladen

The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 

Kürzlich hochgeladen (7)

The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 

ゲーム開発におけるバックトラック法