[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 02/02 10:04 / Filesize : 194 KB / Number-of Response : 920
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

おまいら最強のリバーシプログラムしてみろよ part2



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化してやってもいいけど。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<194KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef