Hatena::ブログ(Diary)

暗号、数学、時々プログラミング このページをアンテナに追加 RSSフィード

2009-06-12

プロレス実況的なコンピュータ将棋の楽しみ方

| 04:58 | プロレス実況的なコンピュータ将棋の楽しみ方を含むブックマーク


【予防線】

こういう事を言うと梅田望夫さんのような将棋ファンにぬっころされるんじゃないか?ってんで怖い気もするんだけど、、、別に将棋をバカにするとかそういうんじゃないので怒らないで頂きたく。。


【ここから本題】

最近見えつつある「やりたい事」についてもうちょっと詳しく。


今までコンピュータ将棋って言えば、基本的にはコンピュータ VS コンピュータ、あるいはアマチュア名人 VS コンピュータ、みたいな図式が一般的だったと思う。で、そこに人間(下手だけど将棋好き)+ コンピュータ VS 人間(上級者)とか、人間 + コンピュータ VS 人間 + コンピュータ みたいな新しい図式が作れないかなぁ、、、?とふと思った次第。


昔の話になるけど、古舘伊知郎さんが「プロレス実況してたとき、私が『ここで猪木、ブレーンバスターかーっ!』って言ったら、猪木さんが本当に体勢変えてブレーンバスターしてくれたんですよー(意訳)』みたいな話をしてたのをふと思い出しましてね。勝負を見てる側ってのは、自分には出来ない事をプレイヤーに託すみたいなところがあるんじゃないかなぁ、、と。そういえば、ウチの父もプロ野球中継を見ながら「なんでこのピッチャーは、このコースに投げないのかなぁ、、」みたいな事を言いながら酒を飲んでいたっけ。。


で。これからの新しいコンテンツとして、こういう


基本的には観戦者。でも、自分のエール(指示)でプレイヤー(ユーザの意味ではない。キャラクタ?)が動きを変えてくれる。

みたいなシチュエーションを楽しむ系の遊びがあったら面白いかもなぁ、、?と。さらに言うと、ユーザはプレイヤーに対して「特訓」という形でイロイロと能力を授けられるようになると愛着も湧くんじゃ?なんてコトを考えたり。アニメ版のポケモン風って言うと伝わりやすいのかな、、?


「よーし、ほげほげ。今日はゴキゲン中飛車でいくぞ!」

「ほげー!」


「今だほげほげ!飛車だ。飛車を使うんだ!」

「ほげー!!」


とかそんな感じで。


【追記】サッカーとかだと既にそういうゲームありそうだな、、とかふと思ったんだけど、イメージしているものがそういうのとは何かちょっと違う(その手のゲームでは特訓時の「戦略」の伝え方が大雑把過ぎると思う)ので、やっぱり「そういうのが既にある」ってコトはないのかな、と。


アルゴリズムをひたすら研究して、いつかは本物の名人に勝つ!

みたいなストイックな道ももちろんアリだとは思うのだけど、もっとライトな楽しみ方があってもイイんじゃないかな?ってふと思ったワケです。


さらに言ってしまうと、そうやって他人(プログラム?)の対戦を見ているうちに、人間の方のレベルも上がっていって、自分で指したくなってくるんじゃ?(新しい学習の高速道路?:ヒカルの碁メソッドと勝手に名づけた)って風にも考えていて、これって結構面白そうかな、と。


あ、想像してもらいやすいように将棋を例に出したけど、実際にコレを将棋の世界でやるかドウかはまだワカランです。大まかな戦略(「エラトステネスの篩を使うんだ!」とか)を与えたら勝手に問題を解いてくれるようなプログラムとか、数学の世界で何か出来ると面白いんだけどなー、なんて夢のようなことを思いながら、題材については目下検討中。

F# のセットアップの仕方について調べたよ

| 01:34 | F# のセットアップの仕方について調べたよを含むブックマーク


実用的なアプリを作りたいと思ったら、やっぱりライブラリが豊富な環境の方が楽だし、いずれは F# かなーって思っていたのだけど、Windows 環境での OCaml 学習があまりにもやりにくいので、OCaml → F# って流れを止めにして、いきなり F# でやるかなと思い立ったので早速環境構築について調べてみた。


ちなみに、参考にしたページはコチラ。(今回は試みとして Google Translator Toolkit を使ってみたので、偏った口調を学習しないように真面目な文体で)


F Sharp Programming/Getting Set Up

F#プログラミング/セットアップガイド


Windows の場合

この文書の執筆時点で、F# のコードは Visual Studio、F# Intaractive (fsi)、あるいはコマンドラインからのコンパイルを通じて実行できます。この本では、ユーザは基本的にコードのコンパイルVisual Studio あるいは F# Intaractive を通じて行うことを前提とし、コマンドラインから直接コンパイルするような事はしないものと想定します。


セットアップ手順

F#は Visual Studio 2005 および Visual Studio 2008 の既存のインストールと統合することができます。その他の手段として、ユーザーは無料で Visual Studio Shell をダウンロードすることも可能です。これは、対話型のデバッグブレークポイント、watches (監視って意味だろか?)、インテリセンスなど、必要なものをすべてを備えたパイオニア向けの環境です。 まずは、Visual StudioVisual Studioシェルのすべてのインスタンスが閉じていることを確認しましょう。


セットアップを始めるには、ユーザが最新版の .NET フレームワークマイクロソフトからダウンロードし、インストールが完了している必要があります。その後、マイクロソフトリサーチにあるF#のホームページから、F# の最新版をダウンロードし、インストールウィザードを実行します。


正常にインストールされた場合、 [スタート]メニューに次のようなフォルダが追加されているでしょう。 " Microsoft F# 1.9.X.X. "。さらに、Visual Studio の方にあるプロジェクトタイプのメニューにも"F# プロジェクト"が追加されているハズです。ここから、新しいF#プロジェクトを生成し、実行するコトができるというワケです。


環境変数 %PATH に "c:\fsharp\bin\" のような形で実行ファイルの場所を追加しておくというのは良いアイデアでしょう。そうすれば、任意の場所から、 F #のインタラクティブ環境( fsi )や、コンパイラアクセスできますからね。


インストールができたかチェック

Hello Worldの実行

スタンドアロンアプリケーション"Hello World"を作成してみましょう。

hello.fs というテキストファイルを作ります。ファイルの中身は以下のような形になります。

(* filename: hello.fs *)
let _ = printf "Hello world"

ファイルを保存した後、このファイルをコンパイルしましょう。

fsc -o hello.exe hello.fs

これで期待する出力結果を出してくれる hello.exe を実行できます。


F# Intaractive 環境

コマンドラインコンソールを開きます("スタート"ボタンを押し、"実行"アイコンをクリック、その後の画面で cmd と入力してください)。

fsi と入力し、Enterキーを押します。すると、対話型コンソールが表示されます:


Microsoft F# Interactive, (c) Microsoft Corporation, All Rights Reserved
F# Version 1.9.6.2, compiling for .NET Framework Version v2.0.50727

Please send bug reports to fsbugs@microsoft.com
For help type #help;;

>

ここで、F# の基本的な変数の代入(およびいくつかの基本的な数学)を試してみることができます。

> let x = 5;;

val x : int

> let y = 20;;

val y : int

> y + x;;
val it : int = 25

最後に、インタラクティブ環境から抜けたい場合にはこうします。

> #quit;;

その他

PATH環境変数への追加

1. [コントロールパネル]に移動して"システム"を選択します。

2. [システムのプロパティ]ダイアログが表示されます。[詳細設定]タブをクリックし、"環境変数"を選択します。

3. [システム環境変数]セクションで、リストからPath変数を選択し"編集"ボタンをクリックします。

4. [システム変数の編集]テキストボックスにセミコロン( ; )を追加し、その後に続けて新たに追加したいファイルパスを入力します(例: C:\fsharp\bin\)。

5. " OK "ボタンをクリック

6. " OK "ボタンをクリック

7. "適用"ボタンをクリック

これで、fsc または fsi と入力した際、コマンドラインコンソールがこのパスをチェックしてくれるようになりました。


UNIXの場合

F#は、Linuxや他のUnix系の環境においては最新の Mono 上で実行されます。これはマイクロソフトリサーチから公式にサポートされたものではありませんが。インストール方法についてはドキュメント化されています。そこには、Monoの入手方法、 F#のダウンロード、 gacutil を使ったDLL の登録方法、fsi.exe やその他の実行ファイルを呼び出すためのラッパーとなるシェルスクリプト(例えば以下のようなもの)等について書かれています。

 /usr/bin/fsc:
 
 #!/bin/sh
 mono /opt/fsharp/bin/fsc.exe $*

UNIXの世界には多くの開発環境がありますが、F#をサポートするものは僅かです。誤ってWindows専用の言語と思われているからでしょうね。それでもなお、MonoDevelop にはアルファ版品質のF#プラグインがあります。また、Emacscaml-mode や tuareg-mode 等のOCaml環境を使えば十分なサポートを得られるでしょう。ちなみに、Emacs には F#モードもあります。


翻訳はココまで

で、チェックしてみて思った事 


ホントの基本のキって辺りに関しては少なくとも OCaml と同じみたいだなぁ、、というのが見えてきた。で、ここからは実際に使ってみる。


1. F# Interactive の起動が遅いよぉ、、

コマンドプロンプトから起動してみると、あれ?何かやらかしちゃった?とか不安になるくらいに遅い。これは仕方ないんだろうなぁ、、ただ、スタートメニューから「 F# Interactive」を選ぶ場合には結構早い。これは何で? あと、やっぱり日本語入力に問題あり。「なんですとっ?!」と思いつつちょっと検索してみたら、一応対処方法については公開されたものがあったのでチェックし、コードを修正してみた。


・・・あれ? うまくいかない??


なんか他のサイトとかも眺めてたら、どうやら Visual Studio 版のインタプリタであれば日本語入力も大丈夫みたいな事が書いてあるので、とりあえずここについてはあんまり考えないコトにした。。。


2. あれ? Visual Studio のプロジェクト作成メニューからF# が選べない?

原因はよく分からないんだけど、Visual Studio を既に入れてると思ってたら Visual C++ Express Edition 2008 でしたーってのが問題なのか知らん?と思い、一応 Visual Studio 2008 shell を入れてみるところからやり直してみたっス。


・・・あれ? うまくいかない?? インストーラが「有効なWin32アプリケーションではありません」って怒られるぞ?


で、ここでも何で駄目なのか真面目に取り組まず、他の開発ツール(SharpDevelop)をインストールしてみる事に。こちらは特に問題なくインストール完了。で、、


let _ = printf "こんにちはこんにちは!";;

を SharpDevelop から呼び出した F# Interactive コンソールにコピペしてみた(そのまま入力すると、";;"を打つ前に改行になっちゃうみたい) 。で、、


> こんにちはこんにちは!
val it : unit = ()

で、で、できたー! Windows上で日本語表示可能な OCaml環境(っぽいの)がついに整ったよー!!

めでたしめでたし。とりあえずこの環境で「プログラミングの基礎」に出てくる「メトロネットワーク最短路問題」をじっくりやってみようか知らん。。? 紙の上で終わらせちゃってた練習問題が結構あるし、OCaml と F# の差分を学ぶにはイイ素材かも。

tmiyatmiya 2009/06/13 01:54 Coqとかの定理証明支援ソフトとかではどうでしょう?>『大まかな戦略(「エラトステネスの篩を使うんだ!」とか)を与えたら勝手に問題を解いてくれる』。「nについての数学的帰納法を使うんだ」みたいな。

hamatsu1974hamatsu1974 2009/06/13 02:11 Coq というソフトがあるらしい事は知っていたのですが、そういう風にも使えるんですかー。凄いな。それはちょっと勉強してみねば、、、

tmiyatmiya 2009/06/13 11:00 あー、エラトステネスの篩は出来ないのですが、帰納法はOK。私も勉強中なんでCoqは素人なんですが、なんか人工無脳と対話している感覚で面白いです。あと、試行錯誤してコマンドを色々入力したりundoしたりしてると、アドベンチャーゲームっぽい感じも受けます。熟達してしまうとまた別なんでしょうけど。

hamatsu1974hamatsu1974 2009/06/13 12:28 なるほど。まだ「ユーザがすべき事」と「コンピュータがしてくれる事」がそれぞれ何なのかよく見えてないのですが、確かに面白そうですね。あ、ブログ拝見させて頂きました。今後もイロイロと参考にさせて頂きますー。

moridaimoridai 2009/06/30 21:09 F#はこの事だったんですね。失礼しました。

hamatsu1974hamatsu1974 2009/07/01 01:25 いえいえ。F# もまだまだマイナーなのでしょうかね :-)