素晴らしいものだぞ
(●3○) エェー
3 :
デフォルトの名無しさん :04/06/23 17:37
>>1 は2進数だけで作成されたデータです。
まだ未完成なので放置してください。
中島&松島?
そういえばオセロチャンピオンがスパコンとやってまったく歯が立たなかった ときの一言 オセロチャンピオン「神のような強さだった!」
6 :
デフォルトの名無しさん :04/06/23 17:45
オセロは2進数で出来ています。 ●=0 ○=1
>>1 オリバーパーカーとオーソンウェルズのどっちに近いのをつくるのかね?
>>5 枝刈りとかケチな事言わずに
全手検索くらいしそうだもんな。
終末まで予見するのは神かも試練。
10 :
デフォルトの名無しさん :04/06/23 18:11
This is kusosure!!
●●○○● ●○○●● ●●○○● ○●○●○ ●●○○●
11でも10101010でもすきなのをどうぞ。
>>6 には1ビットとは書いてない。
オセロ板のデータ構造はどうするんだ。 状態は3つか。 白、黒、空。
>>14 もう一つ、盤面外というのもあった方がいいかも。
はみ出るの
('A`)(゚∀゚) (゚∀゚)('A`) ---------------------------- ('A`)(゚∀゚) (゚∀゚)('A`)(゚∀゚) ---------------------------- ('A`)(゚∀゚) ('A`)('A`)('A`)
>16 4444444444 4000000004 4000000004 4000000004 4000210004 4000120004 4000000004 4000000004 4000000004 4444444444 とかすると挟む判定がやりやすいのだ
>>18 その都度判断するのはめんどくさいんで、テーブルでやるのが良し。
15年ほど前、森田オセロのソースコードが書籍になったことがあったな。
http://pc.2ch.net/tech/kako/984/984182993.html 337 名前:トリッキーの1 投稿日:2001/08/21(火) 23:55
面白い題材が上がっていたので復帰します(笑) 7行オセロ、人間対無能AIです。
#include <stdio.h>
int p,t,a,d,c,v,i,m[90]={0},s,r[]={-10,-9,-8,-1,1,8,9,10};void k(){if(m[p]==0)
for(i=0;i<8;i++){for(c=0,v=p+r[i];m[v]==3-t;v+=r[i])c++;if(c&&m[v]==t){a+=c;v=
p;if(d)do m[v]=t,v+=r[i];while(m[v]!=t);}}}char*h="・○●\n";int main(){for(i=
1,m[41]=m[49]=2;i<10;m[i++*9]=3)m[40]=m[50]=t=s=1;for(;;a=d=0){for(p=9;p<82;++
p)k(),printf("%.2s",&h[m[p]*2]);if(a)for(d=a=s=p=8;a==8;k())t-2?(scanf("%d %d"
,&p,&i),p+=i*9):++p;else if(s)s=0,printf("pass");else break;t=3-t;}return 0;}
もはやインデントを揃えた位では元のコードが読めなくなってしまっていますが、
もしコメント付き変数名まとものバージョンを欲しい方がいれば上げます。
338 名前:トリッキーの1投稿日:2001/08/21(火) 23:58
人間の入力は、「X軸 Y軸」と半角で入力します。
置けない場所を指定した場合は再度入力してください。
X=55などの変な入力をチェックしていないので、即クラッシュします。
両者置けなくなったらプログラム終了です。自分で数えてください。
もっとも、このコンピュータは激弱ですので負けようがないとおもいますが(笑
22 :
デフォルトの名無しさん :04/07/08 19:38
#include<stdio.h> int p,t,a,d,c,v,i,m[90]={ 0 },s,r[]={-10,-9,-8,-1,1,8,9,10}; void k() { if(m[p]==0) for(i=0;i<8;i++) { for(c=0,v=p+r[i]; m[v]==3-t; v+=r[i]) c++; if(c&&m[v]==t) { a+=c; v=p; if(d) do m[v]=t,v+=r[i]; while(m[v]!=t); } } } char *h="・○●\n";
int main() { for(i=1,m[41]=m[49]=2; i<10; m[i++*9]=3) m[40]=m[50]=t=s=1; for(;; a=d=0) { for(p=9; p<82; ++p) k (),printf("%.2s",&h[m[p]*2]); if(a) for(d=a=s=p=8; a==8; k()) t-2? (scanf("%d %d",&p,&i),p+=i*9):++p; else if(s) s=0,printf("pass"); else break; t=3-t; } return 0; }
26 :
デフォルトの名無しさん :04/08/21 12:58
ttp://up.isp.2ch.net/up/79ab1d38086e.c 作ってみますた。
画面イメージはこんな感じ↓
1 2 3 4 5 6 7 8
┏━┯━┯━┯━┯━┯━┯━┯━┓
1┃ │ │ │ │ │ │ │ ┃
┠─┼─┼─┼─┼─┼─┼─┼─┨
2┃ │ │ │ │ │ │ │ ┃
┠─┼─┼─┼─┼─┼─┼─┼─┨
3┃ │ │ │ │ │ │ │ ┃
┠─┼─┼─┼─┼─┼─┼─┼─┨
4┃ │ │ │○│●│ │ │ ┃
┠─┼─┼─┼─┼─┼─┼─┼─┨
5┃ │ │ │●│○│ │ │ ┃
┠─┼─┼─┼─┼─┼─┼─┼─┨
6┃ │ │ │ │ │ │ │ ┃
┠─┼─┼─┼─┼─┼─┼─┼─┨
7┃ │ │ │ │ │ │ │ ┃
┠─┼─┼─┼─┼─┼─┼─┼─┨
8┃ │ │ │ │ │ │ | ┃
┗━┷━┷━┷━┷━┷━┷━┷━┛
最強ではないけど、結構強い。
初心者が勝てない、中級者が苦戦するレベル
27 :
デフォルトの名無しさん :04/08/21 20:01
>>26 やってみたけど、漏れは勝てなかった。
そのプログラム、結構嫌な手を打ってくるな。
落とせた!
>>27 アルゴリズムは結構単純ですけど、オセロだとそれでも強くなるみたいです。
>>29 どうでしたか?
31 :
デフォルトの名無しさん :04/08/21 20:52
オセロって言うな!! オセロは商標。 ラッピングテープを指して「サランラップ」 配送屋を見ればどこの配送屋でも「宅急便」 というのと同じくらい恥ずかしいこと。
>>31 ハァ?なにいってんだ?オセロはオセロだろ
どうでもいいよそんなこと
プログラム公開する時には、リバーシにしといた方がいいかもな。 面倒を避けるために。
35 :
デフォルトの名無しさん :04/08/21 21:07
>>31 だったら、紙を金属の芯で止める道具のことをホッチキスと呼ばずにステイプルと呼んで下さい。
オセロの発案者はあくまでオリジナルと言っている。 オセロはオセロであって、リバーシとは別物なのである。 と言ってみるテスト。
37 :
デフォルトの名無しさん :04/08/21 21:32
>>26 全然勝てない。俺は結構強い方で、人とオセロをやって負けたことは無かったんだが。
38 :
デフォルトの名無しさん :04/08/21 21:38
でもオセロってシェイクスピアの作品名を借用したもんでしょ? そんなの商標にできるのか?
日本にシェークスピアが来ていなかったからつい・・・
>>38 こんな短いソースで、こんだけ強いオセロが作れるんだ。
>>30 負けた。少なく返すように置いていったら、全部ひっくり返された。
よくできていますね。コード短いし丁寧に作られてますね。
へー、強いんだ。読んでみようかな。
とりあえず大雑把な戦略を教えてくれない?
>>26
全日本選手権入賞経験者の私が軽くレクチャーしよう。 オセロ脱初心者講座 @中盤までは全滅しない程度になるべく少なく石を取る。 A隅の斜め隣は危険(すぐに隅を取られる)なので無闇に打たない。 隅の隣も実はかなり危険。 B露出してる場所(隣に石が少ないマス)に無闇に打たない。 C無闇に辺を取らない(辺を取るべきか取らないべきかの判断は 上手くならないとつかないので最初はあまり取らないと覚えておく)。
多分バグ発見。 1 2 3 4 5 6 7 8 ┏━┯━┯━┯━┯━┯━┯━┯━┓ 1┃ │ │ │ │ │ │ │ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 2┃●│ │○│ │ │ │○│ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 3┃●│○│○│ │○│○│ │ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 4┃●│●│○│○│○│ │ │ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 5┃●│●│●│○│○│ │ │ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 6┃●│●│●│●│○│○│○│ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 7┃●│●│●│●│★│ │ │ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 8┃●│●│●│●│●│ │ │ ┃ ┗━┷━┷━┷━┷━┷━┷━┷━┛ WHITE Passed. >6 7
1 2 3 4 5 6 7 8 ┏━┯━┯━┯━┯━┯━┯━┯━┓ 1┃ │ │ │ │ │ │ │ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 2┃●│ │○│ │ │ │○│ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 3┃●│●│○│ │○│○│ │ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 4┃●│●│●│○│○│ │ │ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 5┃●│●│●│●│○│ │ │ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 6┃●│●│●│●│●│○│○│ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 7┃●│●│●│●│●│★│ │ ┃ ┠─┼─┼─┼─┼─┼─┼─┼─┨ 8┃●│●│●│●│●│ │ │ ┃ ┗━┷━┷━┷━┷━┷━┷━┷━┛ WHITE Passed. > ここで6 8に打たないでパスした。 打たなかったので(4 1)と打ったら(3 1) (2 1)と進んで 次は6 8に打ってきた。
1手目からの順 (3,5) (5,6) (6,3) (2,5) (6,6) (5,3) (4,6) (7,2) (3,4) (4,7) (3,6) (2,7) (3,7) (2,8) (1,8) (7,6) (3,8) (2,4) (1,4) (1,5) (3,3) (1,7) (1,6) (3,2) (2,3) (1,3) (1,2) (2,6) (4,8) (5,8) (5,7) (6,7)
51 :
デフォルトの名無しさん :04/08/22 03:12
>>50 >>41 の最強のプログラムの深さ2と、自作プログラムの深さ5を対戦させてみたら、
自作プログラムの方が負けましたけど、人間には中級車レベルの人になら勝てると思います。
上級者だったら弱く感じるかも知れませんけど・・・。
処理が重くて(効率が悪くて)あまり深く読めないのと、隅を優先させ過ぎたのが原因かも知れません。
深さを 60 に設定すれば、必ず勝てるプログラムになります。
その代わり、宇宙が終わるまでに計算が終わりませんけどw
>>45 さんの戦略をプログラムすれば強くなると思います。
序盤は ・隅を狙う ・自分の打てる手数が多くなる手を打つ だけでいいんじゃないのか?
隅の斜め隣は打たないってしたほうがいいと思う。
>>48 のでもいきなり打ってるから。
>>53 打っても問題ない(打った方が良い)ケースもあるから、
ただ打たないっていうアルゴリズムは良くない。
序盤は思考しなくて定石通りに打てばいいと思うけど、 オセロの定石集とか、売ってあるのだろうか?
ネットで探せばいくつかデータはあったと思うけど。 著作権的に流用しちゃっていいものかどうかは不明。
58 :
デフォルトの名無しさん :04/08/22 09:21
>>49 コードがコンパクトにまとまっていていいですね。
オレはそんなに思考系は詳しくないんで質問なんですが、
オセロでMin-Max法だと葉ノードまで読まないと、正しい評価値がでませんよね?
途中で読みを中断した場合(特に序盤)どう枝を評価しているんですか?
素晴らしいオセロっていうのはな、たまには勝たせてくれるオセロだよ? お前んちのじーちゃんはむきになって勝とうとしないだろ? それとおなじことだよ。
また、話についていけなくなった奴が荒らしにきたな...。
序盤=データベースの範囲 終盤=完全読み なので中盤がミソなわけだ。 とりあえず、偶数理論と開放度理論だけ取り込めば十分だと思う。 さらに盤の各マスにも点数をつけて、隅の点数を高く、 X(隅の斜め隣)を最も低く、C(隅の隣)を次に低く設定する。 偶数理論&開放度理論による点数加算が、マス固有の点数のマイナス分を上回っていれば 状況次第(Xに打たないと負けるような時)でXに打ち込む事もできるんじゃないかな。 作ったこと無いからわからんけど。
だいぶ強くなった。
64 :
デフォルトの名無しさん :04/08/23 00:12
素晴らしーオセロってのは やっぱ、ゲームしゃん、プレイヤーも勝つと楽しいよね だから、初盤はコンピュータが有利なの でも、最終的にはプレイヤーを勝たせてくれるような そんな、自己満足なオセロがほしー
そんな接待オセロ、なにが楽しいのか。
66 :
デフォルトの名無しさん :04/08/23 00:27
67 :
デフォルトの名無しさん :04/08/23 00:30
>>65 初心者用には案外大切だと思います。
初めてやったときにボロ負けしたら激しく興味を無くすから、
最初くらいは勝たせてあげた方が良いのでは?
ただ強いだけのプログラムを作るよりも、手抜きをしていると分からないような接待オセロを作る方が
ずっと難しいような気がします。
>>67 ばれないように接待オセロと言っても、PCが弱いと、わざと負けてるって
バレバレじゃん。(もしくはプログラムが下手で本気で弱いか)
>初めてやったときにボロ負けしたら激しく興味を無くすから、
これは人によりけりだとおもう。
逆に、ちょっとコツをつかんだ程度で簡単に勝てるようになると
底の浅いゲームだと思って興味をなくすか。
69 :
デフォルトの名無しさん :04/08/23 01:26
>>68 >ばれないように接待オセロと言っても、PCが弱いと、わざと負けてるって
>バレバレじゃん。(もしくはプログラムが下手で本気で弱いか)
だから、単に強いだけのプログラムを作るより難しいといったのですが・・・。
強いプログラムというのは、評価関数がしっかりしていないと出来ません。
(意図的に)手加減をするプログラムも、評価関数がしっかりしていないと出来ません。
強いプログラムの上に上手な手加減の仕方をプログラムしないと、接待プログラムは出来ないのでは?
>これは人によりけりだとおもう。
>逆に、ちょっとコツをつかんだ程度で簡単に勝てるようになると
>底の浅いゲームだと思って興味をなくすか。
それを見極めるのもプロだと思います。
「こいつなら最初に(ゲーム上で)ボコボコにした方が伸びる」
「こいつはボロ負けすると挫折するタイプだから手加減してやろう」
みたいな感じで。
70 :
デフォルトの名無しさん :04/08/23 05:29
そこでニューラルネットですよ。
すばらしいオセロって、強い奴?それとも売れる奴?
72 :
◆R/rLuLKeEI :04/08/23 08:18
相手とともに成長する奴
気づかないうちにオセロを移動させればいいんだよ。
>>69 >だから、単に強いだけのプログラムを作るより難しいといったのですが・・・。
なんか論点がずれてるな。
簡単か難しいかの話なんてしてないよ。
>それを見極めるのもプロだと思います。
だから、そういう論点じゃないでしょ。
>>71 将棋や囲碁だと、基本的に強いのが売れる。
元々接待用ゲームだったらしいよ。
接待モードは、こんな感じで実装できそうだけど。 コンピュータが手番を渡されたら、まずその局面で探索。 評価値がマイナスだったら、最善手を打つ。 プラスが帰ってきたら、最善手だけでなく全ての手について点数を求める。 あらかじめ決めておいた最大値を点差が超えない範囲で、引き分けに近付く手を打つ。 最終的には僅差で負ける。 例えば最大下げ幅を8に設定してあって、最善手の点数が+16 他の候補手が+12,+10,+6,0,-4,-8だったら+10の手を選ぶというようにする。
相手が序盤からたくさん石取りまくるド素人だと、どんなに接待プレーしても 終盤調整で見え見えの手抜きしないといけなくなる。
>>81 技術の問題じゃない。
ヌードモデルやストリップの女性に金を払えば誰にでも可能。
アニメ絵でいいじゃん。
>>81 アタック 25 みたいに自分がとった分だけ見えるとか。(藁
85 :
デフォルトの名無しさん :04/08/23 22:24
それにしても、絵の才能の問題であって、技術的な部分はごく僅か。
そんな事より
>>81 と
>>83 よ、ちょいと聞いてくれよ。スレとあんま関係ないけどさ。
昔、パソコン研究会をやってたんです。パソコン研究会。
そしたらなんか人がめちゃくちゃいっぱいで座れないんです。
で、よく見たらなんか盛り上がってて、エロゲーとか作っているんです。
もうね、アホかと。馬鹿かと。
お前らな、エロゲー如きで普段使ってないパソコンを使ってんじゃねーよ、ボケが。
エロゲーだよ、エロゲー。
なんか親子連れとかもいるし。一家4人でエロゲーか。おめでてーな。
よーしパパSM頼んじゃうぞー、とか言ってるの。もう見てらんない。
お前らな、エロゲーやるからその席空けろと。
パソコンってのはな、もっと殺伐としてるべきなんだよ。
デスクトップの隣に座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。
で、やっと座れたかと思ったら、隣の奴が、モロ出し無修正ロリゲーで、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、ロリゲーなんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何が、ロリゲーで、だ。
お前は本当にロリゲーを作りたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、ロリ絵を見たいだけちゃうんかと。
パソコン通の俺から言わせてもらえば今、パソコン通の間での最新流行はやっぱり、
特盛り計算量、これだね。
特盛り計算量AIプログラミング。これが通の使い方。
特盛り計算量ってのはアルゴリズムが多めに入ってる。そん代わりエロが少なめ。これ。
で、それにAIプログラミング(人工知能)。これ最強。
しかしこれをやると次からひろゆきにマークされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。
まあお前、
>>81 と
>>83 は、エロゲーでも作ってなさいってこった。
>>85 は昔のネタで一人で盛り上がり、面白いと勘違いするバカ
87 :
デフォルトの名無しさん :04/08/23 23:34
オセロを教せーろ。
>>66 このオセロ2時間くらい楽しめたぞ
久々にオセロなんかしたら面白かった
ひまがあったらコードも見てみるよ
91 :
デフォルトの名無しさん :04/08/24 02:17
なんかコピペにクレームつけてるやつがいるな。 つまらなかったらスルーすればいいのに。
>>92 ごめん、吉野家テンプレを自分で改造して作った
ここはAIという高尚なスレなんだから、雑談は他でやってくれ。
95 :
デフォルトの名無しさん :04/08/24 14:33
よし、おとーさんがんばっちゃおうかなー。
>>62 白黒の初期配置が逆じゃない?
他のプログラムとか、サイトとか見てたら逆っぽいのだけれど。
手加減させたいなら、読みの深度を落とすとか評価値が一番じゃない箇所に 置くとかそれだけで済むことだ。
100 :
デフォルトの名無しさん :04/08/24 21:48
アルファベータなんざ糞もいいところ。つまらん。本当につまらんアルゴリズム。 もっとセンセーショナルでドマラスティックなやつがいい。
何か弱くなってないか・・・。
>>101 αβ法よりも効率の良いプログラムとなると、いかに効率よく枝を落とすかという話になりますが、
それは殆ど人工知能に近いものになると思います。
ドマラスティックって、、、
~~~~
104 :
デフォルトの名無しさん :04/09/14 17:44:32
αβ法より優れているものとなると Null Window Search になると思いますが、 それよりも優れた方法ってあるんでしょうか?
ガッ
107 :
◆R/rLuLKeEI :04/09/20 23:57:34
>>104 Null Window Search といってもその基礎になる考え方はαβじゃなかったかな。
MTD(f)も確かαβだし。
「負けオセロ」のプログラムって作った人います?
109 :
デフォルトの名無しさん :04/09/21 05:50:25
アルファベータ法
110 :
デフォルトの名無しさん :04/09/21 11:30:32
>>108 勝ちオセロの評価関数の符号を変えればすぐに出来ます。
盤面が全て白になった局面から逆算していけば必勝手順が分かる
WZebraって無茶苦茶強いし速いな。あんなの簡単に作れるんか?
113 :
デフォルトの名無しさん :04/09/29 01:51:36
ループオセロを作ってみました。 ルール(機能)は、通常のオセロの他に、 ・左端と右端はつながっている(DQやFFのワールドマップを想像してください) ・1つを除いて一列全て相手側の色の場合、その開いた一つに置くと一列取ることが出来る ・盤面をいつでも自在にシフト(ループ)させることが出来る。 というものがあります。 どなたか、ゲームとして面白いかどうか評価して頂けないでしょうか? ソースコードは手元にあります。
>>112 昔、IOSっていうオセロプログラム同士を自己学習させるために自動でひたすら
戦わせるサーバがあって、WZebraはそこで鍛えられたプログラムだから
一朝一夕のものじゃないよ。
>>21 のX軸Y軸入力というのが手間だったので入力部分を追加したインターフェース改造版です。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>/*処理系によりconio.h→console.h*/
char*h="・○●☆\n";int p,t,a,d,c,v,i,e=10,s,o,z[255]={0},m[90]={0},r[]={-10,-
9,-8,-1,1,8,9,10};void k(){if(m[p]==0)for(i=0;i<8;i++){for(c=0,v=p+r[i];m[v]==
3-t;v+=r[i])c++;if(c&&m[v]==t){a+=c;v=p;if(d)do m[v]=t,v+=r[i];while(m[v]!=t);
}}}void b(){system("cls");for(p=9;p<82;++p)a?a:k(),printf("%.2s",&h[m[p]*2]);}
int main(){for(50[z]=80[z]=9,54[z]=77[z]=m[40]=m[50]=t=s=i=1,52[z]=75[z]=-1,56
[z]=72[z]=-9,m[41]=m[49]=2;i<e;m[i++*9]=4);for(;;a=d=0){b();if(a)for(d=a=s=p=8
;a==8;k())if(t-2){o=e[m];for(i=0,e[m]=3;i!=13;c=(i=_getch())[z]){if(c&&e+c>9&&
e+c<81)e[m]=o,o=(e+=((e+c)%9?c:c*2))[m],e[m]=3;b();}e[m]=o,i=e/9,p=e%9+i*9;}
else++p;else if(s)s=0,printf("pass");else break;t=3-t;}return 0;}
テンキーか矢印キーで石を置く位置を指定でき、リターンキーで決定します。
この入力方式でこれよりダウンサイジングはかなり高度になってくるかと思われ。
116 :
◆R/rLuLKeEI :04/09/29 08:20:08
>>113 :
トーラスリバーシかと思た。
Googleでざっと見たところ、類似のは見当たらなかった。
海外まで含めたらあるかも。
トーラス碁はあるのにな
117 :
デフォルトの名無しさん :04/09/29 08:41:45
,、_,、 ( 'ο') <ゥンポコー
>>119 ざっと見た感じだと、
(1)升目ごとに構造体を作るのは非常に冗長
マウス今どの升目を指しているか(あるいは盤外か)を調べるには、一字式で簡単に出来る。
升目ごとに構造体があって、さらにそれを総当りで調べるのは冗長。
(2)8方向に処理する部分は、別に関数を作った方がコンパクト
例えば、judge_setting_unit_dir という関数を作って、
引数を指定するだけで値を得られるようにすれば、コードが短くなってバグも出にくくなり、
あとで修正するときの手間が、(その部分だけ見れば)8分の1で済む。
(3)ヘッダ名と本体の名前は一致させた方が良い
global.h で宣言されている関数定義が global.c に書かれていないのを見てちょっと拍子抜けした。
大抵のプログラムでは、余程の事情がない限り、ヘッダファイルの名前と本体の名前が
一致している。
正直言って、そのソースにAIを組み込むのはちょっと辛いものがある。
121 :
◆R/rLuLKeEI :04/09/30 02:09:27
>>119 :
まだダウンロードしてないんで分からんけど思考部を別プロセスにしてGUI部とプロセス間通信したらどう?
思考部とGUI部で共通の通信ルーチンや盤面の更新、合法手の生成はインタフェイスを公開してリンカで繋げるだけになってたら嬉しい。
プロトコルさえしっかりしてたら言語に縛られなくて、なおいい。
などと勝手なことを書いてますが、こんなことするにはかなりの手間がかかりますね。すんません。
他人の作ったのと自分のを特定フォルダに入れとくだけでGUI部に一切変更無しで色んな組合わせの対戦が出来るなぁって思ったり。
共通ルーチンはdllにしておいたり…妄想炸裂中
122 :
デフォルトの名無しさん :04/10/02 10:31:25
>>113 上下左右はもちろん、斜め方向にもトーラスなはずだから、
ABCDEFGH
O+++++++ 1
+++++++O 2
++++++++ 3
+++++O++ 4
++++O+++ 5
+++O++++ 6
++O+++++ 7
+O++++++ 8
みたいなときに、G3にXを置くとこの絵のOの位置は全部Xにならないといけないよね。
125 :
◆R/rLuLKeEI :04/10/02 12:50:06
>>124 : ◆FIcNi4f8js
じゃあ、アルゴリズム実装の練習以外ではもう何も新たに作る必要ないやん。
>>125 ◆R/rLuLKeEI
通常のルール通りでってことであれば、そうだね。
127 :
◆R/rLuLKeEI :04/10/02 14:38:04
>>126 : ◆FIcNi4f8js
通常のルールは分離されてないの?
n人非零和協力非確定非ターン制…までなんでもあり…スレ違いだな
128 :
122 :04/10/02 15:31:17
これの普通レベルってBoobyのレベル3くらい?
130 :
122 :04/10/05 21:08:01
だれか対戦してくれー!!
したよ
132 :
デフォルトの名無しさん :04/10/16 04:02:01
┏━━━━━━━━━━━━━━━━━┓ ┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │○│●│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │●│○│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃└─┴─┴─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━┓ ┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │○│●│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │●│○│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │●│┃ ┃└─┴─┴─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━━━━━┛
134 :
デフォルトの名無しさん :04/10/16 04:08:11
┏━━━━━━━━━━━━━━━━━┓ ┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │○│●│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │●│○│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │●│○ ┃└─┴─┴─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━━━━━┛
>>134 ┏━━━━━━━━━━━━━━━━━┓
┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃
┃│ │ │ │ │ │ │ │ │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│ │ │ │ │ │ │ │ │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│ │ │ │ │ │ │ │ │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│ │ │ │○│●│ │ │ │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│ │ │ │●│○│ │ │ │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│ │ │ │ │ │ │ │ │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│ │ │ │ │ │ │ │ │┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤|(●), 、(●)、.:|
┃│ │ │ │ │ │ │ │●│○
┃└─┴─┴─┴─┴─┴─┴─┴─┘┃
┗━━━━━━━━━━━━━━━━━┛
136 :
デフォルトの名無しさん :04/10/16 04:15:00
┏━━━━━━━━━━━━━━━━━┓ ┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │○│●│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │●│○│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ○ ┃├─┼─┼─┼─┼─┼─┼─┼─┤|(○), 、(●)、.:| ┃│ │ │ │ │ │ │ │●│○ ┃└─┴─┴─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━┓ ┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃ ┃│●│●│●│●│●│●│●│●│┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│●│●│●│●│●│●│●│●│┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│●│●│●│●│●│●│●│●│┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│●│●│●│●│●│●│●│●│┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│●│●│●│●│●│●│●│●│┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│●│●│●│●│●│●│●│●│┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│●│●│●│●│●│●│●│●│┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│●│●│●│●│●│●│●│●│┃ ┃└─┴─┴─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━┓ ┃┌─┬─┬─┬─┬─┬─┐┃ ┃│ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │○│●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │●│●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │┃ ┃└─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━┛
>>138 ┏━━━━━━━━━━━━━┓
┃┌─┬─┬─┬─┬─┬─┐┃
┃│ │ │ │ │ │ │┃
┃├─┼─┼─┼─┼─┼─┤┃
┃│ │●│●│●│ │ │┃
┃├─┼─┼─┼─┼─┼─┤┃
┃│ │ │●│●│ │ │┃
┃├─┼─┼─┼─┼─┼─┤┃
┃│ │ │ │●│ │ │┃
┃├─┼─┼─┼─┼─┼─┤┃
┃│ │ │ │ │ │ │┃
┃└─┴─┴─┴─┴─┴─┘┃
┗━━━━━━━━━━━━━┛
prologでサクっと作れない?
142 :
デフォルトの名無しさん :04/10/18 09:10:29
┏━━━━━━━━━━━━━┓ ┃┌─┬─┬─┬─┬─┬─┐┃ ┃│○│ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │●│●│●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │●│●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │┃ ┃└─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━┓ ┃●─┬─┬─┬─┬─┬─┐┃ ┃│●│ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │●│●│●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │●│●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │┃ ┃└─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━┛
144 :
デフォルトの名無しさん :04/10/18 13:37:09
○━━━━━━━━━━━━━┓ ┃●─┬─┬─┬─┬─┬─┐┃ ┃│●│ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │●│●│●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │●│●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │┃ ┃└─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━┛
● ●━━━━━━━━━━━━━┓ ┃●─┬─┬─┬─┬─┬─┐┃ ┃│●│ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │●│●│●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │●│●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │●│ │ │┃ ┃├─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │┃ ┃└─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━┓ ┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃ ●│ │ │ │ │ │ │ │ │┃ ┃●─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│●│ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │●│ │ │ │○│ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │●│●│○│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │○│●│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │○│ │●│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃└─┴─┴─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━┓ ┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃ ●│ │ │ │ │ │ │ │ │┃ ┃●─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│●│ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │●│ │○│ │○│ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │●│○│○│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │○│●│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │○│ │●│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃└─┴─┴─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━━━━━┛
何が面白いんだ?
ゲームのことはさっぱり知らないので、これから勉強して作ってみます。
仮に100x100のオセロはつおいの方のは人間?
151 :
デフォルトの名無しさん :04/10/18 18:48:26
┏━━━━━━━━━━━━━━━━━┓ ┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃ ●│ │ │ │ │ │ │ │ │┃ ┃●─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│●│ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │●│ │○│ │○│ │ │┃ ┃├─┼─●─┼─┼─┼─┼─┼─┤┃ ┃│ │ │●│○│○│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │○│●│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │○│ │●│ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│ │ │ │ │ │ │ │ │┃ ┃└─┴─┴─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━━━━━┛
(●)(●)(●)(○)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(○)(●)(●)(●)(●)(○)(●) (●)(●)(○)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●) (●)(●)(●)(●) (●)(●) (●)(●)(●)(●)(●)(○)(●)(●)(●)(●)(○)(●)(●)(●)(●) (●)( )(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(○)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(○)(●)(●) (●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(○) (●)(●)(○)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(●)(●)(○)(●)(●)(●)(●)(●) (●)(●)(●)(●)(○)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(○)(●)(●)(●)(●)(●)(●)(○)(●)(●) (●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(●) (●)(○)(●)(●)(●) (●)( )(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)
153 :
デフォルトの名無しさん :04/10/18 18:59:54
(●)(●)(●)(○)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(○)(●)(●)(●)(●)(○)(●) (●)(●)(○)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●) (●)(●)(●)(●) (●)(●) (●)(●)(●)(●)(●)(○)(●)(●)(●)(●)(○)(●)(●)(●)(●) (●)( )(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(○)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(○)(●)(●)(★) (●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(○)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(●)(●)(○)(●)(●)(●)(●)(●) (●)(●)(●)(●)(○)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(○)(●)(●)(●)(●)(●)(●)(○)(●)(●) (●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●) (●)(●)(●)(●)(●)(●)(●)(●) (●)(○)(●)(●)(●) (●)( )(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)(●)
消防のときにいとこの家にあそびにきてた香具師が、 4スミは黒ならひっくり返せるというルールを適応した。 そんなルール効いたこと無いんだが、どこのローカルルールなんだ?
○●○○○●○○ ●○○○●○●○ ○●●○●○●○ ●○○○○●○○ ●●●○●○●○ ○●○●○●○● ●●●○○●●○ ○●○○○○●○ ○○○○○○○○ ○○●●●●○○ ○○○○○●○○ ○○○○●○○○ ○○○○●○○○ ○○○○●○○○ ○○○○●○○○ ○○○●●○○○
>>155 ここはオセロスレ。囲碁は囲碁の専用のスレをたててやってください。
>>113 やってみたいのでもう一回ソースでいいのでアップしてくれませんか?
>>157 自作プログラム改良の参考にしようと買ってみた。
添付プログラムと対戦させたら、20石以上差をつけて俺のが勝った。
K成→T大というエリートコースまっしぐらの人の書いた本が、
こんなレベルが低いなんて信じられない。
>>130 EasyAI vs 俺の・・・7-57
俺の vs EasyAI・・・50-14
評価関数が良いけど探索が遅い、ってのよりは、
評価関数が悪くても探索が速いほうが、強いことが多い気がします。
>>160 本ってのは、対象読者のレベルに合わせて書かれるものだ。
163 :
122 :05/01/07 23:35:44
つえーな。おい。 対戦見てみたいのでUpしてくれませんか。
すまん。
>>161 と書くのわすれたうえにあげてしまった。
今頃追いついた。 >21をやってみた。 #getch()はcygwinで見つからなかったので。 ○○○○○○○○ ○●○○○○○○ ○●○○○○○○ ○●●○○○●○ ○●●●○○●○ ○○○○○○●○ ●●●●●●●○ ○○○○○○●○ 単純な割りに、それなりに打ってくるから楽しい。 #逆ルールリバーシは前に作ったがn88basic@pc98だ。
ABCDEFGH O+++++++ 1 +++++++O 2 ++++++++ 3 +++++O++ 4 ++++O+++ 5 +++O++++ 6 ++O+++++ 7 +O++++++ 8 みたいなときに、 G3にXを置くとこの絵のOの位置は 全部Xにならないといけないよね。
168 :
デフォルトの名無しさん :05/02/19 16:43:49
8で割った余りを座標に使えばよい
ところで、オセロの白と黒の配置って、何種類あるの?
さあ。ルールに沿って計算してみたら? 生きている間に計算おわるかはわからないが。
高々有限個だ
とりあえず3の60乗以下だな。
>>172 回転したパターンを省くと1/4になるよ。
でも最初の4駒も後から反転することを考えると ×2^4。
174 :
デフォルトの名無しさん :05/02/27 01:00:12
対角線で反転させれば減らせそう
でも、やっぱり焼け石に水
176 :
デフォルトの名無しさん :05/03/13 01:25:00
だよねぇ
177 :
デフォルトの名無しさん :2005/04/09(土) 15:16:01
java言語で少し作ってみたんだけどPEN4/2.59GHzのマシンで、 17−8万手/毎秒くらいしか読めない。 評価関数は駒数と打てる箇所の数しか調べてないのに。 やはりJAVAでは無理があるのか。。
ゴセロ
6行オセロに触発されて、5行オセロに挑戦したが、 5行半で力尽きた、やるせない思い出が…
┏━━━━━━━━━━━━━━━━━┓ ┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃ ┃│★│#│☆│ │ │☆│#│★│┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│#│#│ │ │ │ │#│#│┃ ┃├─┼─┏━━━━━━━┓─┼─┤┃ ┃│☆│ ┃☆│ │ │☆┃ │☆│┃ ┃├─┼─┃─┼─┼─┼─┃─┼─┤┃ ┃│ │ ┃ │■│■│ ┃ │ │┃ ┃├─┼─┃─┼─┼─┼─┃─┼─┤┃ ┃│ │ ┃ │■│■│ ┃ │ │┃ ┃├─┼─┃─┼─┼─┼─┃─┼─┤┃ ┃│☆│ ┃☆│ │ │☆┃ │☆│┃ ┃├─┼─┗━━━━━━━┛─┼─┤┃ ┃│#│#│ │ │ │ │#│#│┃ ┃├─┼─┼─┼─┼─┼─┼─┼─┤┃ ┃│★│#│☆│ │ │☆│#│★│┃ ┃└─┴─┴─┴─┴─┴─┴─┴─┘┃ ┗━━━━━━━━━━━━━━━━━┛ ★>☆>無印>#の順に(優先的に置く、自分の色に変える)
(あとは4分割した4×4の場所だけで相対的に総当りさせて計算させる程度でいいんじゃない?)←ここももうちょっと場当たり的じゃなく規則性をみいだせるかも その後候補がいくつか挙がったら初めて自分の色をより多く増やせる場所を選ばせるとか
183 :
デフォルトの名無しさん :2005/07/01(金) 21:07:10
今月のCマガジンでリバーシ大会やってるぞ
>>183 とりあえず作ってみた
暇な人誰か対戦しようよ
>>183 ようやくdllが作れるよーになったトコ。
あと10日強で完成するんかなぁ・・・
186 :
デフォルトの名無しさん :2005/07/06(水) 23:34:37
オセロ作成中なんだけど定石ってのは覚えさせた方が吉?
>>186 うん、外部から読めるようにするとなお( ´・ω・`)
>>186 いや、定石なんて「固定観念」にとらわれたプログラムじゃだめ。
人間でもそうだけど、前例にとらわれず自分で考えて考え抜くプログラムが結局強いんだよ。
でもオセロは定石といえるものが圧倒的に強いよ
ド素人にもそれ
>>180 さえ尊守させれば、かなりなれた人間でもじゃんけん勝負で黒が勝つ程度になるくらい。
たまたま知らなかったのは仕方ないとして、プログラムで全てが解決するわけじゃないって事。
多少なりとも知識は必要なのだよ、ライブラリだと思えば素直に使えるだろう?
× かなりなれた人間でも ○ かなりなれた人間相手でも ちなみにかなりなれた人間というのはクラスで最強程度、プロはの思考ルーチンはおそらくそれを発展させたもの
ふと思ったのだが、オセロで最短手数で終局する手順ってばどんなんだろう。
>>191 自分で作ったプログラムに誤りがなければ、9手+パス2回で11手(?)だった。
f5,f4,c3,c6,c5,d6,f3,c4,c7,PASS,PASS
素朴な疑問だけど、>180によると真ん中の4箇所の優先順位がないのはなんで? #無印ってことなんかな?
デフォルトで石(コマ)が置いてあるからだよ 石の上から石を強制的に置けるプログラムにしてしまった場合全てのバランスが変わっちゃうし
180です
>>180 うわのびてますね!
補足すると
太線の━の内側にいる場合:太線の外側の無印が#、#に関してはさらに絶対においてはいけない、■は無印 等
かき損ねた事もありました
実際オセロはあまりやった事がないいい加減な持論なのです
僕のレスを引用してくれた人が肯定してくれたのはうれしいのですが、あまりじしんがありません
太線の━の内側にいる場合 ではなく 内側における場合 でした
ジサクジエンぽい・・
>>180 納得。ほぼ同意。
私の自論だと、
--
・枠内(>180の┏内)におけるときは外はほぼ無視
・コーナーは取られないように死守
・自分が取るときは罠に填まらないように注意(特に最終局面は駒数次第)
・エッジは諸刃の剣(エッジで取り合いは避けたい)
・エッジの内側は安全地帯
・自分が偏らないよう相手を分断したい(手詰まり防止)
--
てな感じなんですが、さてどうプログラムに反映させたもんか…
#と思いつつ十数年も放置しているのは内緒。
むちゃくちゃ強いヤツだと、 簡単に、四隅取らせてくれるよ。でも勝てない。 四隅とっても意味なくされる。むしろ、わざと取らせているかのよう。 どういう評価法をつかってるんだろと思う
その通り、わざと取らせている。 確か、壁際に4つ同じ並びになるのは全く構わないが □□????□□ □□○○○○□□ ―――――――― 5つ並び、かつ、はみ出してない側の壁から2つめが同色となる形は愚形となる □□???○□□ □○○○○○□□ ―――――――― なぜなら、この形で右下を取ると、すぐに割り込まれて 下の壁側全部と共に、左下を取られてしまうから □□???○□□ □□???○●□ □□???○○□ □□???○●□ □□????●□ □○○○○○□□ □○○○○○□□ □○○○○○□○ □○○○○○●○ ●●●●●●●○ ―――――――― ―――――――― ―――――――― ―――――――― ―――――――― この形に名前が付いている程で、強い人の間では常識なはず。 だから、他に取る場所がなくなった時に、渋々壁の5つ目を取らせるように □□●??○□□ □□○○○○□□ ―――――――― この形を相手に作らせるようにしているはず。 評価法は知らんけどね。
>>202 そうそう、それ。
某オセロゲームにその手でよく嵌められて悔しいからこそのこの辺。
>・自分が取るときは罠に填まらないように注意(特に最終局面は駒数次第)
>・エッジは諸刃の剣(エッジで取り合いは避けたい)
うーむ、せめてそのリンク先のサイトくらいは読まないと強いオセロにならなさそうだなぁ。
連続失礼。 >202のサイトの基礎のまとめを実装するだけで、そこそこ強い気がするので引用してみる。 -- 隅をとることは重要 確定石を増やすことは重要 考え無しに X 打ちをしない 単独 C 打ちは危険 打てる箇所が多くなるようにする 自分の石が内側に固まるよう努める -- 1、4は簡単として、2、5がちょっと厄介か。3は曖昧だし、6となるとどう評価関数を作るか…
どこかで読んだアイディアなんだが。 辺(というのかフチのところ)用の評価をする。 マス1つ1つの値を返すんじゃなくてマス8つの状態から1つの値を返すわけだ。 3の8乗だったらテーブル化も出来るだろう。
打てる箇所が多くなるようにする でやってみたら何故か弱かった 後半は多く取った方がいいのかな
ゼブラとかもう完璧な強さじゃん。 評価関数の精度も抜群で、実質的にはもう完全解析に近い。 今さら研究対象にはならんよなぁ。
210 :
デフォルトの名無しさん :2005/08/29(月) 13:12:33
とりあえずBuroの論文でも読んだらいいんじゃない 実現は無理だろうけど大いに参考にはなるはず
>>209 ハァ?
ゼブラなんて穴突けば楽勝なんだが。
現在のところ世界で最も精度のよいオセロの評価関数は、 ・Edax ・Saio ・Ntest ・Herakles ・Pirate あたりだと思います。 ってmixiのコミュには書いてあった
国産で最強ってBooby?
>>26 のが今行ったら落とせなくなってた、、。どなたかupキボン
C言語の本を一冊半読んだ程度の入門者ですが、 試しにオセロゲーム作ってみました。 敵の思考は、単なる乱数なのでとことんアホですが 最低限、ルールを忠実に守るレベルに達しただけで満足してしまいました。 みなさん凄いですね
一冊半読んでその内容だったら、やめてしまいなさい。
>>216 ん?
>>215 さんは、「C言語の本」を1冊半読んだのであって、オセロの思考ルーチンや
ツリーの探索の方法については、まだまだ初心者以前なんじゃないの?
つまんない煽りはやめたほうがいい。
Cの本1冊半ならそんなもんじゃない? 次はアルゴリズムの本にチャレンジ。
219 :
216 :2005/09/10(土) 12:52:14
気悪い思いさせてごめん。
学習させたいのですが、よさげな棋譜(フリーなもの)を教えてください。
IOS Logisthello
E・∇・ヨノシ <222ゲット♫
黒白協力しあって、64個全て同色にするような手順はあるか?
いくらでもあるんじゃないの 普通に遊んでて真っ白だか真っ黒だかしたこと何回かあるけど
64マス全部埋めて同色ってことだと思ふ
226 :
223 :2005/12/06(火) 21:05:33
うむ。確かにいくらでもあるね。例えば先手の黒が絶対に 白をとらないような戦略をとれば容易にできた。サンクス。
>>225 それで
61個とかだともっと何回もある
64-0 は限りなく可能
230 :
デフォルトの名無しさん :2005/12/13(火) 01:16:46
とりあえず、COMvsCOMで最も多くひっくり返せる 手を打つリバーシを作りたい。複数の手がある場合は適当に 選択。そこからだんだんと改良したい。 どんな感じでプログラムを組めばいいのか誰か解説頼む。
そうそう、そんな感じ
>>226 白を取れるときは取るのがルール。
取れなければそこで試合終了です代。
>>232 黒が白を取れなくても試合終了にはならない。
両者がどこにも置けなくなった時点で試合終了。
Zebraに勝てとは言わないけど、せめてThell程度は倒せるプログラムを書こうぜ
238 :
デフォルトの名無しさん :2006/04/02(日) 23:01:11
>>230 プログラムは、Bookにでているような最善手には強い。
ちょっとはずしたところが弱い。
Bookからちょっとはずしたところで逆転して勝つというプログラムを作ればよい。
石差の評価関数が偶数でなく、奇数になるくらいのところ。
Zebraはかなりこの辺が弱い。
241 :
239 :2006/04/04(火) 21:44:50
242 :
デフォルトの名無しさん :2006/04/13(木) 07:45:50
BOOK中心に作れば強いプログラムはできる。 ZEBRAなんかのBOOKは正確じゃないところがあり、もっといいBOOKを使用すれば強くなる。
どうやったらそういう手の込んだものが作れるんですか? 自分も多少Cの知識がありますが、どこでどの関数を使ったり、なぜifだの do whileだの使ったりするのかが分かりません
正直、 >どこでどの関数を使ったり、なぜifだの do whileだの使ったりするのかが分かりません のレベルでは >自分も多少Cの知識がありますが、 こんなこと言うのは烏滸がましい。
1ヶ月近くレスがないわけだが、まだ開発してる人は見ているのかな? 他のコミュニティもあるし今更2chでやることもないのか。
全部未経験だがネット対戦できるオセロでも作るか オセロの部分は他のソフトから持ってくるけど
247 :
デフォルトの名無しさん :2006/07/15(土) 10:58:12
main thread ウィンドウの処理 port thread 接続待機スレッド access thread 一時アクセス用スレッド battle thread 対戦中に通信するスレッド こんな感じでいいのかな?スレッドも初めて使うけどw
オセロって関西だよね パイレーツもかわいかったよね
249 :
デフォルトの名無しさん :2006/07/18(火) 14:18:41
w
x
みんなすげー。当方しがない高専生でCは教科書終わったところなんだけど人対人で最低限ルールを守るくらいのしか作れない。みんな実務経験あるんですか?
>>251 まあ、さすがに実務でオセロのエンジンを開発している人は
いないだろうけどね。っていうか、そんな仕事ないし。
> 人対人で最低限ルールを守るくらいのしか作れない
いやいや。それが一番大事な部分だよ。
プログラムが「ここはコマを次に打っていい場所」って
きちんと判断できないことには、ゲームが成立しないんだから。
打っていい場所を判別できるプログラムがあるなら、たとえ弱くても
人間相手に対戦できるプログラムを作るのは簡単だよね。極端な
話、盤の端から調べていって、最初に見つけた「コマを置いていい場所」
にコマを打つというプログラムでも、とにかくゲームにはなる。
もちろん、そんなんじゃまるで勝負にならないけど。
次の手としてどこを選ぶのがいいか? という点については、
ネットなり書籍なりで少しずつまねていけばいいよ。
>>157 で既出だけど、こんな本がある。
リバーシのアルゴリズム C++&Java対応
―「探索アルゴリズム」「評価関数」の設計と実装
http://www.amazon.co.jp/gp/product/4875934289
>>251 経験無くても組めると思うけど
そんな、俺はしょぼい大学生
Cの講義と、C++の本でもある程度は組めるよ
でも、239氏のとか見てると感動する
254 :
デフォルトの名無しさん :2006/08/20(日) 16:34:29
------------------------ |リバーシ2ch _□×| ------------------------ |メニューバー | ------------------------ | | | ●○● | | ● | | | | | | | ------------------------ | お前が弱いな(緑) | | オマエモナー(赤) | ------------------------ | 送信するメッセージ | ------------------------ |対戦中 あなたの番です | ------------------------ こんな感じのリバーシ作ろう思うんだけど まだないよね?
(緑)(赤)ってポケモンかよ
256 :
デフォルトの名無しさん :2006/08/20(日) 17:03:52
239氏のやつを再うpしてはもらえまいか
単純にCでプロンプト上で動くオセロはできたけど
>>254 みたいなGUIなオセロ作るにゃ何がいるんだ?
258 :
254 :2006/08/21(月) 08:23:25
259 :
254 :2006/08/21(月) 08:28:45
今できるのはコンピューターとの対戦のみね(これもパクリだけど) これからネットワーク部を作りたいんだけど IPアドレスをなんかでやりとりしてそれを入力して対戦する感じに 仕様と思うんだけどどう?
いいんでないの?
261 :
260 :2006/08/21(月) 12:39:50
262 :
デフォルトの名無しさん :2006/08/21(月) 13:30:08
リバーシみんなオンラインとかいうのがあるけど これとは違うの?
263 :
jyo :2006/08/21(月) 13:47:30
誰が教えって下さい。お願い致します。 計算トレーニングプログラムを作成したいですが? 計算は、足し算、引き算、掛け算、割り算を選択する。 桁数は1桁、2桁をはじめに選択する。 計算式の数値はランダムで表示する。 計算式及び、答えを配列に保存し、終了後に全て計算式と答えを表示する。 問題は10問とする。 そのときの点数を表示する。 結果表示の時、一緒にかかった時間も表示する
265 :
258 :2006/08/21(月) 15:34:49
で今迷ってるのは 掲示板でIPアドレスをやり取りして戦うのか サーバーを用意して自動で取得するのかどっちかなんだよな リバーシみんなオンラインもサーバーを使ってるけど それじゃp2pの意味がない。 無料サーバー使うわけにもいかないしなw
daichatとか言う名前のp2pのチャットソフトがあるから見てみたら? 場合によっては、プロトコルをそのまま使えるかもよ。
>>266 258ではないが検索しても見つからんぞ
URL教えて栗
268 :
266 :2006/08/22(火) 23:55:19
>>267 ゴメン、確かに見つからない。
漏れのディスクのバックアップ中からも見つからないからどこから入手したか判らないや。
#何度かディスクを飛ばしているから、ロストした可能性が高いと言えば高いのだが。
使うとよさそうな技法のキーワード ・BitBoard ・MTD(f) ・Mobility ・パターン ・パリティ ・ブック ・Move Odering ・MPC ・WLD Solve
270 :
デフォルトの名無しさん :2006/11/09(木) 02:43:45
一緒にがかぶってた
オセロ奥深杉wwwwwwwww Thellの強、強+に勝てねーwwww
275 :
デフォルトの名無しさん :2007/02/21(水) 22:23:05
途中で打てなくなる事があるが。
>>276 まじすか。打てる場所がなくなったんじゃなくて?
ちなみにルールでは初期配置はこれで黒が先手。 ○● ●○
打てる場所はある。 盤上に打てる場所のマークもある。 しかし入力を受け付けないようだ。
半角で x△y(△=半角スペース)の書式で入力しないとバグります。
あれ?同じ進行を打ったら今度はちゃんと石が返った。
自分もオセロプログラム作っててそこそこ強くなったから ここで公開しようかなと思ったけどC言語じゃなかった。
作ったプログラムを対戦させたらおもしろいかも(・∀・)
保守
285 :
デフォルトの名無しさん :2007/04/26(木) 18:26:26
あげあげ
286 :
デフォルトの名無しさん :2007/06/17(日) 15:10:35
あげ
素晴らしいをもう一度定義しなおすんだ
288 :
デフォルトの名無しさん :2007/07/02(月) 00:46:08
あげ
289 :
デフォルトの名無しさん :2007/07/20(金) 20:24:53
あげ
239さんの再うpしてほしい
239さんの再うpしてほしい
誰かうpしてくれ
293 :
デフォルトの名無しさん :2007/08/18(土) 15:00:33
/
294 :
デフォルトの名無しさん :2007/08/18(土) 17:16:41
だれかうp
もっと強いのうpしようか?
wktk
298 :
デフォルトの名無しさん :2007/08/19(日) 15:49:08
コンパイル出来んぞー! gccだけでなく、gmakeも必要じゃん。 しかも「dir.hが無い」って言われた。 ANSIやISO規格にそんなん無いだろ。 もしかしてWin? ちゃんとしたPOSIX規格の環境でmake 通るようにしる!
300 :
デフォルトの名無しさん :2007/09/17(月) 05:12:20
303 :
デフォルトの名無しさん :2007/09/18(火) 07:55:56
どうだった? 強い?
305 :
デフォルトの名無しさん :2007/09/30(日) 09:43:07
ほっしゅん
306 :
デフォルトの名無しさん :2007/11/07(水) 19:48:53
最強のプログラムは何?
307 :
デフォルトの名無しさん :2007/11/18(日) 04:06:30
1 すばらしいオセロとは最強のオセロなのか? 最強のオセロプログラムは人間では全く歯が立たないのでNO
>>26 の改正版の再うpして頂けませんか?どなたか持っていませんかね
お前らがうpしてくれないからオレが最初から作ってみるから協力するんだぜ
311 :
デフォルトの名無しさん :2007/11/27(火) 16:38:34
312 :
デフォルトの名無しさん :2007/11/27(火) 16:58:39
どうせなら64bitCPU最適化版を作らないか 64bit×2のbit boardで
>>312 64bitのbit boardなら既にMMXで実現されてないか?
だとしたらそれが何か?
土日になったら作り始めるから、おまいら頼みますよ。 入門書卒業の専門情報処理科だから綺麗な物は作れないけど
>>315 最低でも人間の世界チャンピオン以上を目指すなら協力するよ
>>315 老若男女誰でも楽しめる、ほのぼのとしたオセロを作り上げてほしい
>>316 頑張ります。中級者レベルになってみせますので僕に力を
>>317 はい
>>318 最強と最弱のLv設定を出来るようにしてみたいですね
とりあえずは先手は決まってる状態から作ってみて完成出来たら
それぞれ機能を追加して行くというのが理想です。
やってみたら難しくネット上のソース読んでるだけで一日が終わってる・・・
>>26 の
┏━┯━┯━┯━┯━┯━┯━┯━┓
1┃ │ │ │ │ │ │ │ ┃
┠─┼─┼─┼─┼─┼─┼─┼─┨
2┃ │ │ │ │ │ │ │ ┃
┠─┼─┼─┼─┼─┼─┼─┼─┨
3┃ │ │ │ │ │ │ │ ┃
これ表示したかったけれど、盤の操作する関数が難しくなりそうなので
オレにはLvが高すぎる気がしてきた
>>319 難しくはならないよ
まず長さ91もしくは100のint配列を用意して各マスの状態は空き:0、黒:1、白:2、壁:3で表す
この配列の表す盤面を画面にプリントする関数を作れ
>>320 少しづつ出来てきたのでそれをうpするので、応用すれば表示出きるかYES/NOで
暇なときでいいですので答えて頂けませんか。
引き続き勉強行ってきます。
レス有難うございます
ほい がんばれ
そりゃ違うだろ for(x=1; x < 9; x++){ state = getStone(pBoard,x,y); switch (state) { case NONE: stone = '.';break; case BLACK: stone = 'B';break; case WHITE: stone = 'W';break; default: stone = 'E'; } printf("%c",stone); printf(" │"); } ↓ for(x=1; x < 9; x++){ state = getStone(pBoard,x,y); switch (state) { case NONE: printf(" "); break; case BLACK: printf("●");break; case WHITE: printf("○");break; default: printf("変"); } printf(" │"); }
>>324 盤の表示だけは完成しました。あとは動きそうかな?程度に完成したあと
AI等実装していってみます。レス有難うございました。
盤は壁無しでやったのか 壁を省いた理由は何かあるの?
initBoardとgetStoneもちょっとおかしいな
>>328 5389.txtを見ての感想
Boardの配列[10][10]という宣言では添え字は[0〜9][0〜9]を指定します。
紙に書くと判り易いと思いますが、座標ズレが発生しています。
>>329 ばーか。
>>328 折角壁のスペースを確保しているのに、壁を無視して配置している希ガス。
331 :
329 :2007/12/03(月) 14:22:10
縦軸も横軸も数字になってるけど、普通は片方を アルファベットにするもんだよ。
BOARDSIZEをdefineしてるのに10は決め打ちという不思議
>>329-331 こんなにミス、無駄がある現実・・・
配列を全部書くとイメージが凄いしやすいんですね。
>>331 のtxt頂きました有難うございます。
>>332 のstaticとか縁の無い関数でしたが今少し使い道が分かった気がしました。
配列の初期化の方法でこういう方法がありましたかw参考になりました。
指摘コメントまで有難うございました。
>>333 列をアルファベットにするのが一般的っぽいので書き直す事にします
>>334 そこも直した方がいいみたいですね。ですがBOARDSIZEにしたら逆に見た目で
判断しずらくなったので長ったらしくなるまで少しの間数字にしておこうか迷う
>>335 オセロの派生版を作る野望がホンの微かでもないなら、8の決め打ちでもいいんじゃね?
BOARDSIZEを7にしたらどうせ同じルールじゃできなくなるわけだし。
すいません、PCが壊れてしまい修理してました…。やっと戻ってきて再開できそうです。 派生盤等は現状で自分には考えられませんので決め打ちにしてみます。 PC戻ってきてもOCN規制で2chに書き込めず携帯から2ch発見しましたw やれなかった分追い込みます。
プログラム初心者だが俺も作ってみようかな
がんばれ 協力するよ
341 :
339 :2007/12/15(土) 08:44:36
お疲れさん
>>341 勝手にアドバイスさせてもらうと、
isPlaceable() 内のdx, dyを
dx[] = {-1, 0, 1, -1, 1, -1, 0, 1};
dy[] = {-1, -1, -1, 0, 0, 1, 1, 1};
とすると、ループで書ける(x+dx[i]*count の形で表せる)のですっきりするよ。
同様にplace() も簡潔に書けると思う。
344 :
339 :2007/12/18(火) 00:58:47
346 :
339 :2007/12/18(火) 01:48:53
>>345 差分(打った場所、引っくり返した場所)を取っておこうかと思うのですが
はたしてこのままでいけるのかどうか実はよくわかってないです・・・
俺も大昔プログラミングの勉強する時にオセロを作ったよ。 作りこんでいくと遊び感覚でプログラミングの基本が勉強できるから良い課題だと思う。 中級を目指すなら、そのうち以下くらいは挑戦してみては? (今は意味不明かもしれんが・・・) ポインタ→各種関数へのデータの引渡し 構造体→各種状態の保存 共用体→汎用関数からのステータス ツリー構造→着手進行から高速サーチ可能なBook 再帰呼び出し→MinMax探索(αβ探索) 線形リスト→探索関数内での空マス保持リスト ハッシュテーブル→探索局面の置換表 ソート→Move Ordering F/W開発するハードエンジニアには、 ビット操作(含むMMX)→ビットボードによる高速化 同時実行率の高いコードの作成→処理の高速化 CPUキャッシュヒット率の高いコードの作成→処理の高速化 なんかも面白いと思う。 モンテカルロ法とか使って囲碁のプログラム書くのも良いけど、 基本の勉強にはオセロの方が色んな意味でわかり易い。
348 :
デフォルトの名無しさん :2007/12/23(日) 14:31:25
むりやり勉強とオセロを結びつけなくて良いよ
ど素人乙
モンテカルロ法はマルチスレッドの入門にいいかも
ニューラルネットワーク→葉局面評価関数
352 :
デフォルトの名無しさん :2008/01/16(水) 03:59:48
オセロ作るのにスタックを用いてるソース等見るのですが スタックのがいいのですかね?
すいませんageてしまった
>>352 スタックを用いるといいのは盤面をintか何かの配列で表現するとき。
bit boardで表現するときは盤面全体をコピーしたほうがいいからスタックは不要。
>>354 配列で表現してみた方が自分にはイメージしやすいので、スタックを考慮して考えてみる事にします
レスありがとうございました!
論理的にしらみつぶしで先読みするタイプのものではなく 実際に対戦してみて経験を積むようなプログラムって どのように書けばよいのでしょうか
>>356 強化学習が当てはまるけど
それぞれ独立した手法で通常は併用されるもの
宣伝乙
360 :
デフォルトの名無しさん :2008/01/21(月) 01:25:32
361 :
デフォルトの名無しさん :2008/01/23(水) 00:02:55
強化学習面白いな 確かHeraklesも使ってるんだっけ
362 :
デフォルトの名無しさん :2008/01/27(日) 06:19:42
AIを実装しようと挑戦中なのですが、MiniMax法について質問させて頂きます。 先手、後手ともに最善の手を取った場合を数手先読みし最善の場所を 決めるのがMiniMax法ですよね? いざ実装してみようと試みたのですが最善手を評価する際のMAXとMIN を以下のようにしたのですが、このようなやり方はダメな例ですか? まずBord[10][10]というメインとなるボードと、それとは別に8*8の盤面にあらかじめ 数値を入れた盤面 (この数値の差分から数手先の最善手を決める) を用意しようと 考えています。
363 :
362 :2008/01/27(日) 06:37:24
すいません何言ってるか分からないですよね。とりあえず
>>362 の方法で作ってみます
その上でどうか尋ねてみます。
MinMax法やばす・・・難しすぎるんだけど とりあえずMiniMax法を作る上でのコツか何かありませんか
NegMax の方が実装は楽だが,minmax が作れないんじゃ一緒だろうねぇ.肝の部分は再帰使って数行で書けるんだけど. プログラム例が載ってる本でも買えば?
int minmax (int min, int max) { for (i = 0; i < n; i++) { move (i); v = -minmax (-max, -min); undo (); if (v > max) return v; if (v > min) min = v; } return min; } 今30秒くらいで書いたけど基本はこれだけだと思う
>>365 ネット上の読み物で出来たらいいんですが、買うことを考えるべきですかね・・・
>>366 みてみるとundoとかいう機能を作りずらい作りになってしまっている予感です
ネット上の拾いものからその行程が出来ないか試してみます
参考例ありがとうございました
書籍購入を躊躇うようなら、その程度ってこった。
NegaMax、MinMaxくらいならネットの説明だけでも十分すぎる。 まじで。
そんな脳を俺に下さい・・・ #define BOARD_SIZE 8 int Board[10][10]; 自作関数1: ・x と y の座標を引数に貰い、Board[x][y] ( A1と打ったならば x = A(1)、y = 1 ) について8方向を調べたあと置ける場所があるならばその場所を 返し、ひっくり返す。 ・調べる方向は左上からy行x列方向に。 ・手を指して次の盤面の状態にする
先手黒から見た評価関数の一部の例
>>366 での
for (i = 0; i < n; i++) {
move (i);
v = -minmax (-max, -min);
undo ();
の部分だと思います
─────────────────────────────────────────
/* ネット上の拾いものの解説 */
while( 打てる手がある ){
@手を差して次の盤面を作る;
Aval = minimax( 盤面, depth - 1 ); 一手先を読む再帰。3手まで読んでみるつもり
B盤面を1手戻す;
─────────────────────────────────────────
/* 上記を例に作ってみた */
blackturn( int **board , depth ) 2次元配列のポインタと、3手読みたいので3を貰う
{
int val;
if( depth == 0 ) return 評価値(盤面);
for( y=1; y<=BOARD_SIZE; y++ ) { 盤面全部を検索し置ける場所を8*8全部調べる
for( x=1; x<=BOARD_SIZE; x++ ) {
@ if( 自作関数1 ) { board[x][y]に石が置けるならひっくり返してみる
ターンを次にする;
色を変える;
A val = blackturn( &board , depth - 1 );
B問題点 ここの処理がスタックを用いておらず出来ません。通常どのように行って居るのでしょうか?
長々と見ずらく申し訳ないですが伝わって頂ければ幸いです
石を返せることが分かってから返す際に石を置いた場所と返した場所の情報スタックに記録しておく 返した場所の代わりに方向とそれぞれの方向で返した数を記録してもいい
>>372 ネット上からスタックの例を見て条件満たせるよう作ってみます。
レスどうもありがとうございます!
もう世界一のプロが敗北してだいぶ経つんだし強さはもういらないだろ。 あとは人間との対局で統計データを取りながら 自動的にぎりぎりの強さで負けるような ナチュラルな強さ調整機能をつけてくれ。
黙れ門外漢
と門外漢が申しております
379 :
デフォルトの名無しさん :2008/01/28(月) 00:25:11
お前らこういう言い合い好きなんか
見るのも仕掛けるのも受けてたつのも好きだ
まぁそれくらいしか能が無いしな がんばれ
石を返す処理って1方向ずつじゃないとダメっぽいんだな・・・ 糞コード全開だぜ・・・
>>372 の続きでスタックの質問なのですが
石を返す”場所”をスタックに書き込む処理というのは
Board[x][y]というBoardがあったとしますよね。
f5という入力の場所の記録を行う場合には
f5という数値を入れるのでしょうか?
スタックには
← スタックポイントがここ
方向
石の数
場所
方向
石の数
場所(F5) 1番最初のデータ
という風に入れればいいのでしょうか?
>>383 これ無視して下さい。一から作り直すことにします
誤爆か?
誤爆か?
389 :
デフォルトの名無しさん :2008/03/23(日) 01:42:36
あげ
390 :
デフォルトの名無しさん :2008/06/19(木) 01:43:37
再帰使わないで囲碁プログラムできないか?
できるよ
つーか,囲碁でも将棋でも再帰は使わない方が普通だと思うが
スレ違いなんだから話を引き伸ばすなよ
アルファベータ検索とか再帰だろ
概念的にはそうだが,実際は自分で管理してループにする方が普通 全データローカルスタックに取るわけにも行かないし
評価関数のパラメータに使う盤面の特徴量ってどんなのがありますか? パターン、パリティ、クアッドパリティ、モビリティ、ポテンシャルモビリティ、他にあれば教えてください。 思いつきでもかまいませんので。
思いつきとしては、安定度みたいなのがあっても良い気がする。 αβ探索で深読みすると浅読みで良手だったのが悪手になったりするでしょ? これって、その局面を進めていくとそういう局面を発見するからだって考えがちだけど、 単純に考えれば、浅読みの評価値が間違っているとも言える訳で。 評価関数が、局面の善悪を出力するのなら、1手読みで十分な筈でしょ? 俺としては、深読みが有効なのは評価値にはランダムな誤差があって、 何段ものミニマックス探索がその誤差をフィルタリングする結果、 安定度の高い(評価誤差が少ない)局面を選択できるからだと思ってるんだよね。 今はパターンの重みを決める時とかは、結果的にそのパターンが現れた時の 最終的な石差の平均値に収束するように決めてるでしょ? でも、実際にはそのパターンが現れた時に勝つこともあれば負けることもある。 勝てる局面で下手をして負けるってこともあるけど、 実はそうではなくて、そのパターンを含む局面は本質的に不安定なのかもしれない。 と、考えてみると安定度というパラメータが見えてくる。 パターンAは50%は大負けで50%は大勝だとすると 普通に学習させるとこのパターンは勝ち負けに影響しないと判断されて重みは0になる。 10%は僅差負けで90%は大勝のパターンBと100%僅差勝ちのパターンCでは、 10%は僅差で負けるパターンBの重みの方が大きくなるのが普通だよね? それで良いんだろうか?ってこと。 これらのパターンが選択可能な時、より確実に勝ちたかったら、パターンCを選びたいよね? 安定度っていうのはそういうこと。 今の評価関数にはこういうのが入っていないと思う。
>>398 評価関数が正確なら1手読みで十分だけれど、
逆に、
局面が最後まで読めるのなら
評価関数は石数を数えるだけで良いと考えると
読みの深さを増やすほど強くなりそうなことがわかる
だから、評価関数を正確にすることだけではなく
計算速度が速い評価関数が使われてるんだ。
>今はパターンの重みを決める時とかは、結果的にそのパターンが現れた時の
>最終的な石差の平均値に収束するように決めてるでしょ?
評価にMinimaxが使われているのだから、
評価関数のスコアも平均値ではなくて、
自分、相手が共に評価関数の決める最善手を指したときのスコアに
近づくようになってると思う。
だから
>パターンAは50%は大負けで50%は大勝だとすると
>普通に学習させるとこのパターンは勝ち負けに影響しないと判断されて重みは0になる。
>10%は僅差負けで90%は大勝のパターンBと100%僅差勝ちのパターンCでは、
>10%は僅差で負けるパターンBの重みの方が大きくなるのが普通だよね?
こんな風に勝率で評価関数を決めていないと思うんだが。
もし、そのやり方に沿って決めるなら
Minimax法が使えなさそう。
>>399 評価関数が局面から一定の値を導出するのであれば(極端な話、ハッシュ関数でも)
AIとしての強弱はともかくMinimax法は使える。
>Minimax法は使える はぁ?
ひぃ?
ふぅ。
へぇ・・・
hint : static evaluation function, heuristic evaluation function
Minimaxを使う目的を分かってない人が混ざってるようだ
雑魚が混ざってきたか
408 :
デフォルトの名無しさん :2008/08/11(月) 02:16:50
>勝つ可能性が一番高い動きを取り続けた。まるで機械のようだった ワロタ
ミニマックスとアルファベータの違いがわからん
>>366 に枝狩りの処理を入れたらアルファベータ?
どうでもいいけど評価値得てないよ・・・ minとmaxをアホみたいに
引っくり返してるアホ関数だなそれはw
411 :
デフォルトの名無しさん :2008/10/20(月) 02:17:59
age
412 :
デフォルトの名無しさん :2008/12/04(木) 20:42:21
ほす
読む->引き分けか勝ちが出る 優先順位に置く 完成
>>374 >もう世界一のプロが敗北してだいぶ経つんだし強さはもういらないだろ。
勝ち切る手のDB出来ちゃったからな
>あとは人間との対局で統計データを取りながら
>自動的にぎりぎりの強さで負けるような
>ナチュラルな強さ調整機能をつけてくれ。
序盤20手:大負けしない手を打つ
中盤20手:引き分けか2手差で負けるくらいの手を打つ
終盤20手:全力で勝ちに行く
このくらいでナチュラルに強い打ち手になると思うけど
2手差->2石差 すまんこ
416 :
名無し :2008/12/25(木) 01:19:00
オセロ懐かしい 父親が森田オセロ(8bitパソコン)より強いヤツをめざして、ORや多次元尺度など色んな手法を試していたな。
プログラム作成者の能力以上の強さにはならない件
418 :
デフォルトの名無しさん :2008/12/26(金) 22:34:13
関係ない書き込みばっかで本題が全く進行してねぇw
420 :
デフォルトの名無しさん :2008/12/31(水) 01:16:31
>>419 NetBSD/MIPSだが、動かないぞ。
ソースは無し?
思考ルーチン以外のところは終わっているテンプレートオセロプログラムってあるの? ないにしても、どういうテンプレートにしておけば組み込みやすいのだろうか? データ構造とか、必要な関数とか、それらの関係性とか。 前に(学部でC++習ったときのプロジェクト)オセロ作ったことあるんだけど、 今見ると、この構成じゃ、思考ルーチンいれにくいなぁと思ったのであります。
424 :
デフォルトの名無しさん :2008/12/31(水) 12:42:09
>>417 技術的にはそうだけど実際の強さは自分より強い物が作れるだろ
第一技術的に高度な物が強くなるとは限らないし
チェスのチャンピオンに勝ったプログラムだって プログラマがチャンピオンより強かったわけじゃないしな。
426 :
424 :2008/12/31(水) 12:45:25
例え話をすると素数を出すプログラムを作った人がその素数をそこまで数え上げられるわけじゃないだろ? そういうこと
神の一手に一番近いのはプログラムかもしれないな
何を今更
Googleの社員の個人情報がググれるみたいなもんか
>>422 あらかじめ独立化することを考えておかないと、修正は難しいだろうね
どうせなら思考部分を別プロセスにすると、プログラム同士で対戦とか
簡単に出来て面白そう
Windowsだとoverhead大きいかな
最後の行関係ない
432 :
デフォルトの名無しさん :2009/01/06(火) 15:41:18
オセロで他のプログラムと対局するのは GGSっていうサーバを介するのが一般的
「神の一手は誰でも打てる。2手目以降の全てが平凡なのだ」 ――俺俺
435 :
デフォルトの名無しさん :2009/01/14(水) 20:53:49
第二法だが、コマンドを打つ。 光学的なコマンドを打つ。 光学的なコマンドを打つ。 物理段差という肉体計算の処理です。 この手の光線にきづかないように。 1+x+x+1+a+x+x+a+x+x+a+a+a+a+a+a+1+a+a+a+a+a+a+a+a+a+a+a+a+a+a +a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a +a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a +a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a+a +a+a+a+a+a+a+a+a+a+a+a+a+a a 1
脳が無くなった。
444 :
デフォルトの名無しさん :2009/01/18(日) 22:02:33
者を言うってなぁに?
早見優ー!
ゆういちくんか
447 :
デフォルトの名無しさん :2009/02/13(金) 06:22:51
>>453 で受けを取らないとバカにされそうで怖い><
NegaScoutでも実装したらどうだ? つーかオセロで手を戻す時に必要なのは(2次元配列で) @パスのフラグ A打った場所 B打つ一手前がパスなのかのフラグ ぐらいか?
オープンソースなオセロプログラムのソースコードでも読んでみたらどうだ?
450 :
デフォルトの名無しさん :2009/03/02(月) 06:38:17
そもそも2次元配列不要。 単純なスタックで済む。しかも速かったりする。
451 :
SimGlobe :2009/03/18(水) 01:11:17
シュミってるだけで程度が知れるな
趣味のソフトだからなw
この程度で金取るって・・・
は?
め?
てst
459 :
デフォルトの名無しさん :2009/10/23(金) 20:54:35
リバーシプログラムの作り方読んで作ったんだけど これには載ってないもので是非実装しろっていう技術ある? あれば教えてくださ
る方は写真うp
何の写真?もしかしておっぱ
っぴー?
全部探索してる人がいたな
464 :
デフォルトの名無しさん :2009/11/01(日) 04:28:15
465 :
デフォルトの名無しさん :2010/07/03(土) 00:06:44
あげ
sage
467 :
デフォルトの名無しさん :2010/07/28(水) 19:17:07
a
468 :
デフォルトの名無しさん :2010/09/17(金) 23:44:17
できたの?
ぴゅっぴゅっぴゅっ
470 :
デフォルトの名無しさん :2010/10/07(木) 13:29:20
471 :
ななし。 :2011/07/27(水) 19:06:50.52
カ オ ス ラ ウ ン ジ ゆ る せ な ぁ い ー
shine
473 :
デフォルトの名無しさん :2012/06/19(火) 15:27:49.51
何がすばらしいの?
オセロ
1000 :uy ◆xVOGOO9ev6 :2012/06/23(土) 12:35:29.68 俺は動的言語の問題点をいくつあげてもwwwww 静的言語よりはマシだと確信してるわwwwwwwwwwwwwwwwww 静的言語の問題点をなぜ挙げないかって?? 見放してるから、問題点を指摘さえしないってことだよwwwwwwwwwww 気づけバカwwwwwwwwwwwwwww
476 :
できたかな??? :2012/07/21(土) 14:57:37.03
テスト書き込みですぞ(つд⊂)
477 :
sage希望 :2012/07/21(土) 14:59:57.76
(・∀・)サテオシゴト・・・
478 :
デフォルトの名無しさん :
2012/07/21(土) 15:49:21.23 さあ、開発現場に戻ろう!