[ ホームページ ] [ 携帯用URL ]
将棋所のサポート掲示板
将棋所についての質問やバグ報告、USIエンジンの作成報告などに使用して下さい。

[ EZBBS.NET | 新規作成 | ランキング | オプション ]
iモード&(絵文字)、au対応!ケータイからも返信できる無料掲示板!
名前
 E-mail 
題名
内容
   タグ有効 改行有効 等幅フォント
URL



210.インタプリタ 返信  引用 
名前:SaE    日付:2012/9/9(日) 22:1
こんにちわ。
数日前より使わせてもらってます。

簡易的な解析などを行いたいのですが、
エンジンにインタプリタ(テキストファイル)を直接使えるようにしてもらえないでしょうか?



211.Re: インタプリタ
名前:将棋所の作者    日付:2012/9/9(日) 23:39
すみません、ちょっと意味がわからないのですが、エンジンとして実行形式(exe)ではなくテキストファイルを登録したい、ということでしょうか?
それだとコマンドのやり取りとかできませんし、何を目的にそうしたいのかよくわかりません。具体的にどういう使い方をしたいのか詳しく教えて下さい。


212.Re: インタプリタ
名前:SaE    日付:2012/9/10(月) 0:41
お早いお返事ありがとうございます。

>エンジンとして実行形式(exe)ではなくテキストファイルを登録したい
いえ、初回にファイル本体をexeと仮定して関連付けを動かしてくれるだけで構いません。
ようはマクロやインタプリタの起動と同じことをしてほしいです。

(ちなみにほとんどのインタプリタは、テキスト自分自身を実行ファイルとして扱ったまま標準入出力や相対パスなどを構築しますので問題はないです。例えば、ダブルクリックで起動した場合、外部のプログラムから見てexeもインタプリタも変わりはありません)。

現状だと、インタプリタを走らる場合、exeを1クッションおき、
そのexeがインタプリタを起動してコマンドのバケツリレーをしなければならないので、出来ればお願いします。


213.Re: インタプリタ
名前:将棋所の作者    日付:2012/9/10(月) 21:31
インタプリタというのをあまり使ったことがないのでいまいち理解してないのですが、登録するファイルはexe以外で、エンジン起動時にはそのファイルを指定して、それに関連付けされたソフトで開くようにする、ということでしょうか。
ただ、それで本当にちゃんと動くのかよくわかりません。そのような動作と、現在の動作(エンジンを指定して、そのプロセスを起動する)は、呼ぶ側からすると別の動作になるからです。
要望されていることを実現するには、エンジンの起動方法を変更する必要があると思いますが、それで問題なく動作するか調べる必要があります。とりあえず、そういうことを要望されているという理解で正しいでしょうか?


214.Re: インタプリタ
名前:SaE    日付:2012/9/10(月) 22:24
そうゆう要望です、ありがとうございます。

要望理由は様々あるんですが、
ロジックの採用や処理の手順決定など、インタプリタを使ってチェックしたほうがその解析のためのプログラミング時間が1/10にも1/20にもなるんです。

あとはインタプリタだと実行中に好きな文字を読み込んで
それを記述を見なしてコンパイルして、変数や名前空間、関数なども共有して、
まるであたかも最初から一緒に記述されてコンパイルされてました。
みたいな乱暴な処理が普通にできたりするんです。

メモリの管理やデータ構造や内部データの関連付けの管理も
ほぼ全部自動でやってくれるのでテストさせるには一番いい感じと言う事です。
しかも実行時は常に、コンパイラと言語用デバッガーも平行起動して自由にアクセスさせてくれる過保護ぶりです。

実行は遅いけど、開発が手っ取り早くて楽ってことですね。
初期の開発はエンジンの基盤が確定するまでインタプリタでやりたいのでございます。
もちろん、その後もロジックのテストやエンジン自体の動作解析にインタプリタを使いたいという希望もあります。


起動さえしてしまえばプロセスのおしゃべりは変わりがありません。
ただ初回起動はテキストを全部コンパイルするので若干初回の返答が遅くなります。



インタプリタをお使いになったことがなくてテストがしたい場合は、
例えばPerlをインストールして
( http://www.activestate.com/activeperl
MSI(インストーラー版)だと環境変数や関連付けは自動でおこなわれます。再起動しないと環境変数はダメかもしれません)。

print "test\n";

とだけ書かれた 拡張子 .pl のファイルを作りダブルクリックしてみてください。
exeと同様の標準出力が得られます。(一瞬で終了しますので目視は出来ませんが)。


あとはコマンドで開く場合は(環境変数がちゃんとなってるなら)
perl ファイル名
とすればあたかもそのテキストファイルがexeであるかのように起動できるはずです。


ちなみにこの掲示板もインタプリタで出来てると思います。
一回アクセスするごとにテキストがコンパイルされてるはずです。
初回返答が間に合わないほどコンパイルが遅くなったりはしないと思います。


215.Re: インタプリタ
名前:将棋所の作者    日付:2012/9/13(木) 21:49
インタプリタのファイルを指定して、それを関連付けされたソフトで開くのはできるのですが、そのように起動した場合にコマンドのやり取りをする方法がわかりませんでした。
そちらではリレー用のexeファイルを既に作っているということなので、どのように作ったのか教えていただけないでしょうか。


216.Re: インタプリタ
名前:SaE    日付:2012/9/14(金) 8:45
すみません、お騒がせしております。
exeもインタプリタで作っていたのでたぶんCとはやり方が違ったんだと思います。
ただいま出張中でございまして、手元にファイルがございません。

一応、私の環境下では、
PerlやPython、Rubyなどのプログラムファイル(実質テキストファイル)
をexeとみなしてコマンドから起動させると、それ自体がexeであるかのように動くので、その方法で起動しています。

関連付けが正常ならば実は、
(例えばPerlなら)
"Perl ファイル名" と書いて起動しますが、
単に "ファイル名" としただけでも起動するのでそれを採用してました。
(別のプログラムからでも、プロンプトからでも、ファイル名を指定すればexeと同等に起動して標準入出力がやり取りされた)。



ただ、お願いしておいて申し訳ないのですが、
現在この問題は別の方法で解決されました。

バケツリレー方式を取りやめ、
GUIから自身が起動された瞬間、
別プログラムであるインタプリタ(思考エンジン)を起動しつつ、
自身のプロセスをエンジンに置き換えて、
その場で自殺します。(execと言われるやつです)。

うまいこと他人を自分に改ざんしつつ自殺が出来たようで、
入出力も、GUIと思考エンジンが直通できました。


なんとか対応しようとご苦労いただいたみたいで、
本当にありがとうございます。

207.エンジン設定の変更のみ行ったとき、最後の"quit"が受信されない 返信  引用 
名前:NB0    日付:2012/7/8(日) 21:26
将棋所 Version 2.5.2をありがたく利用させていただいております。
早速ですが、例えばエンジンとしてLesserKaiを選んであるとして、将棋所のメニューから
 [対局]→[検討]→[エンジン設定]ボタンクリック→[OK]ボタンクリック
とすると、デバッグウィンドウを見る限り次の通信を行うようですが、
>C:usi
<C:id name Lesserkai 1.3.3
<C:id author Program Writer
<C:option name BookFile type string default public.bin
<C:option name UseBook type check default true
<C:usiok
>C:setoption name BookFile value public.bin
>C:setoption name UseBook value true
>C:quit
最後の「quit」が実際にはエンジンに受信されていないようです。

これは、Lesserkai.cppの70行目あたり(ReceiveThread()内)を
 if (strncmp(buf, "quit", strlen("quit")) == 0) {
  ::MessageBoxA(NULL, "'quit' received.", "info", MB_OK); // ←追加
  while (commandQueue.size() > 0) {
として、"'quit' received."のダイアログボックスが出ないことから確かめられます。
(Windows 7環境でVS2010にてビルド)

じゃあ"stop"の受信はどうなのか、と思い、LesserKai.cppの85行目あたりを
 if (strncmp(buf, "stop", strlen("stop")) == 0) {
  ::MessageBoxA(NULL, "'stop' received.", "info", MB_OK); // ←追加
  isStopReceived = true;
 }
としてみると、[検討]→[中断]で一瞬だけ"'stop' received."のダイアログボックスが出て、[OK]ボタンがクリックされるのを待たずに勝手に終了するか、まったく出ないか、です(発生比率1:9ぐらい)。

これらのことから、どうも将棋所がquit送信とほぼ同時にエンジンのプロセスをabortする挙動になっているように見られるのですがどうでしょうか。

この挙動は、自作エンジンで"setoption name"以外を受信したとき通知されたオプション設定をまとめてファイル保存する、というしくみにしたら、[検討]→[エンジン設定]ボタンクリック→[OK]に限り動かなかったので気がつきました。
これをLesserkaiのように"setoption name"受信毎に行うことは可能ですが、本当にエンジンのプロセスが将棋所の"quit"送信とほぼ同時にabortされるのだとすれば、保存処理完了までの時間マージンが取れない恐れがあります。また、LesserkaiのReceiveThread()内のコメントを見る限り、過去には受信できていたように見受けられますが…



208.Re: エンジン設定の変更のみ行ったとき、最後の"quit"が受信されない
名前:将棋所の作者    日付:2012/7/9(月) 21:42
まず、将棋所は、quitを送ると同時にエンジンを強制終了させる、ということはやっていません。エンジン設定ダイアログでOKを押してもsetoptionとquitを送るだけです。例えば、quitを受信しても終了しない(exit()を呼ばない)エンジンを作って、タスクマネージャでエンジンのプロセスを見るとわかると思います。

> これは、Lesserkai.cppの70行目あたり(ReceiveThread()内)を
>  if (strncmp(buf, "quit", strlen("quit")) == 0) {
>   ::MessageBoxA(NULL, "'quit' received.", "info", MB_OK); // ←追加
>   while (commandQueue.size() > 0) {
> として、"'quit' received."のダイアログボックスが出ないことから確かめられます。
> (Windows 7環境でVS2010にてビルド)

同じようにやってみましたが、ダイアログは表示されました。ただ、なぜか前面に出てこないので気付きにくいかもしれません。下のタスクバーにダイアログのアイコンが表示されているので、それをクリックすると前面に出ます。

> じゃあ"stop"の受信はどうなのか、と思い、LesserKai.cppの85行目あたりを
>  if (strncmp(buf, "stop", strlen("stop")) == 0) {
>   ::MessageBoxA(NULL, "'stop' received.", "info", MB_OK); // ←追加
>   isStopReceived = true;
>  }
> としてみると、[検討]→[中断]で一瞬だけ"'stop' received."のダイアログボックスが出て、[OK]ボタンがクリックされるのを待たずに勝手に終了するか、まったく出ないか、です(発生比率1:9ぐらい)。

USIプロトコルでは、エンジンはstopを受信したら思考を打ち切ってbestmoveを返すことになっています。将棋所で検討する場合、検討中に中断ボタンを押すとエンジンにstopを送り、それに対してbestmoveが返ってきたらquitを送るので、そこでエンジンが終了するという流れになります。Lesserkaiで検討させてみて、そのログを見るとわかると思います。
しかし実際には、stopを送ってもbestmoveを返さないエンジンがあるので、そういうエンジンの対策として、stopを送ってから1秒たってもbestmoveが返ってこなかったら強制終了するようにしています。
この例の場合、エンジンがstopを受信するとダイアログを表示するので、そこで処理が止まってしまい、bestmoveを返さないために1秒後に強制終了されることになります。

というわけで、quitを送ったからといって、その場ですぐ強制終了させているわけではありません。ただ、quitを送っても終了しないエンジンもあるかもしれないので、そういうエンジンのプロセスが残っていたら、適当なタイミングで強制終了させています。例えば、検討ダイアログからエンジン設定ダイアログを開いた場合、OKボタンを押してもquitを送るだけですが、そのあとで検討ダイアログを閉じるとき、さっきのプロセスが残っていたら強制終了させています。


209.Re: エンジン設定の変更のみ行ったとき、最後の"quit"が受信されない
名前:NB0    日付:2012/7/14(土) 13:44

大変失礼いたしました。
Lesserkaiによる再現を試みたところ、おっしゃるとおり、ダイアログボックスが出ていたのだが見損ねた、ということだったようです。

自作エンジンの方も調べ直したところ、強制終了はされるものの、そのタイミングが(quitの場合)"quit\r\n"受信のタイミングよりずっと後(改めて「エンジン設定」ボタンをクリックした時、等)であることを確認いたしました。当初のチェックが甘く申し訳ございません。

なお、Lesserkaiがストリームからはfgets()で常に1行丸ごと読み込む方式なのに対し、自作エンジンの方は実はストリームからトークン単位で読むつもりでstd::cinを使っておりまして、std::cinを使う場合の解決策をご報告できればせめてもの埋め合わせになるかと思い、下記組み合わせをいろいろ試してみたのですが、トークン単位の読み込みは、quitやstop等、最後のトークンの読み込みでブロックし、結局うまくいきませんでした。
[初期設定] -- 下記を全て有効、または部分的にコメントアウト等
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
std::ios_base::sync_with_stdio(false);
std::cin.rdbuf()->pubsetbuf(NULL, 0);
std::cin.setf(ios::skipws);
[読み込み]
string token; std::cin >> token または
string token; char buf[1024]; scanf("%s", buf); token = buf;

というわけで、Lesserkai方式にして解決しました…
std::cinよりfgets()の方が読み込み速度上も有意に有利らしいので、これで行きます。

199.教えてください 返信  引用 
名前:匿名    日付:2012/5/20(日) 21:55
詰将棋をソフトに解かせるときにthere are only a single kingと出てしまいます。どうすればよいのでしょうか?



200.Re: 教えてください
名前:将棋所の作者    日付:2012/5/23(水) 21:13
いくつか不明な点があるので教えてください。

・まず、警告が英語で出ているようですが、使用しているOSは日本語以外のOSでしょうか。それとも日本語のOSでしょうか。

・次に、この警告は本来、玉が1枚しかない状態で対局や検討を開始しようとした場合に、そのことを知らせるために出るものなのですが、それが詰将棋解答をさせた場合に出るということでしょうか。どういう操作をしたら出るのか詳しく教えて下さい。(私が想像するに、詰将棋解答ではなく、検討を開始しようとして出ているのではないかと思います。)


201.Re: 教えてください
名前:匿名    日付:2012/5/24(木) 21:35
まずダウンロードしたときにはこのソフトは英語版だったので「エンジン設定ダイアログで日本語を表示する方法 」という記事を見てやろうと思ったのですが、よくやり方がわかりませんでした。そして英語版のままで詰将棋を解かせようとしたら、よくわからない警告が出てきました。何処を見ても英語ばっかりでこのままではどうしようもないので一度日本語に直してみたいと思います。日本語に直すやり方を子供でも分かるように教えてくださいませんか?お手数ですが教えてください。よろしくお願いします。


202.Re: 教えてください
名前:将棋所の作者    日付:2012/5/24(木) 22:16
将棋所には、日本語版とか英語版という区別はありません。日本語OSで使えば日本語表示になり、日本語以外のOSで使えば英語表示になります。もし、使用されているOSが日本語でなければ、将棋所を日本語で表示する方法はありません。
日本語OSを使用しているとして、その場合に英語表示になっているのであれば、将棋所のフォルダに入っているjaという名前のフォルダが消えていると思われます。その将棋所のフォルダはゴミ箱に捨てて、将棋所をもう一度ダウンロードし直して使えば日本語表示になると思います。
あと、「エンジン設定ダイアログで日本語を表示する方法 」というのは、その文章の通りであって、エンジン設定ダイアログ以外の表示とは関係ありません。


203.Re: 教えてください
名前:匿名    日付:2012/5/26(土) 16:36
どうやらOSが外国版のようです。この状態では将棋どころを使うのは難しそうなので、ほかに無料で詰将棋を解かせるソフトを知ってませんか?知っていたら教えてください。お手数をおかけしますがよろしくお願いします。


204.Re: 教えてください
名前:将棋所の作者    日付:2012/5/26(土) 22:8
将棋所で動かせるエンジン以外で、詰将棋を解けるフリーソフトについては以下のところに解説があります。

http://toybox.tea-nifty.com/memo/2006/11/post_97ec.html

ただ、「ソフトに詰将棋を解かせたり検討させるには、残念ながらフリーソフトだけでは厳しい」とありますので、実用になるようなソフトはないかもしれません。


205.Re: 教えてください
名前:匿名    日付:2012/5/27(日) 19:55
どうもありがとうございました。


206.Re: 教えてください
名前:通りすがり    日付:2012/6/8(金) 8:43
柿木将棋の体験版なら、無料である程度できますよ
長手数は解けないようですけど 13手詰まで高速に解けます
もちろん片玉問題、双玉問題ともに対応しています

http://www.enterbrain.co.jp/game_site/kakinoki/download.html#2

ページ: |< << 45 46 47 48 49 50 51 52 53 54 

無料アクセス解析

アクセス解析の決定版!無料レンタルで最大100ページ解析!

   投稿KEY
   パスワード

EZBBS.NET produced by InsideWeb