SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
ゲーム開発におけるバックトラック法
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)
その他の使い方
探索などの振る舞いが得意
ダンジョンのルート検索にとても有用
ノベルゲームのデバック
ご清聴
有り難うございました!

Más contenido relacionado

La actualidad más candente

Golangで並行シミュレーテッドアニーリング
Golangで並行シミュレーテッドアニーリングGolangで並行シミュレーテッドアニーリング
Golangで並行シミュレーテッドアニーリングtsuji daishiro
 
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端Takuya Akiba
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~Takuya Akiba
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとはTakuya Akiba
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話Nagisa Eto
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解MITSUNARI Shigeo
 
圏論とHaskellは仲良し
圏論とHaskellは仲良し圏論とHaskellは仲良し
圏論とHaskellは仲良しohmori
 
自動定理証明の紹介
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介Masahiro Sakai
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズムTakuya Akiba
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
UMLモデルを使った自動生成
UMLモデルを使った自動生成UMLモデルを使った自動生成
UMLモデルを使った自動生成Norihito Ohshima
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編Miki Shimogai
 
すごい配列楽しく学ぼう
すごい配列楽しく学ぼうすごい配列楽しく学ぼう
すごい配列楽しく学ぼうxenophobia__
 

La actualidad más candente (20)

直交領域探索
直交領域探索直交領域探索
直交領域探索
 
Golangで並行シミュレーテッドアニーリング
Golangで並行シミュレーテッドアニーリングGolangで並行シミュレーテッドアニーリング
Golangで並行シミュレーテッドアニーリング
 
Chokudai search
Chokudai searchChokudai search
Chokudai search
 
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
 
圏論とHaskellは仲良し
圏論とHaskellは仲良し圏論とHaskellは仲良し
圏論とHaskellは仲良し
 
自動定理証明の紹介
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
UMLモデルを使った自動生成
UMLモデルを使った自動生成UMLモデルを使った自動生成
UMLモデルを使った自動生成
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
すごい配列楽しく学ぼう
すごい配列楽しく学ぼうすごい配列楽しく学ぼう
すごい配列楽しく学ぼう
 

Más de 大介 束田

第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 さいたま勉強会大介 束田
 

Más de 大介 束田 (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 さいたま勉強会
 

Último

2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料Tokyo Institute of Technology
 
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラムKochi Eng Camp
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~Kochi Eng Camp
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 

Último (6)

2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 

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