1 :
デフォルトの名無しさん :
2006/12/22(金) 09:58:39
2 :
デフォルトの名無しさん :2006/12/22(金) 10:02:47
オセロだろ
最強はSAIOだよ
4 :
デフォルトの名無しさん :2006/12/22(金) 11:48:12
再帰ですれば?たしかオセロはコンピュータに勝てないはず、世界チャンピオンでも
三ヶ月以内ってところが胡散臭いな
実はアイディアとソースが欲しいだけ 皆解ってると思うが踊らされないように
7 :
デフォルトの名無しさん :2006/12/22(金) 12:00:55
>>2 オセロはタイトルに使うと著作権料とかとられないですか?
>>3 手に入るフリーのやつで更新もやっているではWZebraでは?
>>4 コンピュータの最強に勝つことが目標です
>>5 アイデアを結集すれば可能なはず
8 :
デフォルトの名無しさん :2006/12/22(金) 12:03:35
>>6 外国製のソフトに負けている状況なんですよ
力を結集して破りましょう
三ヶ月か 卒論など真っ盛りの時期ですね
10 :
デフォルトの名無しさん :2006/12/22(金) 12:06:17
このスレで三ヶ月で世界最強を破ったら、次は北朝鮮の世界最強の囲碁プログラムを超えるんです
11 :
デフォルトの名無しさん :2006/12/22(金) 12:08:11
オセロ 商品名 つまりよくある ラップ言えば、何もかも「サランラップ」 というのと同じである 「宅急便」もそうだ
12 :
デフォルトの名無しさん :2006/12/22(金) 12:17:14
13 :
デフォルトの名無しさん :2006/12/22(金) 12:19:01
14 :
デフォルトの名無しさん :2006/12/22(金) 12:21:22
>>14 そのスレは既に進んでいるようだが?
>パソコンで動くアルゴリズムを作った方が簡単でしょ?
意味不明
アルゴリズムはPCにも携帯にも基本的に依存しない
開発者はPC上でテストしてるだろうし
16 :
デフォルトの名無しさん :2006/12/22(金) 12:29:48
終盤の定跡を強化したいんですがどうしたらいいですかね? 残り1つ、2つ、3つ、4つの局面をすべて生成して勝ち負けを記録するのが いいか、どこから実戦譜をみつけてきてその勝ち負けを記録するのがいいか...
17 :
デフォルトの名無しさん :2006/12/22(金) 12:33:03
>>15 でも、パソコンでやれば環境(ソフトもメモリとかも)はそろってて
あとは思考部分を作れば良いだけなんです
強いプログラムを作る(評価関数の決定とか)にはメモリ、CPUも大事だし
ここで作ったものが
>>14 のスレにも生かされるとおもいます
18 :
デフォルトの名無しさん :2006/12/22(金) 12:34:57
>>16 ちょい修正
残り15つ、16つ、17つ...くらいからですかね?
あまりに短手数は記録する必要ないですからね
とりあえず sageろw
>>14 のスレの開発者がアイディアパクリたくてスレ立てたのか
>>18 残り15手の局面が一致する確率でも考えてから言えよ。
基本的に
>>1 は勉強不足。
ここはム板だ。自分でアイディアだして実装できるくらいになってからスレ立てろ。
教えて君、くれくれ厨にしか見えない。
他板まで宣伝しまくっててキモイ。
結局
>>6 でFAなんだから、アイディア提供したりして踊るんじゃなくて
>>1 を踊らせて楽しもうや。
どうしても
>>1 の玩具になりたいってマゾな奴は真剣に考えてくれてもいいがw
>>4 オセロなんてこんなに奥が深いゲームなの?
だれか俺にわかりやすく説明して
奥が深くないからコンピュータが人間に勝てるんじゃない?といったらオセロ好きが怒るかもな。 奥が深くないというより、コンピュータにとっては探索範囲が狭くて単純。
26 :
デフォルトの名無しさん :2006/12/22(金) 13:08:18
>>25 ありがとうございます!
>>21 終盤データベースを作るのはやめました
なぜならば終局個数は、回転、左右反転、前後回転で減らしても
2^64/16もあるから... 2^60個のパターンも記録しておけないから
27 :
デフォルトの名無しさん :2006/12/22(金) 13:10:38
データベース無し、外部からの棋譜入力なしでいきましょう! でも、置換表(ハッシュテーブル)はいれまる方向で
28 :
デフォルトの名無しさん :2006/12/22(金) 13:13:40
ハッシュテーブルの領域は、2^24個くらいですかね どのように局面を24bitに変換するか...?
29 :
デフォルトの名無しさん :2006/12/22(金) 13:24:05
みんな実は、乗り気じゃないの? 今から10日以内にオセロプログラムを作り上げるから、それに負けたら参加してくれる?
31 :
デフォルトの名無しさん :2006/12/22(金) 13:35:32
プログラミングする奴はごまんといるから、戦略をどうするかだね。
フリーソフトでオセロソフトを出す プレイした人のデータを集めて記憶 どのパターンにも最適の手を出せるようにしたら余裕だろ
全部のパターンをとっておいて、そこから手を繰り出すのは 卑怯な気がしないでもないw
35 :
デフォルトの名無しさん :2006/12/22(金) 14:19:12
全パターンは記録出来ないぽ 異なる終局の数だけで2^60あるので それぞれに次の一手を1バイトで表したとすると 2^30ギガバイト必要ぽ
36 :
デフォルトの名無しさん :2006/12/22(金) 14:40:26
とりあえずsageたらどうですか
>>38 白、黒、空の3つを64並べたら3^64種類あって回転、左右反転、前後反転を
同一視すれば3^60になる
局面数は 2^60 〜 3^60じゃない?
>>40 あり得ない局面が(単純に生成した物の)90%だとしても一桁減るだけだ
これでもメモリなどに記録することは出来ないな
容量とかどうでもいい 全パターン記憶しろ それこそ最強だろ
>>42 4.23911583 × 10^15 テラバイト程度必要
勝ち負けが判定出来る少し前の所での評価関数が重要だな 序盤は、相手の差し手を少なくするように打つのがいいな あと、終盤の詰み(勝ち負け)判定の高速化だな これはZebraのやり方を真似ると良いな
コンピュータ同士の終盤戦では、 20手以上残っている段階で両者ともゲームの結果を読み切ってしまう
トップクラスのプログラムでは、これは通常残り24〜30手の時点である。
プログラムはどちらの勝ちかがわかると、次は最善手(スコアが最良になる手)を探しはじめる。
完全読みは通常勝敗を判断するよりはるかに困難で、残り23〜28手から始まるのが普通である。
評価される変化の多くは、悪手が含まれており、その悪手を咎める手を探すときには、
必ずしも最善手である必要はなく、十分な反駁手のいずれかを見つければよい。
プログラムができるだけ早く読み切りを行えるようにしたいので、思考時間が最も速くなる反駁手を探すことは意味がある。
これは打った後に相手の着手可能数が少なくなる手を、中盤より優先して探索することにより実現できる。
この手法は一般に、速さ優先探索 (Fastest-First heuristic) と呼ばれる。
http://www.amy.hi-ho.ne.jp/okuhara/howtoj.htm
以前ヤフーオセロでWZebraを使って20手以上で挑んだが倒されたことがある
ある手順を用意すれば人間でも勝てたりするんだけどね
とりあえず
>>29 に期待
48 :
デフォルトの名無しさん :2006/12/22(金) 18:46:11
オセロあたりだと煮詰まった感があるよな。 まあ、遊びで追求する分には丁度いいくらいかな? 定石や先読みをもちいず、完全に一手先のロジックだけで作れたらおもしろいかもね。
8x8なんてぬるいから、10x10に拡張しちゃわね?
50 :
デフォルトの名無しさん :2006/12/22(金) 18:59:44
どうせなら8x8x8にしようぜ
51 :
デフォルトの名無しさん :2006/12/22(金) 19:18:30
サランラップ(Saran Wrap)は、旭化成の持つ登録商標で、 「宅急便」がヤマト運輸の登録商標である
最適化理論に詳しい人いますか?
何そのアバウトで唐突なネタ振り
パターンを使った評価関数の自動チューニングに必要なので。
数学板かシミュレートあたりに行けば良いと思うよ
>>1 I do not have Windows.
the first, Please give me Windows95.
I'll give you Windows3.1. It's the most reliable version.
Just a nice idea. I think I hardly have the.
オセロって、第1手は、黒で、置ける場所は4箇所ある。 でも、どこに打っても、盤面を回転させれば、同じ結果 となり、結局、第1手における置ける場所は1箇所しかない。 続く第2手目の白には、3箇所しかない。 こう考えると、全ての盤面は、限られた有限個の状態しか ありえないのではないか? 毎回計算させるより、盤面の全ての状態を記憶しておけば 世界最速最強のオセロができる。
>>62 勿論有限個だが、膨大な有限個だから無理。
他のスレにこのスレのリンク貼ってageてまわってるのは
>>1 か?
何が何でも急いでプログラム書かせようという風にしか見えないぞ
普通に進行すれば良スレになるかもしれないのに…枯れた分野だからあやしいけど
>>66 だな。何てーか、ただクレクレ言ってるようにしか見えなくて興をそがれる。
自分は別口でリバーシのプログラムには挑戦しているが、
BearRevに対応するつもりもないし、期限を定めるつもりもない。
マイペースでやらせてもらうさ。
68 :
1 :2006/12/23(土) 21:51:09
1です
8×8を解けるほどのアルゴリズムに出来上がったかもしれないです
あと9日以内にコーディングして動かせる所までいくとおもいます
スレ終了かもしれません 動いたらうpします
あと質問なんですが(これを教えてもらえると完成が速まります)
bitボードを使ったときの差し手生成部分がよくわかりません
誰か解説おねがいします
http://www9.atwiki.jp/othello/pages/48.html ここに書いてあるんですが...簡略して教えてください
69 :
1 :2006/12/23(土) 21:57:18
あと、すでに1年以上、将棋プログラムの作成経験があります まだ完成はしていないですが... 将棋の経験を生かします 定番の棋譜からの学習、評価関数の最適化使いません 終盤の勝敗判定アルゴリズムも使いません 浅く読んで、手を並び替えてから深く読むという手法も使いません 今までのオセロプログラムではないアルゴリズムだとおもいます
よくわかりませんと言われても、簡潔に書かれているし書いてある通りに実装しろとしか言えない 原理を理解していなくてもプログラムに落とすことはできる
71 :
1 :2006/12/23(土) 22:01:33
オセロのほうがいいなあ
73 :
1 :2006/12/23(土) 22:03:23
>>70 すみません
原理を教えて下さい
もしかしたらより速くできるかもしれないので
>>71 DLLも作り方さえも自分で調べられないのなら諦めろ。
プログラミング自体向いてない。論外だ。
75 :
1 :2006/12/23(土) 22:13:28
>>74 実際に動かしたことがある人がいれば聞いた方が速いじゃないですか
説明書が付いてないんです
↓この辺を書き換えれば良いんだとはおもいますが...
/*** 定石を調べる ***/
if ((nPos = Jsk_FindMove(szBoard, JSK_RANDOM, cPiece)) != 0)
return Rvs_CreateMsg(RVS_INDEX_TO_X(nPos), RVS_INDEX_TO_Y(nPos), "JOSEKI", (float) 0/*State*/);
/*** 駒を置く位置を決める ***/
for (x=1; x<=8; x++)
for (y=1; y<=8; y++)
if (Rvs_CheckPieceXY(szBoard, x, y, cPiece) == TRUE)
return Rvs_CreateMsg(x, y, "RVS MESSAGE", (float) 0/*State*/);
>>73 教えて教えてばかりだな
どこが理解できていないのかも提示しないで何を教えろというのだ
ちなみにbitboardを使っても所詮数倍程度の高速化で小手先の最適化に使うものだ
とりあえず
>>1 の考えた画期的なアルゴリズムの方に専念して完成させてくれ
そしたらbitboard化してやるよ
77 :
1 :2006/12/23(土) 22:19:20
>>76 いちおうbitボードを標準で使うんです
それで考えつくアルゴリズムは一マス目から順に取れるか、取れないか判定していく
というやつなんですけど...
これで作っておけば良いですか?
ここはお前ような奴が来るところではない。 もっと腕を磨いてから出直しな。
79 :
1 :2006/12/23(土) 22:28:50
68のやつは意味不明ですけど... ●○●□●○○□ などを3進数に対応させて、黒の手番でおけるところを始めに記録しておけばOKですか?
80 :
1 :2006/12/23(土) 22:29:46
上のやつだと8番目だけに黒がおけると記録するわけです
>>77 char配列で管理してようが64ビット変数だろうが作ってくれればbitboard化してあげるよ
82 :
1 :2006/12/23(土) 22:34:52
>>68 のbitボードのやり方と、縦と横と斜めを3進数で保持しておいて配列を参照するのは
どっちの方が速いですかね?
局面の更新スピードも違ってきますよね
>>82 局面のデータ構造によって速さがどう変わるかは考えなくていいよ
俺がやるから
char board[8][8];
のような局面管理でもいいから完成させてくれない?
84 :
1 :2006/12/23(土) 22:39:21
64bitパソコンでは無いので、縦横斜め、白黒反転の3進数表示でいきます 縦8本、横8本、斜め8本、白黒反転でこの2倍 を保持する方向で行こうとおもいます
85 :
1 :2006/12/23(土) 22:39:59
>>1 のプログラミングのスキルってどれくらいなんだろう?
どの言語でやってるの?
>>86 ま、ソースが出てくれば両方わかるでしょ。
最強の相手を作る方法がわかった。 コンピュータの負けが確定した時点で、 「さっきの間違い。本当はここ」と言って、 やり直しをすれば、絶対に負けることはない。
>>88 試合ではそれをやっちゃだめだからしないけど、
定石の自動生成や最善進行を探すのはそんな感じ。
90 :
1 :2006/12/24(日) 02:28:53
bitボードでは、64bit + 64bit = 16バイト使いますが 13バイトで局面を記録する方法が見つかりました 風車的配置にするんです bitボードより良いかもしれないのでとりあえずこれで作ってみます あとでbitボードを作ってくれる人がいればそれと速度を比較しましょう 3の5乗 < 2の8乗 ですから次の様に記録すればよいです 局面を進める、戻す速度が3バイト分短縮できます あと手を生成するとき3進数の計算がある程度やってあって良いです □◆■◇◇◇◇◇ □◆■■■■■■ □◆■◆◆◆◆◆ □◆■○○■◇□ □◆■○○■◇□ ◇◇◇◇◇■◇□ □□□□□■◇□ ◆◆◆◆◆■◇□
91 :
デフォルトの名無しさん :2006/12/24(日) 02:45:15
ボードを指し進める、戻すときは、差分計算か、コピーを取っておくのが ありますけどbitボードでは、コピーが普通なんでしょうか?
>>91 配列盤面は差分、bit boardはコピーが普通。
93 :
1 :2006/12/24(日) 02:56:29
>>92 ありがとうございます
>>86 c++ですが、まだ打ち込んでいません
スキルは、第一種情報処理技術者というのもってます
あと、国立大学院卒(数学)です
>>90 合計のサイズが少なければいいってもんじゃないよ。
変数が細かくなって13個に増えるし石を返す操作も複雑になる。
詰め込みすぎると却って遅くなるよ。
まぁでも自分はこれ思いつかなかった。
教えてくればっかり言ってないで 作ったものとりあえずうpしてみろよ。 そうすりゃもっと建設的な意見を聞けるって。 自分で調べる能力が無い人間にプログラムなんて向いてないよ。 つーかあんた本当に自分で作る気あるの? これ学校の宿題かぁ?
> 期間は三ヶ月以内で頼む > どんどんアイデアとプログラムを頼む って言ってるから、アイデアもプログラムも自分で出す気はないんじゃないかな。 期間限定なのもうさんくさい。
97 :
1 :2006/12/24(日) 03:18:10
宣言だけならプログラマでもできる
>>93 とりあえずルール通りに動くプログラムを作るスキルはあるのか?
速度とか関係なく。
>>97 だからそれうpしてみろって・・・
何が言いたいんだ、あんた?
ここまで引っ張るからにはすでに何かそれなりに動くものを作ってるんだろ?
俺は何も書いてないと思ってるけどね。
ここの人本当やさしいね。
101 :
1 :2006/12/24(日) 03:34:29
>>99 出来上がったら分かります
ルールは知ってますけど、バグが有ったら動かないかもしれません
プログラム経験はほとんど無いです...
一年以上将棋作ってますけど、まだ一行も打ち込んでません!
102 :
1 :2006/12/24(日) 03:38:37
>>100 でも、オセロは簡単なのであと8日以内に完成します!
将棋が難しい、手間がかかる点は無駄な手を省くところなんです
枝刈りっていうやつです
そこを何ヶ月も開発し続けました 未だに続けてます
将棋でも、オセロでも、最善手を一手のみ生成できれば
評価関数は全く要らなくなります
103 :
1 :2006/12/24(日) 03:43:05
といってもそれは、無理なので、なるべく最善手らしい物をいくつか生成して読みと評価関数を使います
>>101 なんつーか学校の宿題やってくれ君なのは見え見えだが。
>ルールは知ってますけど、バグが有ったら動かないかもしれません
そういうこと言ってんじゃなくて・・・
現時点でできているものを途中でもいいから出してみろよってことだよ。
完璧に動くものを期待なんてしちゃあいないよ。
>一年以上将棋作ってますけど、まだ一行も打ち込んでません!
相当な大物だな。
>>100 俺は取り合えずあと8日間は待つつもりだよ。
(期待はしてないけど)
>>102 >でも、オセロは簡単なのであと8日以内に完成します!
おめでとう。
自己解決できてるならえーんちゃう?
8日もかけるって事はただルール通りに動くだけじゃないよね?
108 :
1 :2006/12/24(日) 03:51:47
109 :
1 :2006/12/24(日) 03:55:13
難易度的には、8×8を解く >>>>> WZebraを倒す の訳ですが、 WZebraにも負けるようでは、 今まで一年以上(将棋に)費やしたのが無駄になりますね
>>108 >最善手らしい物をいくつか生成して読みと評価関数を使います
と言ってるので「解く」ではない。
111 :
1 :2006/12/24(日) 04:06:44
>>110 解く=先後どちらが必勝かを決定する ですよ
例えば、最終局面や、その一手前などは勝敗は決定してますよね
するとその一手前も、決定できます
局面の勝敗に関する記録が少ないあいだは、読み、評価関数を使うんです
保存してある記録が増えれば、いずれ初手までの勝敗が決定できます
じゃあ「解く」の使い方は間違ってないみたいだね。 ゲーム木の大きさの見当がついてないだけか。
113 :
1 :2006/12/24(日) 04:21:26
>>112 圧倒的に勝ちである局面などは、ほとんど探索する必要が無いんです
あと、相手の悪手をとがめるには必ずしも、最善手を指す必要は無いんです
>>45 のWZebraの作者さんの解説(速さ優先探索)を参照してみてください
114 :
1 :2006/12/24(日) 04:24:37
>>112 完全なゲーム木をすべて探索する必要は無いんです
WZebraの作者さんも
"完全読みは通常勝敗を判断するよりはるかに困難"
と言っています
勝敗の証明に必要な一部分だけでも走査するには膨大な時間が必要って事。 20個空きとか30個空きじゃなくて60個(59個)空きで「解く」事を言ってるんでしょ?
116 :
1 :2006/12/24(日) 04:40:22
>>115 そうですよ
60個空きの勝敗の決定をするんです
時間をかけてハッシュテーブルを更新し続ければ
現在の最新のパソコンで、例えば(かなり適当ですが)10日とか動かし続ければ
決定出来ると思ってますよ
アルゴリズムによっては100年かけても解けないでしょう
今までなかったアルゴリズムによってそれを実現しますよ
今までなかったアルゴリズムとは具体的にどんなの?
118 :
1 :2006/12/24(日) 05:05:44
>>117 オセロではなかっという意味ですが...
将棋のボナンザって言うプログラムがあるんですが
枝刈りしないで全幅探索らしいです
その上、詰め将棋ルーチンが無いらしいです
難易度的には、オセロより、将棋は遙かに難しいわけですが
それで、全幅探索で詰め将棋なしで通用するんです
詰みルーチンで時間を食わない分、通常ルーチンでより深く探索出来るわけです
今回、作っているのは、一つのルーチンのみ使用し、評価関数も単純化(空きマスと石の数しか使わない)
して、差し手は読みなしで順位付けします
(浅く読みを入れない方が勝率が上がるらしいです(将棋の場合)その方が深く探索できるため)
あとは、将棋の方で考えていた探索ルーチンを使います
評価関数は、a:黒の枚数 b:空の枚数 としたとき、 (a + b/2) / 64 を使います
この値は、0から1を動きます 初期局面では 0.5 です
119 :
◆z0MWdctOjE :2006/12/24(日) 05:10:11
速さ優先探索って証明数探索とどう違うの?
>評価関数は、a:黒の枚数 b:空の枚数 としたとき、 (a + b/2) / 64 を使います この評価関数は黒にとって値が大きいほどいいの?小さいほどいいの?
121 :
1 :2006/12/24(日) 05:16:51
縦、横、斜めの個別の列ごとの評価の線形和は大して役に立たないような気がしてます なぜなら、コマを取れるマスがあったとしても、一度に取れる訳じゃないし 盤面が変化したら、ガラッと評価値が変わってしまうと思うんです 一列変われば、取れていてはずの行が取れなくなったりするわけです それならば、最終局面で間違いなく正しい評価を返す コマの個数だけの評価で良いのではないかと思ってます
122 :
1 :2006/12/24(日) 05:24:18
>>120 大きいほど黒が良いです
白の手番では、白の枚数を使います
簡単に言うと、空きマスは半分づつ分けましょう、という関数です
>>119 証明数探索とは違いますよ
詰みを読むには、後手のどの様な手に対しても詰むことを証明しなければ
なりません (それが巧妙な手順であっても、真っ当な手順であっても
すべて場合に詰むことを証明しなければなりません)が
速さ優先では、相手の応手が少なくなるという手(とがめる手)でうまく行けばほぼ良いっていう感じです
123 :
◆z0MWdctOjE :2006/12/24(日) 05:29:50
>>122 証明数-反証明数探索とも違うのですね。
ちなみにオセロプログラムの完全読みでは「黒の石数-白の石数」の値がよく使われる。 (-64,-63,...,-1,0,+1,...,+63,+64、黒にとって大きいほど良い。) 必勝読み(勝敗判断)では「黒負け、引き分け、黒勝ち」。 (-1,0,1、黒にとって大きいほどよい)
125 :
1 :2006/12/24(日) 05:47:53
縦、横、斜めの個別の列ごとの評価の線形和は、 うまく行けば1手か2手先程度の評価を予測出来るとは おもいますが、必ずしもうまくいくとは限らないし プラスマイナスでちょうどその局面の評価程度しか返さない気がしてます 大局的ではなく、終盤では通用せず、別の評価、探索するほか無く それならば、初めからコマの枚数だけで良いんじゃないかとまたですがおもいます
126 :
1 :2006/12/24(日) 05:49:47
> うまく行けば1手か2手先程度の評価を予測出来る 統計的に、取る取られるという要素が、評価に組み込まれているいう意味です
127 :
◆z0MWdctOjE :2006/12/24(日) 05:50:53
評価関数は大小比較のためだけに使うのであれば定数倍1/64は無意味。 a+b/2の整数比較で十分では?
128 :
1 :2006/12/24(日) 05:52:42
>>127 実際は、4a + 2b を使う予定です
これならば、値は0から256になり、8bit でなんとか入りそうです
129 :
◆z0MWdctOjE :2006/12/24(日) 05:53:59
>>125 50個空きでも30個空きの時点でも予測してるのは試合終了時(大体0個空き)の結果。
131 :
デフォルトの名無しさん :2006/12/24(日) 05:55:20
CPU抜きで、対人オセロをまずは作りなよ。 んで入力だけキー入力か、CPUに決めさせるかできるようにしといて、 CPU側はからっぽでいいからまずは一通り作ると。 それを配布してくれればみんなやる気になると思うよ。
132 :
1 :2006/12/24(日) 05:56:41
>>129 でも、ちょうど8bitに合わせるより、その半分の方がいいですね
2a+bにします!
133 :
1 :2006/12/24(日) 06:01:09
>>130 しかし、列ごとの線形和で、勝敗が予測できるとは思えません
評価値の変化を見たことは無いですけど、一手ごとに優劣が変化しまくりじゃないですか?
試合の途中では優劣=石数では全くない。 優劣=石数なのは試合終了時だけ。
135 :
1 :2006/12/24(日) 06:09:40
>>134 空きマスが多いほど、その後の展開は、どんな評価関数を用いても
ほとんど予測できないと思うんですよ
そのため、空きが多いほど、評価をほぼイーブンにする、
> a:黒の枚数 b:空の枚数 としたとき、 (a + b/2) / 64 を使います
が良くないですかね?
終盤に近づくほど、石の数で評価が決まります
136 :
◆z0MWdctOjE :2006/12/24(日) 06:12:31
a:黒、b:空き、c:白、のとき a + b + c = 64 ∴c = 64 - a - b a - c = a - (64 - a - b) = a - 64 + a + b = 2a + b - 64 評価関数は定数の加算では大小は変わらないため実質的にはa - cと同じでは?
137 :
1 :2006/12/24(日) 06:14:48
同じ
ちなみに序盤は石数が少ない方が優勢であることが比較的多い。 その評価関数を試合途中で使うと悪い枝から読む事が多くなる。
139 :
1 :2006/12/24(日) 06:16:39
0以上が保証されているか、マイナスになるかの違いはありますけどね
140 :
1 :2006/12/24(日) 06:20:07
>>138 評価関数によって、差し手の優先順位を選ぶわけでは無いんです
開放度理論っていうのが良さそうだったのでそれに手を加えて、
追加したコマと変化したコマの、隣接する周囲のマスの状況で一手も
読まずに有効手を生成します
141 :
デフォルトの名無しさん :2006/12/24(日) 06:23:41
>>138 試合途中の評価関数は速さ?
>>139 a - c + 64
ああ、でも黒だけの数え上げで決まる2a + cの方が優れているかも。
142 :
1 :2006/12/24(日) 06:25:53
>>138 そうして、一番の有効手だけを優先して読み30〜40手も進めてから
評価関数を呼び出せばその時点での評価は信用度が高いです
ただし、生成した有効手が本当に有効であることが重要なんですけど...
145 :
◆z0MWdctOjE :2006/12/24(日) 06:50:14
146 :
1 :2006/12/24(日) 06:50:15
>>144 探索ルーチンは、また別なんです
MTD(f) 法の改良型を使います
例えば3手生成されたとして、周囲の状況から指される確率を
予測して60%、35%、5%になったとします
初めは、100%以上の確率の手のみ指し進めて段階的に確率を
引き下げることで深い段階へ到達していきます
これは、激指などで同様の手法が使われていますが、全く同じではないです
ゲーム木で実際に走査するノード数を1/2,1/3,1/100に減らすために 浅読み・手の並べ替えを行ってもノードあたりの処理時間は2倍,3倍,100倍にはならない。 ってか線形和評価関数の精度を疑うなら両方作って対戦させてみなよ。
148 :
1 :2006/12/24(日) 07:50:54
>>147 すでにあるじゃないですか
WZebraが
これに勝てば良いんです
それに、6×6や、10×10では評価関数が作りにくいんですよ
万能なのは、2a + b なんです
149 :
1 :2006/12/24(日) 08:26:16
差し手生成の高速化法 石がある上下左右の一つ先の空白を含めた長方形領域を調べればよい 初期配置では4×4マスがそう 終盤では残りマスでひっくり返るか調べるだけで良い 残りなんマスからがよいのか?
150 :
1 :2006/12/24(日) 08:40:14
中盤、終盤で相手の着手可能数が増えずに減らせる手はどのように見つけたらいいのだろうか? 追加したコマと、変化したコマが取れるかどうか調べていくしかないか 相手の取れるマスにこっちのコマを張ったために一つ減るというのもあるな オセロでも一番重要なのは差し手生成アルゴリズムかと思う
夜中から朝にかけてこんなに面白そうなことやってたのかw
>>1 よ理論的なことはいいから手を動かせ
完成するまで書き込まなければ最良
>終盤では残りマスでひっくり返るか調べるだけで良い >残りなんマスからがよいのか? 何か勘違いしてない?
>>152 いいから作らせておけよ。
早くソース見たい。
>>1 再帰始めていくら待っても戻ってこないけどバグじゃないからね
すぐ戻ってくるだろ スタックオーバーフローで
60手先で確実に終るからスタック使い切ることは多分ない
結局既存・既知の物しか出てきてないし。 将棋ではまだ使われてるけどオセロではより良いものが開発されて廃れた技術を 「オセロではまだ使われて無い」と勘違いしてるだけだよ。
車輪の再発明か_| ̄|○ …
>>1 今何行くらい書いたー?
どこまでできたー?
ねただろ
寝ただろ?
ネタだろ?
164 :
デフォルトの名無しさん :2006/12/24(日) 23:56:35
おやすみなさい
>>1 今日は面白い話無いのー?
進捗状況聞かせてー
166 :
1 :2006/12/25(月) 05:29:35
>>158 進化の遅れてる度合いは、
オセロ、チェス、将棋(右の方が良いネタが出てる)だとおもいますよ
オセロは、コンピュータが遅いときの手法が今でも使われてるとおもいます
画期的とか、そういうのは要らないんですよ
強ければ良いんです
>>165 差し手生成、順序交換アルゴリズムにこだわらない方向に転換しました
生成出来たやつから順に読んでいく方が良いようにおもいます
探索アルゴリズムの中で段階的に深化させていくことで
差し手の順序交換の部分は不要に出来る気がします
167 :
1 :2006/12/25(月) 05:33:16
将棋と大きく違う点は、必然手(飛車を取る、金が取られる)とかが無く オセロの場合、一見、悪そうな手でも、先に進めると有利に可能性がかなりありそうです 有効手の確率を計算することは難しいとおもいます ということで、上の様に、生成されたら直ぐ探索するのがいいとおもいます
168 :
デフォルトの名無しさん :2006/12/25(月) 06:12:29
C
169 :
デフォルトの名無しさん :2006/12/25(月) 06:14:51
300行で十分だろw
>>166 思いますってのは主張としては弱いですね。
方針やら設計をよくよく吟味してから開発やってくださいよ。
吟味せずに早くモノを出してほしい それから改良すれば良い
172 :
1 :2006/12/25(月) 11:01:46
一応、 "おまいら"最強のリバーシプログラムしてみろよ なんですけど...
スレタイはそうでも、事実上
>>1 の独演会だからな。
その事をちゃんと受け止めて頑張ってくださいまし。
勝手にお前がつけたスレタイだろ そもそも他力本願な時点で駄目 早く作れ
>将棋と大きく違う点は、必然手(飛車を取る、金が取られる)とかが無く >オセロの場合、一見、悪そうな手でも、先に進めると有利に可能性がかなりありそうです >有効手の確率を計算することは難しいとおもいます まずさ、Yahoo!オセロにでも行って君自身が初心者を脱してきたら?
作者自身がある程度ゲームをわかってないと ソフトもさほど強くならないのは将棋も一緒じゃないのか?
>>166 各種ゲームのコンピュータの進化の度合いの話なんかしてねーよ。
お前はなぜオセロで使われてる技術が採用されてるかを無視してるだろ。
お前は今メリット・デメリットを考えずに先祖返りしようとしてるぞ。
>>176 ボナンザの作者って相当強者なんですか?
>>176 オセロでもそれは微妙なとこだね。
段持ってたりで本人も強い作者は何人も居るが、
ルール知ってるだけで初心者同然の弱い作者も居る。
弱い作者は戦略をいくつか知ってても >一見、悪そうな手でも、先に進めると有利 こういうところに気付きにくいんだよな。
>将棋と大きく違う点は、必然手(飛車を取る、金が取られる)とかが無く ある。
>Bonanzaの場合は評価関数は過去の棋譜を再現する様に自動的に作ってる へぇ、概要としては線形和評価関数と同じなんだね
なんだか将棋とリバーシの技術交流スレになってきてるな。 ま、それもいいかもしれん。
Bonanzaの評価関数をみるとコンピュータ将棋を作る気をなくしますねw
>>188 ボナンザよりもよい評価関数、探索を作る自信がない。
『おまいら最強の将棋プログラムしてみろよ』スレが閑散としている理由がわかった気がする。
190 :
1 :2006/12/25(月) 18:56:27
アルゴリズム的には変更の余地が無いところまで完成しましたよ これが最強でなかったら人間やめます!あとは整えてから打ち込みます 人間の経験は一切入れず、パラメータの変更の余地も一切なしです 明日中に打ち込み終えて、バクとりして3日後くらいにはあげられるかもしれないです
191 :
1 :2006/12/25(月) 19:00:33
>>189 もし、オセロで最強になったら、次にボナンザも破りますよ
評価関数を棋譜から学習していくというやり方は、まあまあいい関数には
なるとはおもいますけどそういうやり方は将棋でも使いません
>>189 オセロも人間チャンピオンを超えちゃってからは過疎ってる・・。
他のゲームに移った作者が結構居る。
>>192 >>1 さんには囲碁も制覇してもらおう。
私はプログラミング言語の習得のための練習問題くらいでおいておこうと思う。
>>190 もし最強じゃなくても別に人間やめなくていいからソースのアップだけはしてね。
ずっと待ってるんだから。
そうそう
>>1 ができなかったことを補って皆で改良って手もあるしな
196 :
1 :2006/12/25(月) 19:15:08
コンピュータ将棋はいつまでに出来てたら大会に登録出来るんでしたっけ? まだ、一行も打ち込んでないんですけど
知らんよ。そういうのは将棋の方で聞け。
199 :
1 :2006/12/25(月) 19:27:08
どうもです 2007年1月31日(水) までか 3日以内にオセロで最強になったら必ず申し込みます!
囲碁なら需要は高いね。
既存の物さえ理解できずにそれを超える事ってできるのかねぇ
自分の考えた思考を実現するなら 見落としがないくらいが上回る点だろうが 総当たりを最適化して組み込むと本人を 相当上回れると思う
とある強い○×ゲームの作者は、自分のソフトがどれぐらい強いのか理解してなかったな 難易度を最高にするとミスしないから絶対勝てないのに、 「これに勝つ方法を見つけた方はメールを」とReadmeに書いてあったのには笑わせてもらった
205 :
デフォルトの名無しさん :2006/12/26(火) 00:17:56
○×ゲームって先手必勝だったっけ?
>>204 ジョークで書いたんじゃないの?
「コンピュータが先手でこれに勝つ方法を見つけた方はメールを」とかじゃなかった?
双方最善で引き分けじゃなかったっけ?
証明する方法はある。
211 :
206 :2006/12/26(火) 00:40:49
すまん。勘違いしてたっぽい。
>>1 ってオセロや将棋を甘く見すぎじゃね?
よくわかってないから最強とか解くとか軽々しく言えるんだろうな。
IOSなくなっちゃったみたいだけど 2chで共通インターフェース定義して みんなで対戦しようよ
あと 数日長考の上で引き分け とかはつまらないので 1手毎の考慮時間を短く設定して 最速で強力手を見つけられるような アルゴリズムが必要になるとかのルールだと 現実的で面白いと思うよ
6×6のオセロは完全解析されているんだっけ?
218 :
1 :2006/12/26(火) 09:30:59
220 :
1 :2006/12/26(火) 20:12:12
定石はどれぐらい入れたの?
返事しろMONSOON!
223 :
1 :2006/12/26(火) 20:39:52
>>221 外からの棋譜や定跡の入力はないです
自己生成です
ハッシュテーブルのサイズは2の24乗です
1600万局面登録できます
重複したら終局に近い方から順に消していきますから
実質的にはもっと入ります
225 :
1 :2006/12/26(火) 20:49:36
二日後には出来上がるとは思いますね 定跡(ハッシュテーブル)を育成する時間はあまりないんですが デュアルコアで速いパソコン持ってる人いたら生成してもらいたいところです まだ、生成する部分は出来上がってないですけど
227 :
1 :2006/12/26(火) 20:54:06
なるべくハッシュ値の計算を少なくするように工夫しました 回転と反転を同一視した方が、ハッシュがヒットしやすくはなるんですが 計算が複雑になってしまいます 回転と左右反転と白黒反転で16種類の局面が同一視出来ます
228 :
1 :2006/12/26(火) 20:55:13
>>226 ネタとは?二日後には出来上がりますよ
最強のリバーシプログラムが
一種持ってるって30台以上だな。
言動からして高校生くらいかと思ってた
231 :
1 :2006/12/26(火) 21:36:24
>>229 30才以下ですよ
高校のときですから
その後、コンピュータは真理追究に向かないということで数学へ
アク禁になってしまいました 代行で書き込んでもらいました
>アク禁になってしまいました 2日後の言い訳の布石か。
こんばんわ! 初めて見さしてもらいましたが、 俺素人だけど白黒反転とか言ってる段階でダメだろ? 将棋じゃないんだから… 頭固すぎだぞ。 今思いついたんだけどオセロの1手目は1種類しかないよね? 選んでるようだけど決まったところに打たされてる。
>俺素人だけど白黒反転とか言ってる段階でダメだろ? どうダメ? >今思いついたんだけどオセロの1手目は1種類しかないよね? そうだね。
オセロはパスできない。
>オセロはパスできない。 できる。
返せる箇所が有る限りパスしてはならない。 返せる箇所が無い限りパスしなければならない。
揚げ足取りしかできないんなら話すのやめるよ。
>揚げ足取りしかできないんなら話すのやめるよ。 そんなつもりはないよ。
あんまり書かないけど パスでヒントにならなかったかな? 将棋とはちがう。 1手目打つ人は先手に見えるけど、選択できないから後手といってもいいんじゃないかな? あらかじめ5個目を打っておいても変わらない。 1手目の位置でハッシュ値を…
白黒反転の無意味さが分からなければ 実際に駒(だったっけ?)おいてみれば?
じゃあ、実質、白が先攻なんだな。 将棋と同じで先手有利か。
思いつきで書いたので適当です。 もう一個ヒント:駒の数
もうねます。アクキンになっても携帯から書き込みできるよね。
書き込みはできてもソースのアップはできないとか言い出さないでね。
寝ますとか言ってまだ寝てない。 1はいないのかな? ほんとに寝ます。 ヒント:先手、後手のそれぞれの白黒反転同一局面とは?
よくわからない流れだな。
>>246 は何の話をしているんだ?
まあパスが入らないとコマの偶数奇数は変わらんから反転意味無いと言いたいのでは
それにしてもなぜこんな事を
>>246 はこんなに勿体ぶるのだろうか。
>回転と左右反転と白黒反転で16種類の局面が同一視出来ます ○● ●○ 左右反転で一致するケースは果たしてあるのか?
>>231 一種って10年以上前に無くなってるよね
>その後、コンピュータは真理追究に向かないということで数学へ
それは正しい判断だと思う
コンピュータは教えられたことを盲目に繰り返すだけだから
>>250 終盤ならあるんじゃないの?
終盤に一致したところでほとんど意味ないけど
リバーシでハッシュの定石ってあるの? 盤面の状態が単純だからうまい方法が見つかっていそうだけど
254 :
1 :2006/12/27(水) 08:30:56
>>244 携帯はありません ソースをうpしたら代行で書き込んでもらうことにします 今日はこれ一回の書き込みだけになるとおもいます
>>253 例えば、一秒間に100万局面探査できたとして、一試合の思考時間が10分だとすると
一試合で最大6億局面生成します
2の32乗が40億ですから、ハッシュに偏りがなければ
40〜50ビット一致すれば、ほぼ、局面を間違えない訳です
評価関数が0を返すことがある場合、引き分けはどうすんの? 同じく0にしても「さほど」問題は無いと思うけど
>>258 目標に引き分けも含めるなら評価関数が扱う値の上限よりも引き分けの値を高くする。
同じく0にするなら、評価値が正数の手があれば引き分けは捨ててそっちで勝ちを目指すようになる。
(その結果負ける事もありうるけど)
あと、試合結果の値と評価関数の値を混ぜないで、別途フラグを用意する手法もある。
20台後半で携帯持ってないなんてありえない。
430 名前:256[sage] 投稿日:2006/03/25(土) 15:44:11
>>429 ふむふむ。参考になります。
僕は序盤の全探索があと4手くらいは多くできるかなくらいで考えてました。
>>406 では大型コンピュータを使って何をするつもりなのかも気になりますね。
ところで16手全探索終わりました。
183時間52分くらいかかりました。(Pentium4 2.4GHz)
今朝は終了直前でコンピュータがクラッシュする夢を見ました。
正夢にならなくてよかった〜
手数----棋譜数----最大着手可能数----ゲームオーバー----パス
01-----------------4-----4-----------0-----------0
02----------------12-----3-----------0-----------0
03----------------56-----5-----------0-----------0
04---------------244-----6-----------0-----------0
05--------------1396-----9-----------0-----------0
06--------------8200----11-----------0-----------0
07-------------55092----12-----------0-----------0
08------------390216----14-----------0-----------0
09-----------3005320----15-----------0----------24
10----------24571192----16---------228---------228
11---------212260296----18---------356---------932
12--------1939892240----20--------6384--------7396
13-------18429768516----21-------16384-------35588
14------184042835408----22------299624------367160
15-----1891844432704----23------887364-----1979532
16----20301281202588----25----13560800----18920488
いい加減自分が馬鹿だって気付いたかなw
いよいよ明日は
>>1 がソースをアップする日だ。
とても楽しみ。ワクワク
今日だ。何時にアップされるのかなー
wktk
269 :
デフォルトの名無しさん :2006/12/28(木) 12:39:37
うpマダー?
>>258 だけど
色々考えた結果、引き分けは次の位置づけが合理的な気がする
負け < 引き分け < 未知 < 勝ち
誰か意見をくだされ
#違うゲームを作成中の者です。人が集まっていたので聞いてみました。
結果が芳しくなくて原因調査中なんでしょう?
>>270 「未知」と言うのは「評価関数で0を返す」=読みきれなかった
ということでいいのかな?
それなら
負け < 引き分け < 未知 < 勝ち
の場合は、「確実に引き分けるより勝負に行く」
負け < 未知 < 引き分け < 勝ち
なら、「あやふやな勝負より引き分けを取る」
どちらを採るかはその人(或いはプログラム)次第だが
素人と対戦するなら前者、名人と対戦するなら後者、かな。
274 :
デフォルトの名無しさん :2006/12/28(木) 18:25:46
未知のまま進めて意味あるのか?博打にしちゃうの?
まあ制限時間があるからなあ
まあまあ、アク禁だからしかたないんですよ
普通はプロバイダが対応完了したのを受けてとっくに規制解除されてるだろうしな。
>>1 自身が迷惑行為働いて規制されたとかなら別だが。
>>1 はアホだけど悪い奴には見えなかったなぁ
やっぱり恥ずかしくて逃げてるだけだと思う
まさか人間やめちゃったとか・・?
プログラム作ったこと無いんでしょ? そう簡単に出来るわけないでしょ 常識的に考えて
とりあえず今日残り2時間半待っとくか。
>>282 いやいや
1年間将棋のAI作ってたくらいだぞ
完成しなかったらしいが
>>69 構想を練ってただけの1年間も作成経験に入れてるのか・・
>>1 は数学のセンスもないし、パズルのセンスも無い。
知的探究心も足りないと思う。
言動を見ていると真理の追究にも向いてない。
でも、人間やめなくてもいい。
何事もなかったかのように帰って来い。
どうしてもくやしかったらネタでしたwって出てこればいいのさ。
プログラムして自分の間違いに気付いたんじゃなくて プログラムがさっぱりできなくてうpできないとか
机上の空論とはこの事
地球シミュレータ使えばいいんじゃないか? 審査を通らないと思うけど…
>>290 地球シミュレータってパソコンの数十万倍とかその程度じゃないの?
使えても解くのはとても無理
解くのはもちろん無理。 Blue Geneでも無理だろう。 地球シミュレータは論文とプログラム提出して、 並列化の指数が高くないと使わせてもらえないんじゃなかったっけ?
地球シミュレータって何? 気象関係?
>また地球シミュレータでは各プロジェクトに対し、コードを高並列で実行する際、 >並列化効率50%以上(並列実行時の各プロセッサの性能が、単一プロセッサ >実行時の性能の50%以上)にチューニングされるよう、求めています。 >例えば単一プロセッサ実行で、ピーク性能比90%を達成しているプログラムを >1000プロセッサで実行する時には、ピーク性能比45%の達成が必要となります。
296 :
1 :2006/12/28(木) 23:42:24
すまん 間に合わなかった あと二日待って下さい
>>296 今どんな状況?
あと二日待てばどうなるの?
年末だろ
おいらが前にJava Appletでリバーシ作った時は一週間くらいで出来たよ。 CPUのアルゴリズムは今一番たくさん取れる置き方を選択する、 名付けて小学生ルーチンだったけどな。 弱すぎて涙が出た。
300 :
1 :2006/12/28(木) 23:48:18
>>297 アルゴリズムは、紙の上で完成しているんだけど
細かい部分(移動処理とか)の作成、整備に時間がかかってしまった
必死で間に合わそうとしたけど、眠たくなってしまった
明日、もうちょい煮詰めてから完成させます
302 :
1 :2006/12/28(木) 23:57:51
>>301 ちゃんと動いたらうpしますからもうちょい待ってて下さい
明日中のうpを目標にしたい所ですが...
出来るだけ速く完成させます
>>302 "ちゃんと"動く事は無いんだから一生見せないつもりでしょ
まーそうだな 職業プログラマが作ったプログラムだって(ry
305 :
1 :2006/12/29(金) 00:04:36
>>303 ちゃんと動かないか、最強でなかったら人間やめますって
最強の自信はありますから待ってて下さい
>>305 人間やめるかやめないかよりも、うpするかしないかが重要だと思うんだが
うpしてくれれば改良の余地はあるから言ってるんだ
307 :
デフォルトの名無しさん :2006/12/29(金) 00:07:30
>>305 自分で今日発表って宣言したんだから、そこらへんしっかりしてくれよ
変なところにこだわるのは今更おかしいって
308 :
1 :2006/12/29(金) 00:09:49
みなさん、ごめんなさい!申し訳ない
1はプログラム作るのに他人の意見は必要ないんだろ?
>>1 とりあえずアク禁は解除されてるみたいだね。
おめでとう。
てか、1はトリップつけろよ。偽物が紛れてるかもしれないし。
>>312 あぁそういえばそうだな。
すっかりその可能性を忘れてた。
とりあえず半信半疑になっとこう。
今の1って何代目?
さぁそれはよくわからんけど
トリップつけてソースコードを出してきたやつを
>>1 とみなす。
>>1 じゃないけど今日から休みだから年内に出せるようにがんばってみる
ここまではできた。 $cat -n ./src/control/Main.java 1 package control; 2 3 /** 4 this is Main for Othello 5 @author 6 @version 2006 7 **/ 8 public class Main 9 { 10 11 public Main() 12 { 13 }//Main() 14 15 public static void main(String argv[]) 16 { 17 // gui.awt a = new gui.awt(); 18 // a.gui(); 19 Control control = new Control(); 20 control.control(); 21 }//main() 22 23 }//Main
年内って、まだ2006年だぞ
とりあえず俺は1を応援してるから。1頑張れ。楽しみにしてる。 自演かどうかは1なら分かることだから、一応書き込んでおく。 無意味な叩きレス多過ぎ。嘘だと思うならこなければいいだけのこと。
俺も
>>1 を応援してる。
しかし
>>1 は相当アホだと思ってる。
だから色々教えてやってる。
俺も
>>1 を応援している。
しかし
>>1 は完璧主義者だと思ってる。
だから今日中にはうpできないと思う。
完璧には程遠い 目指すのはいいが空回りしてるバカ
まぁまぁ叩くのはやめてもうちょっと暖かい目で見てやろうぜ。 俺は上の方で宿題やらせるつもりだろ?とか書いたけど 意外とまめじゃん。 2chへの書き込みは。
暖かい目で見てきたつもりだが昨日は失望させられた 自分で宣言した事を守らなかったんだから少なくとも俺からの信用は失ってる イライラしてきてるから明日ソースうpしなければ叩く側にまわってしまいそうだw
>>321 >だから色々教えてやってる。
>だから色々教えてやってる。
>だから色々教えてやってる。
>だから色々教えてやってる。
>だから色々教えてやってる。
プ
まぁまぁ、みんないつもは作る側で、納期の大変さは分かっているんだから、 もうちょっと暖かい目で。。。
>>327 だが、納期に納品できないのならせめて経過を…
なんでも前ら客気取り?
お正月三が日過ぎたくらいには出てるだろ。お前らのんびり待てよ
"納期"の設定の際に要望とかは全く言って無いけどな
"最強"
どっちにしろ、痛い。 まあソースうpしたら見てやるよ。
ためのりはまだ現役なのか?
現役だよ
まだ現役か。 ためのりがこのスレみたら激怒するだろうね。
一旦引退した感じだったんだけど復帰してまたチャンピオンになってる。 彼は本当にすごい。
ためのりって誰だー
日本人が世界チャンピョンか
へー
人間の世界で一番レベルが高い国は日本。 競技人口が多くて大会も盛んで選手層が厚い。 "オセロ"は日本発だし。 それでも時々世界チャンピオンの座は他の国の人に持っていかれる事もあるけどね。 スポーツで言えば柔道みたいな感じかな。
オセロって日本発祥なんか。 初めて知ったよ。
リバーシって、"オセロ"がツクダオリジナルの登録商標なので 名前を変えているだけ?それとも本当に日本発祥?
>>346 詳しくはウィキペディアでオセロを検索してんか
>>346 海外ではリバーシ、日本では源平碁といって昔からあったゲーム
最初のこまの置き方とか細かい亜流があったが
ツクダがオセロの商標で今のルールを添えて販売し大ヒットしたのでありました
オセロは日本の大学生が発明したと聞いていたが。
goto 2日前; の予感
ハイスクール奇面組!
355 :
1 :2006/12/30(土) 22:34:50
やばっ!まだ動かないや あと90分か 眠たくなってきた とりあえず寝ても良いですかね?
>>355 寝るならうpしてからね
また反故にするつもりか?
358 :
1 :2006/12/30(土) 23:24:27
ゴメンね 年内には出来上がるよ
359 :
1 :2006/12/30(土) 23:31:18
>>358 は偽者です
ごめんなさい
今からうpします
1月1日になっても年内にできるとかいいそうだな。
361 :
1 :2006/12/30(土) 23:34:25
>>359 が偽者です
本当に年内にうpしますから待ってください
できなかったら人間やめます
すでに人間でないはず。。。 取り合えずトリップつけろおおおお
お前ら釣られすぎ
364 :
1 :2006/12/30(土) 23:44:56
いや俺しかいないはず。
ソースコードなんて出てこないと思ってるよ
366 :
1 ◆tIKW.3DbiI :2006/12/30(土) 23:48:53
ゴメンね トリップつけました
367 :
1 :2006/12/30(土) 23:51:15
おまいらーパクるなーー明日だすモレが1だ!
368 :
1 ◆tIKW.3DbiI :2006/12/30(土) 23:52:31
>>365 年内には必ず出します...
ごめんなさい!
おやすみなさい!
369 :
1 :2006/12/30(土) 23:57:48
またにんげんからとおざかった。 そろそろやばいかも。
370 :
1 :2006/12/31(日) 00:00:26
371 :
1 ◆OTHELLOVls :2006/12/31(日) 00:03:53
トリつけました
どうせこんな感じだろ。
偽者だらけじゃん 予想通りの結末だな
白黒つけるぜ by ゼブラマン
ちょっと期待してたけどやっぱり嘘だったのか もう確信した
期待してたグダグダの展開が始まって大満足です。
>>375 ほんとはだいぶ信じてて騙されたのが悔しいんだろ?
378 :
デフォルトの名無しさん :2006/12/31(日) 00:21:09
こういう時偽者やってるやつが一番人間としてどうかと思う
偽者やるくらいだから一番悔しがってそうだな
偽者って事がバレバレだから別に害があるわけじゃないし それより今日まで待たせてきた"1"のほうが人間としてどうかしてると思うぞ
全員1でいいだろ。
382 :
デフォルトの名無しさん :2006/12/31(日) 13:33:29
うpまだー?
>>316 そろそろできましたか?
今度はあなたに期待していますよ。
>>98 つぼったww
もうすぐ2006年終わっちゃうよー!
1は人を無駄に待たせてやきもきさせるのが狙いのクズ
つか待っている方が(ry
おせろっと勝負だ!
源平碁歌合戦はじまった!
1は去ったがスレは残った。
(;゚д゚)ノシ スレのみんな、よいお年をー
>>1 まだー?
(´・ω・`)
>>1 以外
明けましておめでとうございます。
今年もよろしくお願いします。
あけおめー
名前に!omikuji !damaと入れる
あけおめー
398 :
397 :2007/01/01(月) 00:24:16
っておい、車かよ。
どう?
!omikuji !dama
!omikuji !dama
まさかこのスレで年越すとは・・・^^;
初詣行ってきました。 末吉でした。 びみょー
404 :
403 :2007/01/01(月) 01:23:38
ここでも末吉だし・・。 良い年でありますように。
アッー!けおめ!
406 :
デフォルトの名無しさん :2007/01/01(月) 02:12:23
おまいらはもう、お年玉あげる歳だろ
>>406 子供とか甥っ子とかいないから・・・
あ〜そういや年の離れた従姉がいたが、子供かなり大きくなったからなぁ。
全然会わないし。
親はいまでも自分を子ども扱いしてお年玉くれるなぁ。 イランゆうてもくれようとする。 損するもんじゃないから結局もらうけど。
あけおめ〜
412 :
デフォルトの名無しさん :2007/01/01(月) 13:06:14
>>407 あげる立場って言ってるんじゃなくて、
あげる年齢だろ?って言ってるんだ
甥っこ姪っこがみな就職してるのに?
414 :
デフォルトの名無しさん :2007/01/01(月) 17:03:02
もうもらう歳じゃないだろ いくつまでもらうつもりなんだ? ってのも読み取れなかったのかな? リアルに中学生くらいならごめんね。
お前らスレ違いもいい加減にしろよ
24歳までもらってた。
誰かゼブラとかロジステロとかについて詳しい人居る? 居れば技術解説してくれないかな?
プログラミングしらんけど、オセロって、序盤は 1.少石返し 2.自分の石をつなげる 3.相手の石に囲ませる みたいな感じ?
そうだね。 それらは打てる場所の数を増やす/減らさない事につながる。
/////////////////////////////////// チラシの裏 ////////////////////////////////////////////////
// C++の勉強初めて1週間程度だけどこのスレを見て練習がてらオセロが出来るプログラム作ってみようと思った
// でもそれを作るには返す手を計算する処理が必要なわけでそれを作る事は俺にはまだ不可能だと思った
//
// このスレを最初見たとき
>>1 の言ってる事はなんとなくしか理解できないし俺はすごいと思ってたけど
// 今の
>>1 は「最強のオセロプログラム作りたいから手伝って!俺はオセロプログラム作れないけど^^;」
// って俺が言ったのと同じじゃね?
// 作りたいと思うなら、作れると思うなら経過くらいうpするべきだと思う
/////////////////////////////////// チラシの裏 ////////////////////////////////////////////////
アイデアを盗まれるのがイヤなんじゃね?
基本ができなければアイディアさえ思いつけないだろう。 仮にアイディアを自分で考え付いても車輪の再発明である可能性が高い。 せめてアイディアを公開すれば他人が検証できるんだけどね。
人間やめたに1票。 やめるなよ。orz
>>1 にコーディング能力ないならどういう実装したかったのかだけでも教えてくれよ
C++,でもJAVAでも指定の言語でとりあえず書いてやるから。
そうすればここの住人が改良、最適化等するからよ?人間やめんな?
出来もしない事を言い出しておいて人間やめる宣言してんだし 単なる自業自得だと思うが。
だからアルゴリズムだけ記述すれば、プログラミングする人間はここには腐るほどいるって 言ったのに。
>>1 のアイディアは間違ってる可能性が高いし公開するつもりも無いのだろう。
>>1 に呼びかけてる暇があれば自分でアイディア考えた方が良くないか?>1に期待してる人
逃げるくらいならまだ作り方教えて下さいのほうがマシだったな まぁその場合ここまで延びなかったと思うが。
誰か線形和評価関数について詳しい人居ますか?
たった今、公園で
>>1 を見かけた。
可愛そうなのでパンの耳を上げた。
うれしそうに食べてた。
お前ら小難しい話になった途端黙るよな。
評価関数でパーセプトロンの代わりにサポートベクタマシンって使える?
日本語でおk
439 :
デフォルトの名無しさん :2007/01/02(火) 18:20:18
それでも俺は
>>1 を待つ(`・ω・´)人間やめんな
動かない途中のでもいいからうpして欲しいな。
443 :
◆z0MWdctOjE :2007/01/02(火) 23:01:40
>>436 SOC法とかいう速いアルゴリズムがあるらしいよ。
『サポートベクターマシーン入門』に擬似コードが載っていた。
444 :
1 :2007/01/02(火) 23:03:05
ここまでできました。 あとはお願いします。 int mein(boid){ ritan 0; }
>>443 SOC法?って聞いたこと無いな。
ぐぐってもよくわからなかいんだけどよければリンク教えてくれる?
447 :
◆z0MWdctOjE :2007/01/02(火) 23:20:19
>>445 ごめんなさい、SMO法だったm(__)m
評価関数の自動作成ならBonanzaのが実績もあるから いいんじゃね?
449 :
448 :2007/01/02(火) 23:27:24
あ,これは将棋ね
なるほど。 Wikipediaにもチラッと出てる分割統治法の考え方を 用いた手法(の一つ?)がSMO法なのかな。 dクス
>>433 vsOtha を試してみたがWZebra と互角に戦うじゃないか!
>>448 将棋も評価関数の自動作成に流れが来ると思いますね。
その為にも比較的シンプルなオセロの評価関数作成で経験を積むのは有効だと思います。
>>451 そうなんですか。自分も今度試してみます。
あとソースも読んでみます。
453 :
451 :2007/01/03(水) 11:48:02
通常 8手、終盤24手必勝読み、終盤22手完全読みの設定にして 3連続で引き分けになった。
通常 8手 偶数がいいんですか?
そりゃあ 相手の番と自分の番と読むんじゃないか? しらないけど。
偶奇どちらがいいかはわかりません。 一般的に、ある偶数は1少ない奇数より良くて1多い奇数より悪いです。 探索は深いほど時間がかかるけど精度はいいです。
とりあえず
>>1 に書いてある BearRev を落として見た。
ソースも読んでスケルトンのビルドまではした。
で、
>>1 のソースうpはまだー?
ZebraとかvsOthaはGPLなんだけど これらを改造してBearRev用DLLにして公開したらまずい?
全然まずくないだろ ただソースは公開しないとだめだけど
DLLのソースは公開してもいいんだけどさ、 GPLのDLLにリンクするプログラムってGPLにしないと駄目じゃなかったっけ? BearRevはGPLじゃない(よね?)からどうなのかと疑問に思った。 先にBearRevがあるからいいのかな?
ああそういうことか 分からない駄目なのかも
463 :
457 :2007/01/04(木) 05:48:51
あー、GPLの事すっかり忘れてたなぁorz 実はさっきまでZebra移植しようとしてた。。 俺も調べてみるわ。
464 :
457 :2007/01/04(木) 06:12:55
先読みするのはいいけど、どういう状態が最前なのかわからない。
466 :
◆z0MWdctOjE :2007/01/04(木) 08:30:12
そこで機械学習ですよ。
最善がわからないと機械どうしやらせても子供同士のオセロにしかならん
例えば、3手先までみると、それぞれ2箇所しか打てないとして、 1-1-1 1-1-2 1-2-1 1-2-2 2-1-1 2-1-2 2-2-1 2-2-2 と、あるけど、 自分の打てる場所が多くなればいいのか? 相手の手が狭まればいいのか? より多くひっくり返せるほうがいいのか? 相手が隅の回りにしか置けないようにするのがいいのか? そもそも、コンピュータの相手というのは、多くは人間であり、 最善の手を打つとは限らない。 この条件で考えると最善の手とは何かわからなくなる。
前半は定石にのっとって、中盤はそれぞれ最善と決めたものを 終盤はできるだけ読みきる形でしょ
答えが分からない時は教師なし学習だ
中盤が問題だな。
でも
>>1 の手法はそれも解決するらしい。
>>469 定石にのっとってとよく言うけれど相手が定石から外れたらどう対処すればいいのかな?
>自分の打てる場所が多くなればいいのか? これは良い手が多い。 >相手の手が狭まればいいのか? これも良い手が多い。さらに言うと 同時に先読みするときの幅が狭くなるので 読める手が多くなるというメリットも齎される。 >より多くひっくり返せるほうがいいのか? ほぼ間違い。ただし次のケースを除く。 その手または数手先に全消し出来る可能性がある場合。 その手または数手先に相手が置ける場所が無くなる(手詰まりになる)場合。 >相手が隅の回りにしか置けないようにするのがいいのか? これは間違いというかほとんど考慮の意味が無い。
結局、良く言われていることなんだけど、 自分の置ける場所が増えて相手の置ける場所が減る手が良い手であることが多い。 とりあえず序盤と中盤はそれで評価値を決めていいと思うよ。 終盤は当然読みきり。
なるほど mobility相手だと何回やっても漏れが勝った ありがとう
479 :
◆z0MWdctOjE :2007/01/05(金) 01:51:49
各種特性値の線形和をとってその係数空間の中で最適な組を探索させればあるいは…
>>479 もうちょっと具体的に説明してくれる?
興味深い事言ってる気がする。
それってORじゃないの 日本語でなんだっけ 多変量解析だっけか
線形計画法だ すまんこ
483 :
◆z0MWdctOjE :2007/01/05(金) 02:23:46
チラ裏考え中…n次元係数空間は定数倍の自由度がある 案1、係数の2乗和が定数になるようにする…球面上をはい回るイメージ 案2、たとえば着手可能箇所数(mobility)の係数を固定にする 考え中…解の候補を遺伝子と見立てて交叉、変異、淘汰を繰り返す… (n+1)個の点で凸包をつくりポリトープ法で… 考え中…解の候補のうち、最良の候補vs新しい解の候補でやったら… 色々試してみたいけど時間が足りない…
聞いてみたのはいいものの知らない事が出てきた・・ 勉強してくる。 ポリトープ法って日本語資料少なくない・・?
結局bonanzaみたいなことをやりたいってこと?
487 :
◆z0MWdctOjE :2007/01/05(金) 19:15:45
>>485 ポリトープ法は従来シンプレックス法と呼ばれていた・・奥村氏の『アルゴリズム事典』
日本語資料はあと一つあるがなくしてしまった。
収束が遅くて使えないんでしょう。
>>486 結局bonanzaみたいなことをいろんなアルゴリズムでやりたいなと
あげるんじゃないよ。
ごめんなさい 逝ってきます
深さによって最適な係数が変わっていくと思うけど ある深さで係数がほとんど0になるようなフィーチャーは その深さでは使用しないようにするってのはどうかな? 評価関数が軽くなると思う。
>>492 人間やめてカタビロトゲトゲにでもなったんじゃない?
>>1 よ
いつかソースを出す気があるのか無いのかだけでも答えてくれるか?
無くても別に叩かんから
そうそう、付属の思考ルーチンは最弱のものなので注意。
502 :
501 :2007/01/07(日) 01:41:24
64-0で勝ちますた
503 :
499 :2007/01/07(日) 05:01:33
>>502 やはり圧勝でしたか。
そこでVer.UP。
http://ehoba.mydns.jp/loada/src/txup0132.zip 一部のコードの修正と、少し手ごわくなった思考ルーチン CPU_simple2 の追加。
書き忘れたけど、編集することで、プレイヤー対プレイヤーもCPU対CPUも可能。
CPU_simple2 は完成自体は早かったけど、最初は CPU_simple に時々負ける始末。
チューニングの末、CPU_simple にほとんど勝てるようになったがてこずった。
504 :
1 :2007/01/07(日) 06:24:27
本物です みなさん、心配かけてごめんなさい 体調くずしてました あとすこしかかりますがいいですか
そういえば、負けるが勝ちなんてのもあったな。
>>504 おぉ?本物か?
俺はいつまでも待つから、とりあえずあきらめないでほすぃ。
1よトリはどうした? 偽者だな。
トリをつけないってとこが1らしいジャマイカ。
511 :
デフォルトの名無しさん :2007/01/07(日) 12:43:43
512 :
457 :2007/01/07(日) 14:24:59
(;´д`)出張から帰ってキタ
とりあえずレス追ってソース探し再開しま。(その前に寝るかもw)
>>504 あけましておめでとう
>>504 本当は当初考えてたアルゴリズムじゃできなかっただけなんだろ?
でも
>>1 とその擁護派が頓珍漢な事言い続けてる方が
レス伸びてこのスレは活性化するんじゃないかな
516 :
501 :2007/01/07(日) 16:10:42
>>503 1回目55-9でした。
2回目64-0でした。
simple2 vs simple2 で
携帯アプリの方にひとが移動している悪寒
520 :
1 :2007/01/13(土) 10:30:03
まもなく完成します!これが最強でなかったら人間やめます!
521 :
1 :2007/01/13(土) 11:40:28
非常に初歩ですみませんが char型の配列を67108914個確保したいとき、main以外の関数から 参照するにはどうすれば?newでいける?
ヽ / /⌒\
/ヽヽ|/⌒\ii|\
/ /ヾゞ///\\|
|/ |;;;;;;|/ハ \|
|;;;;//⌒ヽ
|;/( ^ω^)
>>1 おっおっおっ乙枯ー
. |{ ∪ ∪
|;;ヾ.,____,ノ
|;;; |
|;;;;;|
|;;;;;|
523 :
1 :2007/01/13(土) 11:43:09
すなわち、動的確保した変数をグローバル変数に出来ますか?ということです
変数全部グロバル変数にしとけばいいじゃん
525 :
1 :2007/01/13(土) 11:45:56
mainの外で、char PPP[ 67108914 ]って書いてもコンパイル通らないですよ
リバーシのプログラム作る以前の問題のようだ
527 :
1 :2007/01/13(土) 11:52:11
ここさえ出来ればあとは動くので教えて
>>521 char* PPP;
使う前に動的確保でいいんじゃない
530 :
1 :2007/01/13(土) 11:57:49
エラーメッセージは、Fatal: Out of memory です 動的確保が良いんですが出来ないですか?
531 :
1 :2007/01/13(土) 11:59:14
>>529 グローバルのポインタ定義しておいてあとで確保すればいいってことか わかりました〜
>>531 でも、そんなに巨大なメモリ空間を何に使うの?
533 :
1 :2007/01/13(土) 12:16:41
生成した差し手の保存と、ハッシュテーブルに使うんです
まぁ、とりあえず作ってみてよ。 でも、その部分は直す必要がありそうだけど。
malloc失敗しないの?
536 :
1 :2007/01/13(土) 12:22:07
差し手で64M、ハッシュで64M使います 一応確保はできましたが
俺も!と、思って作ってみたけど、公開する場所がない。 とりあえず、C:\my program\reversi\にothello.exe 置きました。
538 :
1 :2007/01/13(土) 12:31:39
あとちょっとなんですが、寝てから作り出しますね 手書きでは、全部書けてるんですが、あと打ち込んでデバックなんですが 眠くなったので寝ます
何言ってんだ? レベル低いな…がっかりだよ。
手書き・・・?
やっぱり30才以上だな。 年齢偽ってどうするの?
542 :
1 :2007/01/13(土) 12:41:05
プログラミング技術と、アルゴリズムの作成は別です 技術的な事を知らなかったからといって弱いとは限りません プログラムは、高校のときに一種うけた頃以来やってません
543 :
1 :2007/01/13(土) 12:42:48
20代後半です 一番最後のときか、その一つ前だったと思います
>>542 > プログラミング技術と、アルゴリズムの作成は別です
うん、その通りだと思うよ。
君はプログラミング技術が無いんだよね。
10年の間プログラム環境は変わったよ。 あと、大学でプログラム書かないはずはない。 もしかして40台?
手書きって、クヌースにあこがれてる厨房じゃないの?
Tex使って卒論書いた?
548 :
1 :2007/01/13(土) 12:48:36
一種は、2000年度までやってました 修士(数学)を最近出ました さて何歳でしょうか
アルゴリズムは理論 プログラミングはアート
アルゴリズムはサイエンス プログラミングはアート
一種ってことはプログラムが全く書けない可能性もあるな。 あれ?将棋のプログラム書いたんだよね? 矛盾してないか? アルゴリズム+データ構造≠プログラム
552 :
1 :2007/01/13(土) 13:16:40
553 :
1 :2007/01/13(土) 13:19:21
フローチャートと、c言語の基本構文を使ったプログラムはできます ともに手書きでやるんですが
1が口だけの無能だということがよくわかった。
>>554 それは言いすぎだと思うがなあ
ただフローチャート描いてる人って初心者ぐらいだよ。
スパゲッティってことないよね?
>>555 そう思ってるヤツがシロートだな
もっとも正確にはフローチャートとは呼ばないが
>>557 そう思ってるやつはサラリーマン
もっとも、ハッカーはコードしか書かない
フローチャートが使えるとアピールすることは今や、 駅員志望者が面接で、切符切り鋏を使えることをアピールするようなものだ。
>>561 1は今必死にプログラミングしているところなんだよ
じゃますんな
ハッカーは構造化とかオブジェクト指向とかに縛られない
1よ、まだ出来ないのか?
>>566 プログラミングの基本すらままならないから今勉強中
Hello world はできたなか?
>>568 そんな高度なのはまだできないんじゃないかな
なんかみんな1のペースに巻き込まれてないか? 糞スレで終わってればよかったものの、こんなに待たされてるにもかかわらず なんだかんだいって期待してる俺達w
>>570 「達」を付けるなカス
俺は期待してない
お前らオセロ(囲碁・将棋なども)がなぜ解けないかわかってないのか?
全く期待していません。 けなすのを楽しんでいるだけです。
>>573 オセロは解けるよ。ただ、解くまでに時間が掛かりすぎるってだけ
時間がいくら掛かってもいいってんなら囲碁も将棋も解けるだろ
何千万年かかるのやら?
独学じゃマトモに動くものはできんだろ 理論が素晴しくても、それを正確に表現するプログラムを作るのは まず無理だろ 仮に理論どおりだとしても1手指すのに何日も計算したりしてw
プログラミングのプの字も知らん人間にコンピュータサイエンスが解るわけがない。
理論もたいしたことないよ 既存の技術の組み合わせを変えただけ オリジナル技術は無かったし
>>581 そういう作り方もできるというだけ。
よりよく作り込むには、やはり新しい理論を使っていかないといけない。
つまり理論を示さずに口で理論はアルアル言ってるだけ
俺も理論できた!!!!
>>1 の言った事を頼りに考えてたらわかった!!!
これから実装するから待ってて!!!
あっそ
世の中のプログラム書きの90%以上はプログラムのプの字しか知らん それでもわかった風な事ばかりいってるからな 1がプログラムかけなくても書けるつもりになってても別段不思議ではない
>>587 プログラムはかけるやつがかけばいいとして
オセロ最強プログラムへのアプローチと1がどんな思考回路なのかに興味がある
こんな感じ? 90%:プ 9%:プロ 0.9%:プログ 0.09%:プログラ 0.01%:プログラム
プ 変数、制御文が使える。 プロ 構造化プログラム、オブジェクト指向を理解しアプリケーションを作成できる。
そんなだからアマグラマーって言われるんだよ
えっと、ダジャレですよね。ははは
今ではアマチュアの方が技術が上なんだってね。 やっぱり有能な人間はプログラマやめちゃうんだねー。
アマチュアは他と比べようが無いからな
>>594 いくらでも比較できるシーンはあるわけだがw
その視野の狭さがアマチュアなのさw
お前ら二人とも素人だな
ぷいにゅ
599 :
デフォルトの名無しさん :2007/01/14(日) 18:30:44
Bullshit! I can't hear you! ノ ___l,,,,,,,,,,,,___ | _,,,..-='''''~~~____::::::::::: ̄~~'''ュ | _,,,...-='''''~~~:::::::::::::::::_,,-‐、ノノ、〉::::::::::::::_,.='' _,,,|..-='''''~~~:::::::::::::::::::::::::::::r''''~,="ツ, 、_〈__,,..= ''''~ _,,,...-='''''~~~::::::::::::::::::::::::::::::::::::::::::::: ~''~,ィ'~(i~ 乂 (~::::::::::::::::::::::::::::r=~ _,,,_ ::::::::::::::::::: '  ̄ノ ヽ ~''''''''''''''''''''''~(:::::(("~ヽ~ヽ ::::::::: ..:r ) ):::::ヾ、 l|_、_ ::::::: r`ー'f (:::::::::::`l、 _,-、 / ヽ ヽ:::::::::::ゝ,,_ ノ ' ,イノ `i:::: :::l .〈 〈 タマ落としたか! \ :::l ヽ1 \ ::ヘ ノ ソ \ :::ヘ / f \ _,,..=ー---‐''
プロとアマの違いは納期の違いだ。 自分が得意なものだけをやって、 時間をたっぷり使えるアマチュアのほうが 断然有利だ。
有利とは思わんな 時間の制約がなければいいものが出来る、というわけではない
まぁ、確かに時間の制約がない故に、だらだらとやって いつまでも結果がでないなんてことはよくあることだな。
嫌だねぇ、プログラミングしか取り柄のないコーダーくん。 自分の得意分野を侵害されて不満のご様子。
自分の存在意義を見失いそうですか?コーダーくん。 自分をそこまで追いつめたのは自分自身だということをいつ理解するんですか?
606 :
デフォルトの名無しさん :2007/01/14(日) 20:37:37
お前らスレ違いもいい加減にしろ
>>604-605 俺はコーダーじゃねぇけど、せめてまだ取り柄の一つでもあればまだまし。
世の中、全然取り柄がないヤツなんてごまんといる。
誰にでも、ひとつぐらいは取り柄があるなんてのはただの幻想。
>>607 取り柄って言うのはね、自分自信の認識によるものなんだよ。
俺は何の取り柄もないダメなやつだ・・・なんて思っている人間はうつ病。
すぐに病院に行くべきだ。
>誰にでも、ひとつぐらいは取り柄があるなんてのはただの幻想。 努力が足りないんじゃないのか?
たりないのはうちわだ
1がたりない。
生きとし生けるもの全てに意味がある。
>>612 そう思っていた時期が
俺にもありました
>>607 一つの失敗を見つけて、「お前は何の取り柄もないやつだな」と罵ってみたり。
そして、「俺はあいつよりは優秀だ」と自分を励ましてみたり。
自信が無い人間ほどこういうパターンは多いかな〜
だが、その最強のプログラムで以ってその最強のプログラムを突いたら之如何。
>>616 多分だけど、白が勝つか、有意差を見られないかのどっち踵
619 :
デフォルトの名無しさん :2007/01/14(日) 22:36:00
漢文の「矛盾」のストーリーを思い出した。
どっちにしろ最善手が見つかる時代に俺らはいきていまい。
んなこたあない
俺は1手目の最善手なら既に見つけたよ
神現る。
最後の1手の最善手なら俺でもわかるんだが。
626 :
622 :2007/01/14(日) 23:47:21
>>626 だがその話をするとオセロはf5におくことが決められていて
最初の一手は白からだとか言い出すヤツもいるから気をつけろ。
>>622 オセロはf5におくことが決められていて最初の一手は白からだ
対称を消すと、一手目は一通りしかないのか。 二手目は三通りで三手目は(3+4+5)で12通りということでいいのかな。 四手目になると、ざっと数十通りか。流石にこの辺りになると手書きじゃ書き出せなくなるな。
>>627 どういう意図で言ってるの?
初手F5に打つのは慣習であって、打たなければならないとは
決められてないし、先手は黒だけど。
texでリバーシ書いてください
635 :
1 :2007/01/15(月) 07:14:06
ほとんど出来た まもなく完成!
636 :
1 :2007/01/15(月) 07:16:00
200行以内だけどかなり強いと思うよ
637 :
1 :2007/01/16(火) 05:54:24
うまく思考ルーチンが動かないのでもう少し待って下さい 局面の実現確率が1000000とかになる 普通は0から1の範囲なのに 番地をまちがえてるっぽい
対人でオセロするときは 暗記厨に負けないように 自分が黒のときはわざと F5いかずに回転+鏡像の E6に打ってるよ
>>638 たまにいるよね。
向きが変わると定石がわからなくなる奴。
俺はランダムにどこでも置く。
640 :
1 :2007/01/16(火) 15:52:08
641 :
1 :2007/01/16(火) 15:53:53
だれかちゃんと動くように改造してクレー
>>641 まず理論を説明してよ。
ちゃんと動かないってのは、
具体的にどういう動作がどうなってほしいの?
いいよ、最終的に
>>1 のライブラリになればいいのかな?
644 :
1 :2007/01/16(火) 16:06:14
おかしなところは局面の出現確率で手を打ちきるんだけど すすんで戻ってを繰り返すところがある様子 あと、手が5手くらいしか生成できない局面で18手とか重複して生成することがある様子
645 :
1 :2007/01/16(火) 16:19:52
remove() 手を戻す msu() マスzからl方向へむけていくつコマが取れるか situ() zにおいたときに取れるコマを出す hmove() ハッシュ値の計算 adress() ハッシュ値からアドレスを出す move() zへ手を進める serch() 手をサーチする tset() 手を登録する mtd() 探索ルーチン main() 初期化をする
646 :
1 :2007/01/16(火) 16:32:17
hash a,b 局面の得点 ,t 手数と未登録の確認, h ハッシュ値の下位8bit te[] 手の登録など ad[128] 手数ごとのアドレス h[128][16] 手数ごとのハッシュ値 rh[64][2] 白黒、マスごとのハッシュ計算用テーブル rd[100] ハッシュが重複したとき手をずらす x アドレス F 白黒 z マス masu[128][2] 手数ごとの白黒の枚数 ban[64] コマのおいてあるところは1 t 手数 kd[64][8] カベまでなんマスあるか sit[64] sit[0]の取れるコマの枚数、次からはマス目 wb[128][8][3] bitボード、wb[][][0]が黒用、1が白用、2はコマがおける可能性のあるマス tn[128] 手数ごとの指し手 tsu[2] 0が現在の局面の手数、1は思考ルーチン内での指し手の深さ kar[128] 手数ごとの局面の実現確率
647 :
1 :2007/01/16(火) 16:41:22
>>642 645と646を参考にしてmtd()ルーチンを解読してください
ちっとループするようだけど、デバッグは完全じゃないね?
649 :
1 :2007/01/16(火) 16:55:23
mtdの動作 kar[0]=1; 確率1より大きい手を指す if((te[4*x]&128)!=0)if((te[4*x+1]&128)==0) 手が正常に記録されているか?壊れていれば登録 if(tu==0){if(td==1) 手が空が2度続いたときは勝敗を記録 if(((hash[x].t)&2)==2) 手がすべて出ていたら確率を変更する if(kar[tsu[1]+1]>=1) 確率が1を超えたら指し進めず手を戻す if(ha[tsu[1]]==1) 次局面のアドレスを出す if(((hash[x].a) < g) && ((hash[x].b) > g))if(kar[tsu[1]+1]<0.9) 手を指し進める基準 y=127-hash[x].b; 次局面で相手が最善手をうったときの得点の存在範囲から求まる得点 if(y>(te[4*ad[t]]&127)) 最大値を更新する for(i=cn+2;i>=4;i--) 最善手を先頭へ
650 :
1 :2007/01/16(火) 16:56:26
>>648 まだ出来上がってないんですよ
もう少ししたら完成するとおもいます
651 :
1 :2007/01/16(火) 17:09:08
ソースをパッと見てWZebraより強くなりそうですかね?
そのままじゃVisualC++2005でコンパイルすらできなかった。 多少手直ししたら通せたけど。 どのコンパイラで開発してたの?
653 :
1 :2007/01/16(火) 17:23:38
>>652 ボーランドc++です
始めに手を19と入力すると、20を返してくるんですけど
どこからmtdのwhileループを脱出しているのか特定できない...
どのbreak文でも出てない?
654 :
1 :2007/01/16(火) 17:25:39
>te[4*x]=128; ボーランドc++のcharって128を代入できるの?
656 :
1 :2007/01/16(火) 17:32:12
>>655 unsigned でした!ありがとう!
整形してVC++で動くようにしたのあるけど まだ変更してるようだしちょっと様子みるか あれだけ詰まってるとデバッグしづらいべ
プログラミング初心者か・・・
パッと見た感じだとオセロ初心者にも負けそうな感じだけど
660 :
1 :2007/01/16(火) 17:54:00
>>657 打ち込んで動作はしたよっていう、うpですからね
まともに動きすらしてないんです
明らかな重大なバグがあります 直し中です
これはずいぶん難読化したソースですね
663 :
1 :2007/01/16(火) 18:15:16
>>662 さんの整形からわかることですが
ban[64]=
{
0, 48, 12, 4, 5, 13, 49, 1,
55, 56, 40, 32, 33, 41, 57, 50,
19, 47, 28, 20, 21, 29, 42, 14,
11, 39, 27, 64, 64, 22, 34, 6,
10, 38, 26, 64, 64, 23, 35, 7,
18, 46, 31, 25, 24, 30, 43, 15,
54, 59, 45, 37, 36, 44, 58, 51,
3, 53, 17, 9, 8, 16, 52, 2
};
の番号順に、置ける手を探索していきます
普通に書いたら500行以上になるのか
>>1 なんでアルゴリズムだけ示してコーディングをみんなに任せないの?
不慣れな人間の下手糞なコーディングで他人の手を煩わせる時間を、
みんなを巻き込んでのアルゴリズムのさらなる改良に回せるのに。
こんなスパゲッティを根気強く茹で上げた
>>1 を称えたい
667 :
1 :2007/01/16(火) 18:36:32
まともに打ち込み始めたのは、14日からです スパゲッティといわれても、自分ではまあまあ読みやすいんです (手書きのノートが元になっててそれを打ち込んだだけなんです)
コードを書くのが初めてなんだから仕方がないね。
669 :
デフォルトの名無しさん :2007/01/16(火) 18:45:50
670 :
デフォルトの名無しさん :2007/01/16(火) 18:48:04
>>669 ルールがわかるだけですが、思考ルーチンには経験則は使いません
端の方をとった方がいいっていうのは使いましたが
一手打つ毎に盤面を表示しない? 座標だけ出されてもわかりにくいし ちゃんと動いてなくても気づきにくい
672 :
デフォルトの名無しさん :2007/01/16(火) 19:03:22
>>671 それは、BearRev用に改造すればいいんですよ
まだ完成してないけど...
673 :
1 :2007/01/16(火) 19:04:15
BearRev用にはすぐ出せるけど、コードの意味わからんと・・・ これから帰宅だし、、2時間かかるから誰か出すべ
石を返す処理が正しく動いてるかどうかも確認してないのか
676 :
デフォルトの名無しさん :2007/01/16(火) 19:38:00
ブログラム初心者ってのは本当だったんだな…www
677 :
1 :2007/01/16(火) 19:46:49
20手までwzebraに優勢で戦えたけど、次の一手が打てなくなった
678 :
1 :2007/01/16(火) 19:49:51
wzebra相手に終局までいったら次のうpしますね
そこまでの棋譜貼ってみて 強さを判断できるから
680 :
1 :2007/01/16(火) 19:54:22
>>679 先手Wzebraで
19,18
26,20
29,34
12,4
25,32
5,30
37,44
43,10
21,51
3,14
52
ですよ
ちょっと待ってくれ 19,18とかどこのことだ?
682 :
1 :2007/01/16(火) 19:57:24
左上が0番です その下が8番です その右が1番です
683 :
デフォルトの名無しさん :2007/01/16(火) 19:58:46
WZebraとの対戦のインタフェースってどうやってんの?
684 :
1 :2007/01/16(火) 20:01:21
それゼブラの評価値表示させてた? 既に大差負けの形勢だけど
これゼブラどころか負ける人間ほとんどいないと思うよ
D3C3C4E3F4C5E2E1B4A5F1G4F5E6D6C2F3D7D1G2E7 何これ・・ 白ボロ負けじゃん
人間やめなくていいよ。
689 :
1 :2007/01/16(火) 20:21:14
グラフ表示させてみるとWzebraとは別の局面になってたよ なぜだ?
690 :
デフォルトの名無しさん :2007/01/16(火) 20:23:44
WZebraは手ごわいから、とりあえずYahooオセロで1500目指せば?
一生懸命頑張ってぷろぐらむを書いた
>>1 のひたむきさに免じて最初の頃の大言壮語は許そう。
そのぷろぐらむのあまりの屁垂れた戦いぶりには涙を禁じ得ない。
だから、
>>1 、人間やめていいよ。
1に勝てるプログラムを誰かが書いてうp→それに勝てるのを書いてうp→繰り返し いずれ最強にたどりつけるんじゃね?
いやいや、まだデバッグも済んでないんだから これから強くなることに期待しよう。
というわけでやはりランダムに打つのと大差無いカスプログラムでした。
>>1 人間お疲れ様でした。
分かりづらい ~Init()
696 :
1 :2007/01/16(火) 20:45:11
いやまだ強さは不明だよ 取れるマスを間違えているから ここがちゃんと出来ないと評価値の計算も間違える
returnを使わないでgoto使ってるのは何故?
もういいよ
制御構文の勉強やり直したほうがいいよ。 まずはgoto消せ。
msu (char &l) 参照渡ししてる意味がわからない
701 :
デフォルトの名無しさん :2007/01/16(火) 20:58:43
636 :1:2007/01/15(月) 07:16:00 200行以内だけどかなり強いと思うよ そして13時間29分11秒が経過した・・・ 696 :1:2007/01/16(火) 20:45:11 いやまだ強さは不明だよ 取れるマスを間違えているから ここがちゃんと出来ないと評価値の計算も間違える
57年後
>まともに打ち込み始めたのは、14日からです 年末はなんだったのかとw
やけにスレが上がってくるから見てみたら・・
ここの
>>1 とんでもない痛い香具師だな
誰かC/C++でリファクタリングできるソフト知らない?
VS2005
707 :
1 :2007/01/16(火) 21:10:56
msに計算間違えがあることが判明した z=971;printf("z=%d\n",z); これでなぜかz=203になるけどなんで?
>>706 VS2005使ってC#ではやったことあって
>>1 のコードで同様にやろうとしたけどできなかった
C++はやり方が違うの?
709 :
1 :2007/01/16(火) 21:12:09
すまん解決した zは255までだった
>>708 C++はリファクタリングできませんよ。
>>710 なるほどd
Eclipseとかでもできないのかな?
713 :
1 :2007/01/16(火) 21:43:33
714 :
デフォルトの名無しさん :2007/01/16(火) 21:47:57
インデントを直すぐらいならあるけど、それ以上はしらない。
1よIDE使え。 VisualStudioかボーランドの奴とか使えよ。 無料なんだがな。
>>713 クラッシュした
(gdb) run
○●
●○
おけるマスは 19 37 44 26
input? 19
Program received signal SIGSEGV, Segmentation fault.
0x00401795 in _Z6adressv () at reversi.c:74
74 if((hash[x].t)==0){hash[x].h=y;hash[x].t=1+(masu[t][0]+masu[t][1]-3)<<2;
break;}
(gdb) print/x x
$1 = 0xfe6b4f95
(gdb) print t
$2 = 1 '\001'
(gdb) bt
#0 0x00401795 in _Z6adressv () at reversi.c:74
#1 0x00402bd8 in _Z3mtdv () at reversi.c:164
#2 0x00403845 in main () at reversi.c:241
717 :
1 :2007/01/16(火) 22:16:53
>>716 最低でも空きメモリは128M使いますよ
>>717 Mem:512MiB+Swap 768MiB 積んでるのでそれは大丈夫かと。
それよりも x の値が 0xfe6b4f95 ってのがおかしい気がする。
719 :
1 :2007/01/16(火) 22:20:28
思考時間1秒から5秒でやってみたけどWzebraに歯が立たない 10秒にしたところで大して変わらない気がする
720 :
1 :2007/01/16(火) 22:23:45
そうでした アドレス間違えてました 配列は2の24乗個しか用意してないのにxは24桁もあるんだった 修正します
721 :
1 :2007/01/16(火) 22:25:44
23bitの2進数の表現できる範囲は0から2^24 - 1ですよね
722 :
1 :2007/01/16(火) 22:29:50
>>721 ?
例えば8ビット符号無しだと0〜255(=2^8-1)だぞ
終了のお知らせw
725 :
1 :2007/01/16(火) 22:47:51
また間違えたかな 24ビットで良いのか
726 :
デフォルトの名無しさん :2007/01/16(火) 22:53:21
プログラムの間違いを指摘するより、 どうしたいのか言った方がこっちも答え易いぞ?
727 :
デフォルトの名無しさん :2007/01/16(火) 22:55:07
へぇ mebi って MiB って書くんだ
>>725 まだクラッシュするので調べてみた。
原因は main()の3行目の
fore(i,100)rd[i]=(rand()+(rand()<<16))%16777216+1;
らしい。
rand は符号付き int を返すので、これが偶然負の数になった場合、16777216で
割った余りも負になってしまい、そのまま符合無し int にキャストすると 16777216 を
超えると。この値が後で x に加算されて値がおかしくなるということっぽい。
………ちなみに修正したら今度は帰ってこなくなった orz
何回もソース見てるが何故これが強いと言い切れるのか分からん。
というか、これ何やってるの? 少しは説明してよ
732 :
デフォルトの名無しさん :2007/01/16(火) 23:40:29
>>730 >>1 がいうにはアルゴリズムが強いらしいぞ
プログラムは本当に初心者だから、このソース見てもバグだらけだし、
ちゃんと実装されていないし、強いとは思えないだろうけど。
保守性0のコードのメンテを頼まれた時の絶望感を感じるコードだな。
735 :
1 :2007/01/16(火) 23:45:06
終局の勝敗がちゃんと付けられないという致命的なバグがあります
これが直れば大分マシになるとおもいます
>>729 うちの環境ではrandは0から2^16-1なんです
randを自前で生成するという手か、初めから決めておくという手で回避出来そうですが
整形は一応自分でもしたけど、読み切ってるわけじゃなさそうだし 末端では何で評価してるのかとか
if(randnum<0) randnum=-randnum; これ追加しとけばいいんじゃまいか
いまさらintが16ビットの環境でプログラム作ってのか?
…「一応動く」だけじゃねえか あとそれはバグとは言わないぞ
RAND_MAX
742 :
デフォルトの名無しさん :2007/01/16(火) 23:57:59
(rand()%10)とかやれよ!
RAND_MAX使えよ!
hoge % 16777216 → hoge & 16777215 → hoge & 0xffffff これでいいのでは?
10年以上前のC++の方言で書いてるの?
>>728 mebi = Mi
最後の B は byte
皆さんは1さんがやりたいことが分かってるんですか? 僕にはさっぱりです。 誰か3行以内で説明してください。
最強のオセロプレイヤーを作りたい。 1行で説明したぜ。中のアルゴリズムと、目標をどれだけ達成できてるかは分からんが。
他人の注目を集めたい 俺も1行
>>750 gcc -Wall でやると
warning: array subscript has type ‘char’
warning: ‘xh’ may be used uninitialized in this function
この2つが山のように出るぞ。
void fn(char t) { int i,j; char bnn[64]; fore(i,64)bnn[i]=0; fore(i,8)fore(j,8)if(bt[wb[t][i][0]][j]==1)bnn[8*i+j]=1; fore(i,8)fore(j,8)if(bt[wb[t][i][1]][j]==1)bnn[8*i+j]=2; printf(" "); fore(i,8)printf("%c ",i+'A'); printf("\n"); fore(i,8) { printf("%c ",i+'1'); fore(j,8) { if(bnn[8*i+j]==0) printf("−"); if(bnn[8*i+j]==1) printf("●"); if(bnn[8*i+j]==2) printf("○"); } printf("\n"); } }
>>1 fn(t);
printf("おけるマスは ");
z=64;
while(1)
{
serch(z);
if(z!=97)
printf("%c%c:%d, ",(z%8)+'A',(z/8)+'1',z);
else
break;
}
こうしない?
>>1 がアルゴリズムを説明してくれればそれで済むのでは?
ここにいる連中なら一日もあれば作れそうだ
>>1 のデバッグに付き合うよりは効率的だと思う
自分の思ったように作られてないから弱いんだとか言い出しそう
ソースより1の書いたノート上げてくれよ
1 のプログラムの問題点(上のものほど問題が大きい) 構造やデータがきれいに分類・整理整頓されていない グローバル変数の多用、struct などで構造化されていない gotoを多用し、繰り返し等の構造が複雑怪奇 コメントがない 読みにくいスタイル removeのような凶悪マクロ オブジェクト指向的でない K&R 形式の関数定義などの古すぎる文法の利用
759 :
デフォルトの名無しさん :2007/01/17(水) 10:26:51
>>759 そんなことはわかってる
でも初心者だからといって問題が解決するわけじゃない。
えーっと、ここは誰でもソース貼っていいのかな?
762 :
デフォルトの名無しさん :2007/01/17(水) 11:25:21
>>760 じゃー初心者がやりがちな問題点を列挙したところで問題が解決するのか?
誰もがわかっている上で助言してたり、ソース修正してうpしたりしてるなかで、
おまいがやってることは一番意味のないことだと思うが
>>762 まぁまぁ落ち着こうぜ
初心者叩きして悦に入りたいやつがいるのはいつものことじゃねーか
>>762 今の所アルゴリズムは公開されてないわけだし、1 が問題点を読んで
少しでも留意するようになれば、多少は問題解消に近づくと思うんだが。
ソースがあるんだからそれ読めばいいと思うんだけど いかんせん読む気がしない
アルゴリズムに意味があればソースに多少のバグがあっても やりたいことはわかるんだけどな
>>1 が自分のソースを数ヵ月後に見直したら読めなくなってるだろうなぁ
なんで使いこなせもしないのにC++で書くんだ Cでいいだろ
背伸びしたい性格なんだよ
C++で書いてあるのはごく一部だろ
iostream使ってないしなあ
1は社会人なのか?
お前誰だよ。 消えろカス。
それと >> 使えよ。 不便だろ?
>>776 乙。
やっぱこうしたほうが使いやすいね。
まぁあんな部分C++で書く意味はないね。
書き直すにしてもすぐ終わるし。
ところで
>>1 は人が書き直したソースを使う気はあるのだろうか。
なんでも自分でしたがってるように見えるが。
K&R方式で書いてないだけましだ。
妙にK&R方式を否定するのにこだわるヤツがいるな 昨日にでも知ったのか?
否定するわけじゃないが
>>1 の横一列ソースじゃとても読めたものじゃなくなる。
変数宣言だけ見てるとHSPを見てるような不安感に襲われる
もうアセンブラでいいじゃないか? マクロもあるしな。
プロトタイプは書かないのw
790 :
デフォルトの名無しさん :2007/01/18(木) 02:14:46
>>1 バグの指摘だけ聞いてプログラミングの作法は無視か?
みんな何だかんだ言いつつ親切だな ツンデレかw
792 :
デフォルトの名無しさん :2007/01/18(木) 03:54:31
> 昨日にでも知ったのか? K&Rを昨日?ANSI Cが出てから何年経ったんだよ・・・
>>792 マジレスして悪いが、K&Rを「電波本」と称した奴がこの板に数年前いたぞ。
クライスラーあんどカンパニーだっけ
795 :
1 :2007/01/18(木) 19:15:46
可読性を改善する気はないわけか
Artistic Styleでちょちょいとフォーマットかければいいじゃまいか
799 :
1 :2007/01/18(木) 19:36:13
>>798 ありがとう
インストールしてみる
>>796 画面でのスクロールが少なくていいんです
5秒〜10秒考えても終局の10手前が読める程度で
Wzebraに勝てそうにないため、ここまでのプログラム経験、デバッグ経験を
生かして根本から思考ルーチンを作り直してみます
f5f4e3d6f3e2d2g4d3d1e6f6h4h5h6g5g6h7 今適当に打ってみたけど上の展開で簡単に詰んだぞ プログラムが後手で先手が自分
>>190 >アルゴリズム的には変更の余地が無いところまで完成しましたよ
>これが最強でなかったら人間やめます!
>>520 >まもなく完成します!これが最強でなかったら人間やめます!
最強じゃなかったら根本から思考ルーチンを作り直すんじゃなくて
人間やめるんじゃなかったのか?
802 :
1 :2007/01/18(木) 19:50:25
>>801 アルゴリズムを正常に効率よく動かすための改良のことなんです
全く別のアルゴリズムを作るわけではないです
うまく動作してない=完成してないです
まもなくが長引いただけなんです
ということは一生人間やめなくてすむわけか
804 :
1 :2007/01/18(木) 19:56:32
ここまでは、プログラムの練習ということで ここからが本番です
アルゴリズム的に変更の余地があったのね ってか大口叩くのやめたほうがいいよ できもしない事ばかり言うから嘘つきになってるんだよ
806 :
1 :2007/01/18(木) 20:02:35
考えているアルゴリズムに変更の余地はないですよ その動作を正確に実現するコードを作るだけです
807 :
デフォルトの名無しさん :2007/01/18(木) 20:07:36
その考えてるアルゴリズムは公開しないの?
コメントだけでも入れておくれ
809 :
デフォルトの名無しさん :2007/01/18(木) 20:10:37
一旦ソースを捨ててゼロから作り直すように言おうと思ってたけど 自分で決断してくれたか。
>>799 >画面でのスクロールが少なくていいんです
その考え方はまずい。
段組などを使って読みやすく書いた時に、一つの関数が2〜3ページを超えるようなら、
もっと基本的な処理単位(関数)に分割できるはずなので分割するべき。
そうすれば一つの関数の長さも減り、プログラムも読みやすくなるし、ついでに
見通しがよくなる分、訳の分からないバグを作りにくくなる。
811 :
1 :2007/01/18(木) 20:40:39
関数に細かく分けて独立度を高めるほどに、重複して使える変数が減って その都度(関数呼び出しごと)に変数の生成と、関数呼び出しのオーバーヘッドが かかりますよね 一般的な場合は、そうかと思いますけど、思考ルーチンの場合はどうなんでしょうか?
スクロールを少なくしたいなら複数のファイルに分割すればいいんじゃない?
813 :
デフォルトの名無しさん :2007/01/18(木) 20:44:32
まずはまともに動くものを作ることが重要だろ。 高速化は後からできるしみんなが言ってるように書いておけばし易い。
814 :
1 :2007/01/18(木) 20:45:03
>>812 そういう高等テクはやりかたわかりません
コンパイラによるんだとは思いますけど、関数呼び出して、元に復帰するには
かなり時間がかかりますよね 主要ルーチン(繰り返す部分)は細かく別けない方がいいのでは?
815 :
デフォルトの名無しさん :2007/01/18(木) 20:48:29
お前はまずちゃんと動くものを作れ。 遅くてもいいからアルゴリズムがわかればいい。 高速化に関してお前よりデキル奴はいっぱい居るんだから
>>811 ,814
普通は、変数生成や関数呼び出しの負荷は主処理の1割にも達しないよ。
それに呼出し負荷がどうしても気になるなら inline 宣言すれば負荷ゼロにできるし、
大きな変数はポインタか参照渡しすれば負荷は殆どない。
チューニングなんかを考えるよりもアルゴリズムに力を注いだ方がいいよ。
例えば 30 手読みの場合、読む必要のある手をたった 5% 減らすことができるだけで、
約5倍も高速になる。
それにチューニングは完成してからでもできるからね。
>>795 まだバグがあるよ。
俺が黒、コンピュータが白で対戦始めたけど
途中で詰んでやすり打ちしてたらコンピュータが黒を打ち始めたぞ
819 :
デフォルトの名無しさん :2007/01/18(木) 21:59:53
まず人間対人間でルール通りに動くのができてからコンピュータを追加しろよ
むしろ人間もCPUも同じインターフェースでさせるようにしとけ そしたらすぐにCPU対戦が試せる
>>820 main() の、人間から入力を受ける「printf("おけるマスは」〜「ad[t]=x;」の3行消せば
CPU対戦になると思う。
オセロかあ そういや小学生の時VBで作ったっけ 自分ではどうやっても勝てないぐらいには強かったが、上手い子にはボロ負けだったなあ
824 :
デフォルトの名無しさん :2007/01/19(金) 04:28:37
オセロ男 ドラマ化!!
>>814 >816の補足だが、今のコンパイラはおまえが考えるよりもよっぽど巧く最適化してくれる。
例えばgccやiccでは(最近のVCもそうかもしれんが)、内部リンケージの関数は勝手にインライン展開する能力がある。
つまり、関数を分けて書いても呼び出しコストは全く掛からない可能性さえあるわけだ。
全米がひっくり返った!
雑談はみんな知ってる内容だからどうでもいいから 早くプログラム作ってうpしてくれよな
828 :
816 :2007/01/19(金) 17:55:28
829 :
1 :2007/01/19(金) 19:25:06
830 :
1 :2007/01/19(金) 19:28:34
Microsoft Visual C++ 2005に対応しました ターボC++にも対応していきます バグは有りすぎるんですけど、あとちょいでうまく行きそうな予感がします
831 :
1 :2007/01/19(金) 19:32:47
>>830 コンパイルエラー
test.cpp:1:20: stdafx.h: No such file or directory
test.cpp:236: error: `main' は `int' を返さなければなりません
833 :
1 :2007/01/19(金) 19:43:07
>>833 難読化解除しないと誰も相手にしてくれないぞ?
#define fore(i,N) for(i=0;i<N;i++) まずこの時点で読む気なくなる
foreのマクロはやめないか? プリプロセッサ通して整形すればいいから。 あと変数ももっと他人が読んで用途を予測しやすい名前を付けないか?
>>833 不正終了するので、239行目の
fore(i,100)rd[i]=(rand()+(rand()<<16))%16777216+1;
を
fore(i,100)rd[i]=((rand()+(rand()<<16)) & 0xffffff)+1;
に。
これを修正してもまだこんな感じで不正終了する。
Program received signal SIGSEGV, Segmentation fault.
0x00405d0d in _Z3msuRc (l=@0x22cbe3) at reversi.c:43
43 return ms[sum][F];}
(gdb) print sum
$1 = 18372
(gdb) print F
$2 = 0 '\0'
(gdb)
でも変数名が意味不明なのでわけわかめ。
とりあえず変数名は読んで内容の分かるものにしてくれ。
例えば hash.a ではなく hash.tokuten_a とか。
838 :
1 :2007/01/19(金) 20:02:22
>>837 randの範囲を教えてください
ifで分岐するので
0からRAND_MAXの値を動くはず
840 :
1 :2007/01/19(金) 20:04:02
マイナスの値もとるんでしょうか?詳しく教えてください
842 :
1 :2007/01/19(金) 20:05:02
>>839 単に逆転させるだけでは駄目なんです
適切な範囲に値を収めないと
843 :
1 :2007/01/19(金) 20:06:02
>>841 機種依存しているRAND_MAX の値を教えてください
>>838 この修正を使えば、randの範囲に関係なくいつでも正しく動作しますのでおすすめ。
>>840 rand() 自体は負にはなりませんが、<< でずらすと負になりえる。
じゃあまず機種を言えカス
表示してみればわかるだろ・・・
847 :
デフォルトの名無しさん :2007/01/19(金) 20:08:27
>stdlib.h の中でマクロ定義されています って書いてるんだしstdlib.hを見ればいいだろカス
848 :
1 :2007/01/19(金) 20:10:53
837さんのRAND_MAX値をここに書いてくれればいいんだよ....
849 :
デフォルトの名無しさん :2007/01/19(金) 20:12:17
何のためにRAND_MAXっていうマクロがあると思ってるんだ? 具体的な数字をソースに書いたらこのマクロの意味無いだろ
850 :
837 :2007/01/19(金) 20:16:34
>846-847
>1 が聞きたいのは自分の環境の RAND_MAX ではなく >837 の環境の値では?
>>848 RAND_MAX の値がいくらであっても、左シフトしたら符号ビットがおかしくなる
可能性は常にある。何で >837 の修正ではだめなの?
851 :
1 :2007/01/19(金) 20:19:49
まずはRAND_MAX値を出してほすぃ
#define RAND_MAX 0x7FFFU
853 :
デフォルトの名無しさん :2007/01/19(金) 20:24:10
VisualC++2005のstdlib.h #define RAND_MAX 0x7fff
854 :
1 :2007/01/19(金) 20:25:29
誰でも0〜32767なの?それならエラーにならないと思うんだけど
>>852 はBorlandC++のstdlib.h
GCCのstdlib.h #defineRAND_MAX0x7FFF
857 :
1 :2007/01/19(金) 20:27:44
0〜 32767<<16 + 32767 右辺は符合ビットに接触しないし剰余を求める時点で負にならないし
>>837 ではないけど
/* The largest number rand will return (same as INT_MAX). */
#define RAND_MAX 2147483647
>>854 FreeBSD(gcc)のstdlib.h
#define RAND_MAX 0x7fffffff
861 :
1 :2007/01/19(金) 20:32:48
859の場合は、 fore(i,64){rh[i][0]=rand()+(rand()<<16);rh[i][1]=rand()+(rand()<<16);} fore(i,100)rd[i]=(rand()+(rand()<<16))%16777216+1; fore(i,64){rh[i][0]=rand(); rh[i][1]=rand();} fore(i,100)rd[i]=rand()%16777216+1; に変更してください
862 :
1 :2007/01/19(金) 20:33:28
訂正 859の場合は、 fore(i,64){rh[i][0]=rand()+(rand()<<16);rh[i][1]=rand()+(rand()<<16);} fore(i,100)rd[i]=(rand()+(rand()<<16))%16777216+1; を fore(i,64){rh[i][0]=rand(); rh[i][1]=rand();} fore(i,100)rd[i]=rand()%16777216+1; に変更してください
RAND_MAX = 0x7ffff の場合は?
864 :
1 :2007/01/19(金) 20:38:19
機種異存なしバージョン fore(i,64){ rh[i][0]=(rand()%65536)+((rand()%65536)<<16); rh[i][1]=(rand()%65536)+((rand()%65536)<<16);} fore(i,100)rd[i]=((rand()%65536)+((rand()%65536)<<16))%16777216+1;
%65535は&0xFFFFと同じ
866 :
837 :2007/01/19(金) 20:45:19
ばんばんレスが進むのでタイミングを逃した間もあるが、まとめて。
>>851 モードによって値が違ってて、
cygwin モードでは 2147483647、mingw モードでは 32767 だった。
>>857 こっちの環境の剰余は負になる。
数学やった人は剰余 = mod と考えるから結構それで引っかかったり。
>>864 今確かめたけど負になって不正終了するね
Program received signal SIGSEGV, Segmentation fault.
0x004083c7 in _Z6adressv () at reversi.c:76
76 if((hash[x].t)==0){hash[x].h=y;hash[x].t=1+((masu[t][0]+masu[t][1]-3)<<2
);break;}
(gdb) print/x x
$1 = 0xfeb451af
(gdb)
867 :
1 :2007/01/19(金) 20:48:30
あれ、unsignedになってても負になるんですかね? 今、32bitめい一杯、詰め込んでみたら不正終了しました unsignedでも、上位ビットは、0じゃないと駄目なのかな?
868 :
1 :2007/01/19(金) 20:49:49
万能バージョン fore(i,64){ rh[i][0]=(rand()%256)+((rand()%256)<<8)+((rand()%256)<<16)+((rand()%128)<<24); rh[i][1]=(rand()%256)+((rand()%256)<<8)+((rand()%256)<<16)+((rand()%128)<<24);} fore(i,100)rd[i]=((rand()%256)+((rand()%256)<<8)+((rand()%256)<<16)+((rand()%128)<<24))%16777216+1;
869 :
1 :2007/01/19(金) 20:52:29
868は、 RAND_MAX=32767のときに16bit目が常に0になってしまうのを回避しました
馬鹿馬鹿しい。 そもそもRANDごときでつまずくぐらいなら、使うな。
871 :
837 :2007/01/19(金) 20:55:32
>>867 そう。CPU によっても違うのだろうけど、x86系CPUでの符号付き数の割り算は、
符号を取ってから割って、結果に符号を付け直すから。
>>868 動いた。ただ割り算命令って他の計算命令の何十倍も遅いよ。
普通にビットマスク (& 0xffffff) すりゃいいのにとどうしても思ってしまう。
872 :
837 :2007/01/19(金) 20:59:28
>>867 失礼、答えになってなかった。符号無しになるタイミングの問題。
rand() の返り値は符号付きなので割り算は符号付きで行われる。
そして符号無し変数に代入される時になってやっと、符号無し数に変換される。
読んでないから分からないけど、初期化ルーチンなら100倍遅くても問題ない気がする それにその値ならコンパイラがビット演算に置き換えるし
874 :
1 :2007/01/19(金) 21:02:21
上2つは256で平気でした
256にしないとハッシュテーブルの領域が50%使われなくなってしまう
>>871 初期化するときに一度使っているだけですから速度は関係ないんです
fore(i,64){
rh[i][0]=(rand()%256)+((rand()%256)<<8)+((rand()%256)<<16)+((rand()%256)<<24);
rh[i][1]=(rand()%256)+((rand()%256)<<8)+((rand()%256)<<16)+((rand()%256)<<24);}
fore(i,100)rd[i]=((rand()%256)+((rand()%256)<<8)+((rand()%256)<<16)+((rand()%128)<<24))%16777216+1;
foreはやめて普通にforで書けよ
人の意見を聞かないのは何故?
877 :
デフォルトの名無しさん :2007/01/19(金) 21:13:10
自分のスタイルを否定されたと思ってるからでは
fore
879 :
1 :2007/01/19(金) 21:17:56
本質に関わりないと思うところは無視してますが。
他人の力を借りようとしてるのに 人の可読性を下げる事はやめたほうがいいんじゃない? みんな読みにくいって言ってるよ。
でた!ダメ数学者の特徴!
882 :
デフォルトの名無しさん :2007/01/19(金) 21:20:45
>>1 のプログラムは「最強のオセロプログラム」とは本質的に関わりが無い
>>1 何でこれだけ人がいるのにデバッグに数日かかってるかわかってるの?
>>758 あたりを意識して書いてくれさえすれば一日でデバッグ終わるぞ、たぶん
グローバル変数多すぎだし、グローバル変数でも一文字とかだし 変数の意味わからなすぎだし、インデントつけてないし、変なマクロ使ってるし、 わざとやってるとしか思えない。
bt[i][j] って i の jビット目の有無かよ orz こんな簡単な計算、表引きにしたって速くならない気がする。 こういう所こそマクロをつかえばいいのに。 #define bitcheck(i,j) (((i) >> (j)) & 1) とかして bt[wb[t][i][0]][j] を bitcheck(wb[t][i][0], j) になるだけで大分読みやすさが変わるのになぁ。
マクロは止めたほうがいいよ。 下手なマクロはNGの元
887 :
1 :2007/01/19(金) 21:45:25
わかりました ソースを見やすく改良します あと配列参照するより計算した方が速いかもしれないですね もしかしたらハードディスクを読むにいくことになるかもしれないですし
>計算した方が速い 日本語読めないのか?
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などの変な入力をチェックしていないので、即クラッシュします。 両者置けなくなったらプログラム終了です。自分で数えてください。 もっとも、このコンピュータは激弱ですので負けようがないとおもいますが(笑
>>889 これどうやって遊ぶの?
こっちが1手目打ってから5分経っても
level=10
って表示されたままだけど
>>892 初期値間違ってたスマソ
level は大体 5 前後に、target_time にはPCの思考時間(秒)を設定してください。
894 :
1 :2007/01/19(金) 22:22:09
>>889 参考にします!
ボーランドの5.5でも、ボーランドの2006でもコンパイル出来ない
マイクロソフトは出来たけど
マイクロソフト専用?
>>894 汎用のつもりだったんだけど…
出たエラーコピペしてもらっていいですか?
896 :
1 :2007/01/19(金) 22:29:46
>>895 ボーランド2006です
[C++ エラー] (35): E2268 未定義の関数 'memset' を呼び出した
[C++ エラー] (115): E2268 未定義の関数 'printf' を呼び出した
[C++ エラー] (119): E2268 未定義の関数 'printf' を呼び出した
[C++ エラー] (125): E2268 未定義の関数 'printf' を呼び出した
[C++ エラー] (128): E2268 未定義の関数 'printf' を呼び出した
[C++ エラー] (131): E2268 未定義の関数 'printf' を呼び出した
[C++ エラー] (135): E2268 未定義の関数 'printf' を呼び出した
[C++ エラー] (137): E2268 未定義の関数 'printf' を呼び出した
[C++ エラー] (181): E2268 未定義の関数 'printf' を呼び出した
[C++ エラー] (187): E2268 未定義の関数 'perror' を呼び出した
[C++ エラー] (188): E2268 未定義の関数 'exit' を呼び出した
[C++ エラー] (191): E2268 未定義の関数 'sscanf' を呼び出した
[C++ 警告] (192): W8013 's' は、おそらく値が代入される前に使われている
[C++ エラー] (194): E2268 未定義の関数 'sscanf' を呼び出した
[C++ 警告] (195): W8013 'numpos' は、おそらく値が代入される前に使われている
[C++ エラー] (198): E2268 未定義の関数 'strchr' を呼び出した
[C++ 警告] (199): W8013 'p' は、おそらく値が代入される前に使われている
[C++ エラー] (203): E2268 未定義の関数 'strchr' を呼び出した
[C++ エラー] (212): E2268 未定義の関数 'printf' を呼び出した
[C++ 警告] (217): W8080 宣言された 'alphapos' は使われていない
[C++ エラー] (312): E2451 未定義のシンボル time_t
[C++ エラー] (312): E2379 ステートメントにセミコロン(;)がない
[C++ エラー] (313): E2379 ステートメントにセミコロン(;)がない
[C++ エラー] (323): E2268 未定義の関数 'exit' を呼び出した
[C++ エラー] (332): E2268 未定義の関数 'printf' を呼び出した
[C++ エラー] (334): E2451 未定義のシンボル st
[C++ エラー] (334): E2268 未定義の関数 'time' を呼び出した
[C++ エラー] (336): E2451 未定義のシンボル ed
[C++ エラー] (336): E2268 未定義の関数 'time' を呼び出した
[C++ エラー] (336): E2228 エラーあるいは警告が多すぎる
ボーランド2006のインストールがちゃんとできてないだけじゃん
>>896 どうもです。たぶんコンパイラが新しい規格に対応してないのか(?)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
このヘッダが認識できないのではないかと。
この推測が正しければ、それぞれ下のヘッダに置き換えれば直ると思います。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
namespace std を using しろや。 対応してないって無茶いいやがって。 新しい規格っていつの規格のことだ? c++0x か? VC++ 使っといて、規格準拠してるつもりかい。 ヘッダが認識できなかったらファイルが見つからんとエラーが出と推測できるだろうに。 まあ、using するよりいちいち std:: 付ける方が好みだが。
規格完全準拠のコンパイラってあるんか?
準拠度ならVC++は高いほうなんだが
>>900 そうか!マニュアル引いてやっと気がついた。
ありがとう。
# ちなみに使ってるのはg++。
g++ = gcc
906 :
デフォルトの名無しさん :2007/01/20(土) 01:04:00
そうです
アルゴリズムを明示せず下手なプログラムを適当に書いて
他人が親切に強いルーチンを実装してくれるのを待って
アイデアのオリジナリティは元のプログラムを書いた自分にある
と
>>1 が主張する予定のスレです
何その韓国人みたいな根性
>>1 は叩かれるのがわかってて(むしろ目的で)やってるからいいの。
いつのまに・・・・・
912 :
1 :2007/01/20(土) 13:36:06
評価関数を変更することにしました 枚数×2 + 空白の数 では、指せる手の数が増えすぎて幾らアルゴリズムが良くても計算不可能なようです 指し手の可能数と、マスの位置による点数を使うことにします
913 :
1 :2007/01/20(土) 14:14:25
オセロを征服したら、ボナンザと銀製囲碁(北朝鮮製)を倒そうと思ったのに... 1/31日までにWzebra倒すのと将棋をあらかた完成させるのは大変になってきた
すげぇ・・・
本人とは思えないが.本物?
無能の癖して大口叩いてるから本物
>幾らアルゴリズムが良くても それは悪いと言った方がいいんじゃないかな?
その理論からいけば全検索が最善のアルゴリズムとかほざきそう。
1のやろうとしていることがなんとなくわかったが、 これは理論の裏づけのないナンチャッテだとおもうよ。
>枚数×2 + 空白の数 これは理論の裏づけが何も無いから弱いんだけど、 >指し手の可能数と、マスの位置による点数 これは大学の宿題レベルでよく使われる物で実装が簡単な経験則。 これでもWZebraよりははるかに弱いけど今までのよりはマシになる。
7行オセロのほうが勉強になるよ…
そりゃ滅茶苦茶なプログラム書いてりゃ
一日で終わるものも半年掛かるわな
都合の悪いものは全て無視
↓ここから
>>1 の日記スタート
1が近くにいたら歩道橋に近寄らないように!
>評価関数を変更することにしました 最強じゃなかったら評価関数を変更するんじゃなくて人間やめるんじゃなかったの?
全探索は計算が可能な問題に適用するのであれば最強だが、 オセロに於いては手の数が増えすぎて計算不可能だから悪いアルゴリズムで、 少ない計算量で全探索にできるだけ近い結果を出すのが良いアルゴリズム。
たまには斜めも思い出してください。
強いと思った理由 俺が作るから最強 でFA?
929 :
デフォルトの名無しさん :2007/01/20(土) 22:40:01
> 評価関数を変更することにしました
> 枚数×2 + 空白の数
> では、指せる手の数が増えすぎて幾らアルゴリズムが良くても計算不可能なようです
> 指し手の可能数と、マスの位置による点数を使うことにします
評価関数がすでにダメで、指せる手の数がすでに多すぎていたのに、
アルゴリズムは良いものであるとおっしゃるのか?
>>1 が言ってる考え出した最強のアルゴリズムって何を示しているの?
言ってる事を纏めれば
>>928 でFAだと思うが。
論理はチャチだしお花畑思考すぎるしで呆れるばかりだ。
オセロなんて将棋よりかなり規模が小さい思うが… 将棋は取った駒を盤面に打てるんだぜ? どうやって枝刈するつもりだったんだ? 囲碁はもっと大変どこにでも打てるんだよ。 囲碁のは宇宙。 1には絶対最強のプログラムなんて作れない
>>931 >>1 は問題点を言われただけじゃ理解できないけど
実際に作ってみたら気づいたようだし
王道により近い手法を使うようにはなって行ってるから
ある程度強いのは作れるようになるかもしれないよ。
933 :
デフォルトの名無しさん :2007/01/20(土) 23:25:53
>>932 でも王道に近づいて行くのって本末転倒だよなwwwww
934 :
デフォルトの名無しさん :2007/01/20(土) 23:29:58
信じてるぜー がんばれ
935 :
1 :2007/01/20(土) 23:50:28
非常に小さい数を扱いんだけど、扱えない... 例えば、3手づつ分岐したとして初めで1/3になり、次に1/9になり と繰り返すと15手先で、1 / 14348907くらいになりダブルでも計算が0になったりする どうしたらいいですか?
固定少数点数で計算するとか。
>>935 高々「1 / 14348907」くらいでdoubleが表現できないと申されるか。
ご自分の能力のなさを棚に上げるのも大概になされよ。
#どうせ、printf("%f", 1 / 14348907);とでもして0だとほざいているのだろうけれど。
938 :
デフォルトの名無しさん :2007/01/21(日) 00:03:15
キャスト出来てないだけだろどうせ。 1.0f / 14348907.0fとか static_cast<double>(1) / static_cast<double>(14348907)とか
939 :
デフォルトの名無しさん :2007/01/21(日) 00:05:16
>>937 初心者はまずここで躓くから仕方ないんじゃね?
int同士の割り算がint返すとは思わんでしょ
>>935 たったそのくらいで 0 になるなんておかしいと思って検証してみた。
bash% ./a
1/3^1: 0.3333333333333333148296162562473909929394720000000000000000
1/3^2: 0.1111111111111111049432054187491303309798240000000000000000
1/3^3: 0.0370370370370370349810684729163767769932750000000000000000
(略)
1/3^14: 0.0000002090751581287690209449910442793263420000000000000000
1/3^15: 0.0000000696917193762563359033670811436278480000000000000000
1/3^16: 0.0000000232305731254187797373631771185795160000000000000000
(略)
1/3^49: 0.0000000000000000000000041788667072956152410000000000000000
1/3^50: 0.0000000000000000000000013929555690985384140000000000000000
平気っぽいが。
やっぱりゴミだなw
943 :
1 :2007/01/21(日) 00:10:47
すみません printfの表示桁が駄目だったようです
計算の種類によっては、有理数型のほうがdouble型よりも速いかもしれない。
確率で重み付けするのか。 オカルトですか?
くだスレ化してきたな。
やっぱ1が痛いだけじゃみんなも飽きてくるさ
それ前に貼られてなかった? それかオセロのスレ貼ってあったところから行けるとこじゃね?
>>25 いまさら人の意見聞く奴じゃない。
無駄だろ。
%fじゃなくて%gで表示しろよ。
最強のオセロマーダー?
>>1 の言葉の端々に"責任転嫁"が感じられるなぁ。
自分の能力が低い事をどうしても認めたくないんだろうね。
>>1 が初心者なら、誰かごくごく基本的な最低限オセロが出来るプログラムをここに貼って、
それを改良させたほうがいいとおもうんだがどうだろう。
あとはミニ四駆のようにどんどん自分で調べ強くしていけば
>>1 の才能しだいで最強にプログラムが出来るんじゃないだろうか
もはや改良の余地がないな
959 :
1 :2007/01/21(日) 07:48:07
今日中に最強を突破して、次にボナンザを倒す!24時まで待ってて下さいね
バグの多さ=無能さ
2007 の4つの数字の並べ替えで出来る最大の数から最小の数を引く -> 7200 - 0027 = 7173 同様に -> 7731 - 1377 = 6354 -> 6543 - 3456 = 3087 -> 8730 - 0378 = 8352 -> 8532 - 2358 = 6174 -> 7641 - 1467 = 6174
>>890 って実際どうなの?まともなプログラム?
俺ちょっと他ごとにこれ使いたいんだけど、強く出来るかな?
>>963 まともな方のソースあげるって書いてあるよ
965 :
デフォルトの名無しさん :2007/01/21(日) 18:07:44
トリッキーの1ってやつがサイト持ってるからそこにあるんじゃね? 七行プログラミングの過去スレとかにはってあったはず
ミニ四駆で一番効果があったのはモーターのエナメル線巻きなおしだったなぁ。 リバーシのプログラムで言うならCPUのクロックアップ?
で どうなの?
>>1 も身の程を知ったろう
世の中そんなに甘くはねーのじゃ
Cの文法勉強して、参考書の例題プログラム以外で初めて作ってみた。
リバーシ簡単に見えて結構奥が深いんだな。
定石とかググったら大量に出てきてビビタ
で、それを踏まえると
>>890 が神に見える。。。
俺のソース300行オーバー orz
未だAIなんて一番左上から順に探索してるのに……
七行オセロは神レベルだよ。
>>969 乙。
定石は今では人間よりも上質なのをコンピュータが大量に自動生成させる事もできるしね。
名前が付いてる定石はコンピュータが弱かった時代から使われてたのが多い。
そのプログラムは公開しないの?
>>1 のより強いかもしれない。
行数削るために3項演算やifやforの使い方がトリッキーになってる。 表示も上手いことやってるな。 t-2って面白い。
ここで7行オセロをほめてる奴等、約5年半前の作品とはいえ、本当にすごいと思うのなら ちゃんと七行プログラミングスレにも感想を書き込んでやってくれ。
976 :
デフォルトの名無しさん :2007/01/21(日) 22:52:38
俺は7行スレで10行程度のオセロしか作れなくてたたかれまくったけどなwww
そういや日付が変わってた。
>>1 はまた嘘をついたなぁ。
てか、決めた日付にプログラム完成されられるほど プログラミングレベルねーじゃん
>959は偽者だろ?
なんでそう思うの? 俺は本物っぽい気がするけど
1 は数字はきっちり半角で書く人だったのに、急に全角数字になってる あたりとか怪しい。
なるほど。鋭いね。 言われてみれば偽者っぽい気がしてきた
ていうか
>>1 なんてそもそも最初から存在しなかったんだよ
>>969 300行でもよほど間抜けな内容じゃないかぎりちょっといじればすぐに30行以内に縮めれるよ。
まだのこってるんならそのプログラムうpしてみ
まじめに作ろうと思ってる奴誰かおらん? 居たら酉付けて立候補してくれ。 俺はプログラミングできないけどオセロはハンゲで永世名人。
>ハンゲで永世名人 いつもお世話になっていますw
991 :
986 :2007/01/22(月) 05:58:16
おー でもiアプリか。 俺の携帯auなんだよな...
ところで次スレたてないの?
994 :
986 :2007/01/22(月) 06:06:47
>>992 vsOthaは使ってみた事がある。ありがとう。
でもNTestとかWZebraより強いのが欲しい...
runoth booby とかはそんな強くないですか?
996 :
デフォルトの名無しさん :2007/01/22(月) 06:13:56
runothとboobyとvsOthaの強さの順番はよくわからないけど、 NTestやWZebraに比べたら弱いのは確か... NTestはWZebraより強いと言う人も居るけど大差ないと思う。
梅が咲いてる
1000get!!!!!!!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。