###オセロ作成 言語
学校の課題でオセロのプログラムを組もうと思っています。
そこそこ強いオセロAIにしたいと持っているのですが、今できる言語が、タグの中だとCとJavaScriptだけです。
そこでなんですが、一週間(1日2時間弱)は言語の勉強をしてから作成に入りたいと思っています。
しかし、どの言語でやるのが時間的、難易度的にベストなのかよくわかりません。
アルゴリズム自体はそう変わらないと思うのですがおすすめの言語などあったら教えてください。
また、一週間勉強したとしてどの程度のレベルのオセロAIができると思われますか?
できるだけ強いAIを作るのとできるだけ弱いAIを作るのは同じくらい難しいですか?
質問多くてすみません。回答お願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
オセロの前に、◯☓ゲーム(3目並べ、tic-tac-toe) で人間に負けない(勝つか引き分けに持ち込める) ものを作ってみることに挑戦してみては如何でしょう?
言語は問いません。
理由
- GUIがオセロより単純。
- AI アルゴリズムもオセロより単純なはず。
投稿2015/12/06 06:37
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/08 13:34
2015/12/08 14:34
0
プログラミング言語の選択
pgsekyoudoutai さんが最も得意とする言語を選んでください。習得言語が C, JavaScript のようなのでその中から選択する事になると思います。
一週間しか時間がないようですので基本を早くに作り終えてから「AI」のアルゴリズムをじっくりと作った方が良いと思います。
AI
オセロのAIは検索すればいくらでも見つかりますが、既存のAI通りに作っても自分の力にはならないので自分の思考法をアルゴリズムに落とし込むから始めてみるといいと思います。
pgsekyoudoutai さんは普段、オセロをどんな考え方でプレイしていますか。「四隅を取らせない」「四辺を取らせない」等、オセロのセオリーはいくつかありますが、自分の思考法をアルゴリズム化すると見えてくるものがあると思います。
Re: pgsekyoudoutai さん
投稿2015/12/06 02:24
総合スコア18162
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/08 13:39
2015/12/08 15:00
0
javascript でok かと。
c だと gui めんどくさいし。
printf で 8x8 盤面を、相手の回のときに毎回表示、縦A-H、横1-8で、例えば b5 て入力させたら、b5に白駒配置して、CPU長考、を繰り返す。
table タグで8x8盤面を作り、マウスクリックで人、自動配置がCPUで。
printf と html なら大差無い気がしますが、mfc と html なら、gui に掛けるコストが莫大なものとなります。肝心の ai に注力するために、gui の面倒な手続きを色々覚えるより、出来る言語で手を抜いた方がいいかと。
まずはai 無しを作る。CPUターンも自分が指す、詰将棋みたいなの。
次に馬鹿ai を作る、おけるとこ見つけたら迷わず指すみたいなの、CPU直ぐに負けそうだけど。
次に角を出来る限り取らない戦法の ai を作る。
次に各種アルゴリズムで作る。
言語習得期間0、gui 1-2日、馬鹿 ai まで1日、あとはじっくり納得できるまで。
なぜさきに馬鹿を作るかというと、作り込みが間に合わない時に無念のリタイアをなんとなく誤魔化せ、、、ないよね。
取り敢えず、詰将棋型のオセロサッサと html/javascriptで作りましょう。
投稿2015/12/08 14:34
総合スコア1693
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
アルゴリズム自体はそう変わらないと思うのですがおすすめの言語などあったら教えてください。
基礎的な部分(深さ優先探索+評価関数という構造)はそう変わらないと思いますが、主に評価関数の内容や作り方を皆さん、本当に色々と工夫してます。(他に探索範囲を狭める工夫もあります。)
C言語は高速なのでJava等に比べると1~2手程深く先読みできるのでその分強くなることが期待できますが、アルゴリズムを試行錯誤するには不向きな言語です。アルゴリズムまで含めて開発するのは高校入学後にチャレンジする方が良いかも知れません。その時はC++言語の方がスムーズかも。
一週間勉強したとしてどの程度のレベルのオセロAIができると思われますか?
言語を例え1年勉強しても強いオセロが開発できるわけではありません。
アルゴリズムをどこまで練り上げることができるかが勝負です。
既存のアルゴリズムを真似するところから始めるのが良いと思います。入手できたアルゴリズムが実装に使っている言語を選ぶと速いですね。katoyさんが紹介されているものは良いように思いますよ。
その後、勝負を繰り返して弱点が見つかれば、それを克服するようpgsekyoudoutaiさんなりにアルゴリズムを工夫をするのが良いと思います。
そして、最後にC++へ移植すると最強のオセロができるかも?
【追記】
少し詳しいことを書いてみます。
オセロのようなゲームの場合は、先読みして手を決めます。今から先の盤面を全て先読みしたいのです。しかし、最後までの全てを先読みするには天文学的な時間がかかるので、先読みをある程度の深さで打ち切ります。その打ち切った時の盤面の有利さを評価値として計算し、相手がどんな手を打っても自分の評価値が最大になる手を見つけて打つのです。
その評価値計算方法の1つに「ヒューリスティクス(発見的手法)」と呼ばれる方法があります。ヒューリスティクスって言うと難しそうに見えますが、think49さんが書かれている「四隅を取らせない」「四辺を取らせない」等のことです。あはは。
他にもニューロとかファジーとか様々な方法が提案されてますが、個人でゲームを作る場合はヒューリスティクスが現実的なので、開発者自身のオセロの強さが重要になってきます。
そして、評価値をうまいこと用いてそれ以上評価しなくて良い枝を決定し、探索範囲を狭めるαβ枝刈りと呼ばれるアルゴリズムを使うと高速化できます。
つまり、先読みを深さ優先探索で行い、(時間的に)先読み限界の深さの時の盤面をヒューリスティクスで評価し、その評価値を用いてαβ枝刈りで探索範囲を狭めつつ、最善手を求めるって感じです。
投稿2015/12/06 03:09
編集2015/12/06 04:44総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/08 13:35
2015/12/08 14:01
2015/12/08 14:30
2015/12/08 14:40
0
必要な入出力を備えた言語なら、言語にこだわる必要はないと思いますが、C, JavaScriptから選ぶなら、より多くのCPUパワーを取り出せる C の方が、AIの実装時に有利かもしれません。
しらみつぶし検索のようなコンピューター的力技に対して、AI的実装は、人間の思考をベースに考えることになると思います。人間の思考は、経験則のパターンマッチングによって不要な検索を打ち切る最適化が行われていると聞いたことがあります。いろんな、方法があるようなので、調べて見るとよいでしょう。
余談ですが、確か、1970年代後半?に ASCII 誌で「誌上最強のオセロ」(うろ覚え!)とかの対戦企画があったのを記憶しています。そのころは、PCではなくSBCでオセロを実装していたようです。(笑)
投稿2015/12/06 03:02
総合スコア915
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/08 13:38
2015/12/15 21:45 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。