1 名前:デフォルトの名無しさん [2007/01/22(月) 06:13:18 ] まずBearRevのDLLを作る そして世界最強っぽいリバーシプログラムWZebraを倒すスレ 期間は三ヶ月以内で頼む どんどんアイデアとプログラムを頼む 本格的リバーシ BearRev www.vector.co.jp/games/soft/dl/win95/game/se098822.html 最強っぽいリバーシプログラムWZebra www.radagast.se/othello/download.html 姉妹スレ おまいら最強の将棋プログラムしてみろよ part5 pc8.2ch.net/test/read.cgi/tech/1109307327/l50
710 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 11:39:00 ] 無関係な突っ込み n=z-8*m; は n=z % 8;
711 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 12:05:30 ] 誰かが言ったようにlp[]の初期化に失敗している。 7行オセロのソースを見ろよ。
712 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 12:10:32 ] lp[] ={9,9,9,9,1,7,8,9} これで大丈夫なのか?
713 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 12:19:47 ] int lp[]={-9,-8,-7,-1,1,7,8,9}; で正常に1手目は出た。 llp[]の意味するところがわからんから後はどうなるかわからん。 ごみを生産するんじゃない。
714 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 12:24:28 ] デバッガ使いたくないならprintfでもはさんでデバッグやれ。 if(z<64)printf("\n着手可能 %d %d",z/8+1,z%8+1);
715 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 12:37:18 ] なぜintにしたか? それはcharだとデバッガで文字として出てくるから。
716 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 12:43:38 ] めんどくさいからそのまま春。 int serch(board bord ,int z, int F) { int w,l; for(w=z+1;w<64;w++) { fore(l,8) { if(torerusu(bord,w,F,l)>0)return w;//break;なんなの? } //if(l<8)return w;これなんだ? } return 64; }
717 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 13:11:45 ] 質問 mtのfor(;;)for(;;){ って意味あるの?
718 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 13:31:44 ] わかった! continueを知らないだけだ!
719 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 13:44:10 ] >>717 break など使うものか!意地でも goto を使うんだ! という意志の表れと見た。
720 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 13:48:05 ] いや、breakで抜けた後もループしたいからforforしてるんだよ。 continueしらないだけ。
721 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 14:18:57 ] 読み直してみた。たしかに continue を知らないだけのようだ。
722 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 14:38:09 ] #define PASS 64
723 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 14:46:10 ] 少しは努力しろ
724 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 14:54:56 ] #define が多いけど、enum は使わないの?
725 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 14:56:32 ] 単に知らないの
726 名前:1 [2007/02/10(土) 17:40:47 ] よりオブジェクト指向で書き直すことにしました ちょっと待っててくださいね >>699 >>713 lpは、周囲のマスを表すんです -9,-8,-7,-1,1,7,8,9となっていればOKなんですが ここが、間違っていますかね? >>704 if()は中身が正だったら真なんですか 1だけだと思ってました >>708 マクロ使う理由は、関数に出来ないからなんですよ breakとかreturnを使うと呼び出した関数側でリターンしてしまいます(remove()とか) >>710 %を使うとやたらに鈍くなる可能性があります そこはz&7にした方がいいですね >>716 すぐにリターンした方がいいですね >>722 わかりました PASSにします
727 名前:1 [2007/02/10(土) 17:49:16 ] みなさんありがとうございました 差し手の生成上手くいきました fore(l,8){ if(l>3)i=l+1;m=i/3-1;n=i%3-1;lp[l]=8*m+n;}の部分を fore(l,8){ if(l>3)i=l+1; else i=l;m=i/3-1;n=i%3-1;lp[l]=8*m+n;} に変更したら上手くいきました up2moe.moe.hm/img/q678.txt
728 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 17:52:41 ] 暗号解析も進んでるようだねw
729 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 17:58:59 ] みんな優しいなあ
730 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:03:07 ] >>727 問題外のソースの断片を貼らないでください。
731 名前:1 [2007/02/10(土) 18:30:51 ] すみません 初歩なんですけど質問です 下のfnc内で他のメンバ関数(ここでは (z,F)ですが) を使いたいんですけど (z,F)と書けば、呼び出せますか?またAAA()の場合もそのままかけるんでしょうか? class board { unsigned int bd[3][2]; public: int operator()(int z, int F){int m;m=z>>5 ;z=z&31;return (bd[F][b]>>z)&1;} int AAA(){} void fnc() { ・・・} };
732 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:32:49 ] 日本語でおk
733 名前:1 [2007/02/10(土) 18:42:33 ] コンパイルは通るんですが、動作が変です なぜでしょうか? 24を表示してほしいのですが、4となります #include <stdio.h> class board { int a; public: int operator()(int x, int y, int z){return x*y*z;} int fnc(){return (3,2,4);} }; main(){ board x; printf("%d\n",x.fnc()); }
734 名前:1 [2007/02/10(土) 18:43:51 ] 要約すると、メンバ関数内で、他のメンバ関数を使いたいという事です
735 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:45:08 ] operator() ってなに?
736 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:48:01 ] デバッガで1行ずつ実行すればいいんじゃないの?
737 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:49:08 ] あ、ごめん そういう内容ではなかったのね
738 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:49:51 ] デバッガの使い方なんか知らないだろ だから一行にまとめてしまってるんだし
739 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:50:19 ] int fnc(){return operator()(3,2,4);} int fnc(){return (*this)(3,2,4);}
740 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:50:57 ] エスパーするなら、[]演算子のオーバーロードを勘違いしてるんじゃないかと 前>>1 は、いったいいつになったら日本語でアルゴリズムを書けるようになるんだろうな。
741 名前:1 [2007/02/10(土) 18:51:42 ] >>735 ここです 関数呼び出し演算子 homepage2.nifty.com/well/Operator.html#paren >>736 他のメンバ関数の呼び出し方を知りたいんですが
742 名前:1 [2007/02/10(土) 18:53:57 ] >>739 わかりました!ありがとうございます *thisは省略できるものだと思っていたのですがつけないと駄目みたいですね
743 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:55:49 ] thisを知らなかっただけだろ
744 名前:1 [2007/02/10(土) 18:58:55 ] >>743 727の10行目で使ってますよ
745 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:01:37 ] >>741 C++ってこんなクソ仕様があるんだ・・・ こんなの使ったら、ホントに作ったやつじゃねーと解読できない プログラムになっちゃうよ・・・・ とくに、>>1 みたいな初心者が、無意味に多用したがるからな
746 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:08:02 ] 意味がわからずに使ってるからバグが入ってるんだよ
747 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:24:22 ] 1ってアルゴリズム考えるのがへたくそだなぁ
748 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:37:53 ] >>726 lpは各方向のマスへのオフセットだろ。 ifでの真偽は、0で偽それ以外で真。 removeにbreakを入れないほうがイイ。 場合によってcontinueとbreakの使いわけができるようになる。 わけの分からんforを省ける。それとfor(;;cnt++)。 あとremoveの2つ目のreturnの判定は不要じゃないか? よく分からんけど
749 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:40:15 ] どんどんいい感じに普通のプログラムになっていってるね
750 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:50:51 ] どのへんが?
751 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:52:41 ] serch()
752 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:55:32 ] aが抜けてるといいたいんだろ。最初から気付いていたよ。 あと board bordとかも。
753 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:55:46 ] どの角度から見ても普通のプログラムには程遠いけどw
754 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:58:12 ] うちで直したのは普通に近いよ。 gameクラスにグローバル変数ぶちこんで、susumu、removeも関数に直した。 gotoは直してないけどな… printfがあちこちにぶち込んであるからぼろぼろだけどな。
755 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 20:01:06 ] 「普通」の基準が問題なんだなw
756 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 20:05:46 ] bord()って使い方もまずいよな。 これって関数風に使う場合だしな。 [ ]のほうがあってると思うけどな。
757 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 20:48:10 ] いや、みんなのデバッグが加わったことで serch()が普通に近づいたってことだろ
758 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 21:01:19 ] なんか盛り上がってるなw
759 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 21:06:46 ] 自分よりレベル低いのが居ると安心してしゃべれるんだろ
760 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 21:07:48 ] >726 名前: 1 投稿日: 2007/02/10(土) 17:40:47 >よりオブジェクト指向で書き直すことにしました ちょっと待っててくださいね それよりも SourceForge あたりにプロジェクト作ってみ? と言ってみるテスト.
761 名前:デフォルトの名無しさん [2007/02/11(日) 16:23:04 ] 1って人間性がダメだな
762 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 16:26:34 ] 何ですかこの期待はずれなスレは
763 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 16:49:21 ] おれにとっては期待以上だ
764 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 16:57:28 ] まじめに作ってる人には期待してるよ まだ結果は出てないし
765 名前:デフォルトの名無しさん [2007/02/13(火) 16:36:15 ] age
766 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 17:05:19 ] もう面倒だから打てる場所にランダムに打つルーチンで手を打とうぜ 文字をランダムに出力してシェイクスピアのオセロが完成する確率よりは遥かに大きい確率で勝てるものが作れる
767 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 17:36:05 ] うん、君はそれで作れば?
768 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 17:47:43 ] 俺がポケコンで作ったときは、処理速度が遅いから 打てる中で一番多くひっくり返せる手を選ぶようにした。 思考に数秒かかる。 こんなんでも、それなりに面白い。
769 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 17:50:18 ] bitboardとか知らないけど、俺も作ってみよう
770 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 17:52:09 ] じゃあ俺はDで作っちゃうぞ
771 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 18:30:10 ] じゃあ僕はバッチファイル!
772 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:02:00 ] 2次元配列で作ったけど、1次元が主流なんかな?
773 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:03:51 ] なんでもいいかと
774 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:18:42 ] 1次元の利点は, アドレス計算が高速, 関数の値として返せる, 引数の個数が減る, 位かな.絶対有利と言っていいと思う
775 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 22:00:54 ] >>774 なるほど。 初めて作ったんだけど、>>496 さんのを見て、1次元配列だったからちょっとびっくりした。
776 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 22:23:17 ] >>774 8x8なら絶対有利と言うほどはないんじゃないかなぁ。 まあ10x10とかの手法使ってるなら絶対有利かもしれんが。
777 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 22:54:54 ] 2次元配列はどうも好みじゃない 関数にポインタ渡すときの宣言が嫌い
778 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 23:06:49 ] Thellの「強+」って何手読みかな?
779 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 23:30:20 ] bitboardにするとundoはやらないでコピーするもんなの?
780 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 23:47:40 ] うん、そう。
781 名前:769 mailto:sage [2007/02/14(水) 00:37:59 ] ひとまず動くものが出来たので晒してみます 555.sytes.net/up/img/414.zip
782 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 00:55:21 ] GUIキタコレ!
783 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 00:59:04 ] おお、お疲れ様です。 いい感じですね。
784 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:04:43 ] >>781 dllの追加について何かヒントきぼん
785 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:26:02 ] >>784 .net系の言語でプロジェクトの参照にRevPlugin.dllを追加、 RevPlugin.dll内にあるRev.IPlayerを実装したクラスを一つ以上作る、 それdllにしてPluginフォルダにぶちこむ、 でOKです。 SampleAIプロジェクトのRandomAI.csとかを参考にしてください。
786 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:26:46 ] >>784 Interfaces.csにインターフェースが定義されてるから これ実装すればいいんじゃない? てかソース見てみよう。
787 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:28:50 ] .NETはパスだな もまいらがんばってくれ
788 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:30:55 ] と言うか何語ですかこれ? GUI 部分は別に要らないですが、 思考部分を Unix でコンパイルするにはどうすれば?
789 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:32:20 ] >>788 C#ていう言語。 monoで使えるかも?
790 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:34:12 ] >>789 C# と mono ですか。調べてみます。d
791 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:40:13 ] 僕もC#でプログラムを作ってたのでちょうどいいですね。 独自のGUIも既にありますけど、 これに対応すれば他の人が作ったのと対戦しやすそうですね。
792 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:46:41 ] >>788 AIは適当に作った物なのでコンパイルする価値無いかも・・・
793 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 02:12:42 ] >>769 初期化エラーになります><
794 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 02:27:52 ] んなこと言ってる奴は自分でなんとかしろカス
795 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 07:53:42 ] C#か・・・ dllならC++で作って読ませることもできるかな?
796 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 12:42:22 ] >>781 これ良いですね。 MinMaxAIに勝てないし、昔自作したオセロプログラムで対戦しても歯が立たないorz 出来れば、のお願いが2つ。 ・初期配置を逆にしてほしい。 ・直前手を表示してほしい。(印を付けるとか) オセロルールでは初期配置が逆なので上記のようにソフトを2つ並べて 手動で対戦するときにそのほうが都合が良いので。 勝手言ってすまん。
797 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:10:13 ] なんか良い感じになってきたな、1以外は。
798 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:19:00 ] ところで、1ってなんですか?
799 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:27:31 ] バカは「1」って名前で発言するのがここのルール
800 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:51:56 ] 1の人気に嫉妬
801 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 02:50:08 ] >>800 >>799
802 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 14:35:04 ] こんな天気の日は、引きこもってコード書きに限りますな
803 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 14:37:25 ] 評価は何を基準にしているの? 置けるコマの数?
804 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 14:55:36 ] 評価はパターンが基本で、これに置ける場所の数などを加える事もある。 全ての評価要素には係数を掛けて和を取る。 この係数は、局面と教師信号を大量に用意して評価値と 教師信号の誤差が最小になるように最小二乗法で求める。
805 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 15:03:21 ] >>804 う〜ん、難しそう。
806 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 15:29:36 ] >>803 ttp://fujitake.dip.jp/sealsoft/thell/algorithm.html このページの下のほうに評価関数についての説明があるよ。 >>804 問題は、データの多さなんだよね。 強さを求めるには仕方のないことかもしれないけど、 思考部分のプログラムが(高速化のために展開していたとしても)数百KB程度に対して、 評価用のデータが10MB↑とかになるのがね...
807 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 15:44:12 ] >>806 サンクス
808 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 16:42:53 ] >>806 「リバーシプログラムの作り方」に入ってるプログラムは 比較的コンパクトで精度のいい評価関数だと思う。 標準的なパターン(ロジステロとかの)より小さくて最大で8マス分なのと ゲームの段階によってステージ分けしてないので小さくしてる。
809 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 17:06:10 ] 1のプログラムをdll化して対戦させてみるとどうだろう。 できる人頼む
810 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 17:26:11 ] まともに動くようになればDLL化してやってもいいけど。