« June 2004 | Main | August 2004 »

July 31, 2004

夏バテ……?

なんかここのところ全てがダメだ。コーディング能力、思考能力、体力、やる気、全部だめ。常に眠いしだるいし。夏バテだろうか。

評価関数ができていないという事実がさらに追い打ちをかける。あー学習プログラムって原理は超簡単なのになんでこんなに書くのが面倒なんだ…。

とりあえず実行してみると……stack overflow。あー巨大配列をスタックに取ったらそりゃ溢れるかぁ。Win32の場合スタックのサイズは1MBくらいだからね。ということでグローバル変数に変更。

リリース版を本番実行しはじめてからクラッシュされても困るので、デバッグ版で1回ループが成功することを確かめようとやりはじめたが……未だ終わらん_| ̄|○。テスト用に小さめのデータを与えたつもりなんだが。あと、「倍数かけるの('A`)マンドクセ」と思ってdoubleを使ったのはどうなんだろう。いやもちろん実行時の評価関数では整数を使うけどさ。

ま、この計算をさせている間に、置換表だとか、もう一つの方の評価関数用学習ルーチンとか、未実装なものを埋めていくか。

(追記) OKどうやら落ちない。しかし。1回ループ後に誤差が10^9って何よ!?(;´Д`)

| | Comments (4) | TrackBack (0)

おいちょっと待った

電卓って8/31でいいんじゃないのかよーなんでみんなやってんの?

| | Comments (0) | TrackBack (0)

July 30, 2004

晴れときどき雨

今日はなんだかよくわからん天気だ。晴れてると思ったら急に豪雨が降ってきたり。

最近空撮りが流行っているようなので便乗してみるテスト。

DSC_4164.jpg
「やーるぞー」

DSC_4178.jpg
急に雨が降ってきたと思ったら虹が。

DSC_4184.jpg
夕焼けも撮ってみた。

DX12-24mmも持って出かけたのだが、結局全部18-70mmで撮ってしまった。やっぱり便利だね。周辺減光はものすごいけど……。

| | Comments (3) | TrackBack (0)

オセロ戦況分析

なんとオセロ大会まであと2週間。まずい。ということで一旦冷静に戦況を分析してみよう。とりあえず公式に名乗りを上げている人を対象に分析。

  • Thell 3.0 (by 俺)
    未だに評価関数ができていない。なにげに経験者リーグで一番実装が遅れているという噂。
  • vsOtha (by H)
    現時点での驚異的性能からくる余裕を活かし、significant improvementを得るべくいろいろな評価関数を実験しているらしい。さらにプログラムのみならず本人のオセロの強さも明らかになり、もはや向かうところ敵なしである。
  • Neothec3 (by O)
    評価関数の学習にものすごい時間をかけている。ベアは倒せるようになったらしい。現在探索ルーチンの改良中。MTD(f)に興味を示しているようだ。
  • Oxelon (by U)
    徹夜・授業ブッチなどしながらがんがん実装中。統計ベースの評価関数はかなりいい値を出しているようである。
  • ?? (by A)
    C#によるプログラム。GUIが完成しており、また探索も実装中らしい。囲碁で鍛えた洞察力を評価関数に盛り込んでくるか?
  • ?? (by S)
    Javaによるプログラム。GUIが完成している。Thellの「愚」に勝利したらしい。
  • Desdemona (by Y)
    名前が決定したが、その直後に同名のオセロソフトが発見されたりして、先行き不透明。

| | Comments (0) | TrackBack (0)

July 29, 2004

新しいコードにはバグがあると思え

新しいパターンのインデックス算出コードを書いた後、ちょっと怖くなったのでインデックス→パターンの可視化ツールを作った。「せっかくだからC#とWindows Formsで書いてみようぜ」と悪魔がささやいたが、新しい言語とライブラリを学んでる暇なんてあるわけないので却下し、C++/コマンドラインで。

案の定予想だにしなかったすさまじいバグがぼろぼろと……。あのまま学習まで突っ走らなくてよかった。

| | Comments (0) | TrackBack (0)

PVS?

PVSって、Principal Variation Searchってやつ?

"PVS is also often called 'NegaScout'."

マジ?

こっちも。このコードはNegaScoutと我々が呼んでいるものであるような……。ん、気をつけないとinstableになるって書いてあるぞ。そうだったのか。NegaScoutってごく普通にalphabetaと同じ結果を返すものと信じていたが…。

| | Comments (0) | TrackBack (0)

July 28, 2004

暑い暑い

暑い。他の部屋はとても涼しいのに俺の部屋だけなんでこんなに暑いの?やはり熱源があるからだろうか。

これまでPentium 4 2.4C GHzとそれについてたリテールファンでやってきたのだが、ここのところ夏の暑さでファンがまわりっぱなしで、うるさくてかなわないので(リテールファンは静かとどっかで読んだ気がしたが、最近調べるとやっぱりこれはうるさい部類らしい)、ファンを買い換えてみようかと思う。候補はCoolermasterのCyprumあたり。

ところでおもしろいのは、"Pentium4 TDP"でぐぐると最初のページに出てくるのは日本語のページばかり。「Web全体から検索」としているにもかかわらず、だ。

google.co.jpへのアクセスなので、日本語のページに多少優先度が加えられるのか?確かにそんな傾向がある気がする。もう一つの仮説は、日本人以外はTDPなんか気にしていないという説。それもありうるな。

| | Comments (0) | TrackBack (0)

C++: 抽出演算子

抽出演算子とはなんぞや?cin >> i;ってやるてときの >>ね。別名、入力演算子とも言うようである。

この抽出演算子の書き方についてちょっと調べてみた。文字列を読み込むなんていう単純なケースはいいとして、例えばint型を読む場合、数値に変換できない文字列を渡されたら当然困るよね。そういう場合はどう対処するべきなのか?

ということで、VC++7.1付属の<istream>を辿ってみた。

  • 通常は空白は飛ばす。
  • 最初に現れた文字から解析を試みる。
  • もし数値としてパースできなかったら、ios_base::failbitをセットする。

ということらしい。gccのソースも読んでみるか。あっちの方が多分読みやすい。

| | Comments (0) | TrackBack (0)

Longhorn

多分Probert氏だと思うけど、Longhornの評価版を持ってきてくれたのでインストール(俺がインストールしたわけじゃないけど)。

みんなインターフェースについてあれこれ言ってるけど、今の時点で製品版のインターフェースなんてわかるわけない。あれはAPIの評価用でしょ。というか、見るからに「開発途上です」という感じのインターフェース。ちょうど2000年夏頃にASCIIに出てたWhistler開発版の印象を思い出す。あれからWhistlerがどれだけ変わったことか。

というわけで、あのマシンに開発環境を入れてじっくりいじるわけにもいかないし、かといってインターフェース周りは評価したってしょうがないので、特にやることがないのであった。

あ、ビルドナンバーチェックし忘れてるので明日確認してこよう。

| | Comments (0) | TrackBack (0)

Windows Internals

情報科学科に夏休みがないのはデフォルトなわけだが、今週は集中講義。Windows Internalと題して、Microsoftのプロバート氏(Dave Probert, Advanced Operating Systems Group, Windows Core Operating System Division)がWindowsの内部構造について講義するというもので、なかなか魅力的だ。疲れるけど、こんな機会はそうないので得られる限りの知識を得たい。

内容は、APIのレベルもすっ飛ばして、さらにその下、WindowsNTのサブシステム、カーネル、デバイスドライバ、オブジェクトモデルなんかの話で非常にコアでおもしろい。Windowsの内部構造についてここまで詳細に解説している書籍はないんじゃないだろうか?Inside Windows NTあるいはInside Windows 2000 Third Editionあたりかな。しかしながら非常に難しい。多分言ってることの半分くらいしか理解できてないな…。

彼によれば、WindowsNTは「構造はモジュール化され、アプリケーションとのインターフェースはサービスが担っているが、マイクロカーネルでもなんでもない。ついでにカーネルオブジェクトという用語が出てくるが、オブジェクト指向言語で書かれているわけではない。」らしい。

質問をしてみたんだけど、言いたいことは言えたのだが質問の答えのうち1/3も理解できなかった…。自分の専門分野くらいは英語で議論できるようにならないと話にならない。あと、どうでもいいことだけど、How do you think about~じゃなくてWhat do you thinkだった気がするぞ>俺。まあ相手はnativeだから、多少崩れた英語を話しても自動的に脳内補正してくれるだろう。

明日は多分、Virtual PCとNTFSの話。NTFSは非常に気に入っているファイルシステムなので、しっかり聞こう。

参考までに、去年の同講義の資料

Continue reading "Windows Internals"

| | Comments (2) | TrackBack (0)

July 26, 2004

-numeric_limits<int>::min() == numeric_limits<int>::min()

O氏の日記で「αβにバグがあった」とあったがなんと同じバグが俺のコードにも。std::numeric_limits<int>::min()の符号を反転させると……?std::numeric_limits<int>::max()にはなってくれないんだな、これが。

というわけでベンチマーク結果とか全て破棄。ああああ。

読み手数旧実装新実装中間ノード葉ノード
9+17976s642s8717429387403820

現在公開中のThell 2.3.3は古いコードで、alpha = -INT_MAX; beta = INT_MAXで始めているので何ら問題はない。やっぱり枯れてるコードってのは安定度が違うなぁ。本のコードはあまりにbuggy。あのコードをベースに実装を続けていってよいものか激しく不安になってきたな…まあ評価関数はスクラッチするから、気をつけて書こう…。

このバグによって、これまでは枝をまるまる一本完全に切って探索していたわけで、道理で枝のソートとかまったくしてないのに速いわけだ……。_| ̄|○ まあ、上記の表を単純にボードの再実装による速さの違いを見ると捉えれば、50%近く高速化してるのでそれなりにいい気分である。

いずれにせよvsOthaとの間に越えられない壁があることには変わりがないわけだが。

| | Comments (0) | TrackBack (0)

VS.NETをちょっと便利に

ここの読者にはVisual Studio.NETのユーザーも多いと思うのでちょっと書いてみよう。俺はいつも、Visual Studio.NETからプロジェクトのフォルダをエクスプローラで開いたり、コマンドプロンプトで開いたりできるようにしている。データファイルをいじりたくなったり、直接ファイルを実行したりしたくなったりすることもよくあるからだ。

VS.NETの「外部ツール」機能を使うことによって、こうしたことができるようになる。VS.NET 2002でも2003でも共通である。

[ツール]→[外部ツール]を開き、出てきたダイアログで「追加」をクリックして新規項目を作成。以下のように作成する。

設定項目エクスプローラを開くコマンドプロンプトを開く
[タイトル]エクスプローラ(&E)コマンドプロンプト(&C)
[コマンド]explorer.execmd.exe
[引数]$(ProjectDir)
[初期ディレクトリ]$(ProjectDir)

以上の設定で、[ツール]メニューに[エクスプローラ]と[コマンドプロンプト]が出現し、これをクリックすることで、プロジェクトのディレクトリを開いたり、プロジェクトのディレクトリをカレントディレクトリにした状態のコマンドプロンプトを開いたりすることができる。必要であれば開く先を$(TargetDir)にしたり、これらのメニューにショートカットキーを割り当てることもできるだろう。

| | Comments (0) | TrackBack (0)

焦焦焦

謎のバグで貴重な休日を1日まるまるつぶしてしまった。今週はWindows Internalの集中講義があるが、修羅になって取り返すしかない。

評価関数、この方法でやればいける、という自信がないからなかなか手をつけられないんだな。論文読んでも実装の詳細まで書いてあるわけではないし…。とにかく1日も早く分析を始めないと。とりあえず、いかなる方法をとったとしても現行のThellよりははるかにきちんと盤面を評価できるはずだから、それを信じて書くしかない。

さて、ざっと走らせてみた感想であるが、10手読みは余裕でいけそうだ。今のところ途中の枝でのソートと置換表は実装していないので、これらを実装すれば、本物の評価関数を使っても10手は余裕。しかし15手となると無理な気がする。単純なαβで15手くらいは頑張って行ってほしいと思っていたが、12手あたりに越えられない壁があるような気がする…。

あー、あとはGUIへの組み込みとBearプラグインの作成もそろそろ考え始めないと。

| | Comments (0) | TrackBack (0)

July 25, 2004

とんでもない浪費

今朝方から悩み続けてきた問題がついに解決した。結論から言うと、「旧実装も新実装もどっちも間違っていた。

ボードと探索ルーチンの実装が正しいことを確かめようと、単純なテーブルによる評価関数を使ったのだが、なんとこのテーブルにアクセスするところでインデックスを間違っていた。(座標は1-originなのにテーブルは0-originなので補正しないといけない)

そこが間違っているということはすなわちに添付したコードも間違っているということで……うへ。「探索ルーチンにバグがないことを確かめるため、まずは単純なテーブルによる評価関数を使いましょう」とか書いておいてその評価関数が間違ってるとか、ありえん。

最近真面目にコードをいじるようになったらぼろぼろと間違いが発見されているので、近日中にErrataをまとめて出したいと思う。また、あの本について間違い(コードの間違い、誤字脱字、etc)を発見されましたらぜひお知らせ下さい。

でボードの旧実装・新実装ともに書き換えて実行したところめでたく結果が一致。前回のベンチマークとは探索する局面がまったく違っているので、新規にベンチマークを取り直し。

読み手数旧実装新実装中間ノード葉ノード
7+1616.7s11.1s14489031550025
9+1771.5s40.9s45627817145895

んー。なんか、NPS計算してみるとvsOthaと1桁くらいの差があるのは気のせい?_| ̄|○

| | Comments (0) | TrackBack (0)

謎のノード数差

なぜかO氏の日記では完成したことになっている俺のボードだが、実際には完成などしていないのであった。

インデックス計算を毎回最初からやりなおすという超お馬鹿なことをしていることに気づいた(というかこれがそれほど重い処理と認識していなかった)ため、そこを差分方式に変更。

もちろん変更の安全性を確認するためにテストを実施。

打ち手は正しい。が、探索ノード数が微妙に違っている。0.45%ほど増加している。なんだこりゃ。探索に影響を与えるような変更はしていないので、探索ノード数は変化しないはずである。どっかがおかしい……。

こういうバグは探索数を広げたときに表面化したりするので、放置するわけにはいかないだろうなぁ…。クラッシュとかしてくれるバグはどれだけ楽なことか。

そしてこんなことで未だに止まってる俺はもうだめぽ。とりあえず改造前の実装で評価関数用のパターンを集めるか。

| | Comments (0) | TrackBack (0)

Effective STL

をいつの間にか買っていた。最近、本を買っても忘れてることが多いぞ。実はNumerical Recipies in Cも大分前に買ったが忘れていた。

でEffective STLであるが、ぱらぱらとめくってみるとなかなかおもしろい。一つ気になったのは、「配列を要求する関数にはvectorの先頭要素のアドレスを渡せばよい」と書いてあったこと。

vectorの要素が連続かどうかという問題についてはcppllでも何度も議論されているようだが、現時点の状況をまとめると、「仕様にはvectorの要素が連続とは規定されていない。しかしながら標準化委員会の中にもvectorの要素の連続性を仕様として要求すべしという声は強い。また、少なくとも現在要素が連続にならない実装は見あたらない。」ということで、よほど神経質にならない限り連続性を仮定して使っちゃってもOK、という感じかな?

数学の問題を解くときとかは連続性を気にするとかそういうデリケートな問題はなるべく避けて通りたくなるのに、プログラミングだと必要以上に神経質になってしまうのはどうしてだろう。単に理解度の問題?

| | Comments (2) | TrackBack (0)

July 24, 2004

Subversionがぁ

念願のSubversionであるが、あれこれ苦戦した結果入らないと言うことが明らかになった!_| ̄|○

なにしろOCamlもあったくらいだからね、あるだろと思ってapt-get install subversionするも「んなもんはない」と言われる。しょうがないので自分でビルドを試みるが、かなり面倒。BerkeleyDBとか、APRとか、いろんな外部パッケージを撮ってきてビルドしてインストールするところから始めないといけない。

なんとかsubversion本体のビルドにたどり着くも……謎のエラー。gccに-lzというオプションを渡している箇所があって、それを'z'というライブラリをリンクしろ…と言っているように受け取られてエラーになっている感じ?

FreeBSDにはportsでsubversionがあるらしいな。これはさっさとサーバーをFreeBSDに入れ替えろと言う啓示か?

とりあえず今回のオセロ大会はこれまで通りCVSで乗り切ることにした。

| | Comments (0) | TrackBack (0)

July 23, 2004

あと3週間

オリンピック開幕まであと3週間らしい。奇しくも、オセロ大会もちょうどその日だ。あと3週間。Thellはオリンピックレベルにまで強くなれるのか?

とりあえずH v.s. Oの様相を呈してきている現在の戦況をなんとかせねば。
Probert先生のWindows Internal、平時だったらすっごく興味あるんだけど、最悪のタイミングだなぁ。まあOSの試験の直後だしちょうどいいケーススタディにはなると思うんだけど……。

| | Comments (0) | TrackBack (0)

ようやく試験終了

みんなから遅れること1日、ようやく俺も試験が終わった。形式言語理論の追試は、ほぼ本試そのものな問題で簡単であった。むしろ本試よりも簡単になっていた問題もあった。うーん、こんなに簡単だったならちゃんと本試の時に勉強しておけばよかった、ってのは後の祭りですな。

しかし形式言語理論って相当すごい理論だと思うのだが、Chomsky以外の名前がほとんど出てこないのはなんでだろう。もしかして正則言語とか全て含めてChomskyの成果なのか?だとしたらものすごい。

さて今回の試験であるが、OSは余裕、コンパイラは……

細谷さんはきっとああ見えてとてもやさしい人だから問1と問2が出来てれば単位くれるよきっと!なんか、liveness analysisがいつまでたっても収束しない→干渉グラフが作れない→レジスタ割り当てできない、で轟沈。あ、それ以前にLR(1)の状態遷移図ってなんだっけ、という論外な事態も発生してもうもはや。合掌。liveness analysisは逆順にしてoutから求めるとすぐ収束するらしいですね。そんな話を聞いたことがある気もしたがよくわかんなかったのでとにかく既知の方法で攻めたのだった。どっか書き間違ったかなー。

DSC_4145.jpg
試験と言えば徹夜だが、徹夜明けの朝日が目にやさしい。

| | Comments (0) | TrackBack (0)

July 22, 2004

LALR以外は

大したことない!

Continue reading "LALR以外は"

| | Comments (1) | TrackBack (0)

July 21, 2004

理学部便覧より引用

コンパイラの勉強をするはずがなぜか形式言語理論の勉強をずっとしていた。

形式言語理論は冬学期金曜の3限にあるわけだが、3年の冬学期は金曜3限に必修科目「連続系アルゴリズム」があるため形式言語理論は履修できない。よってここで落とすと自動的に4年の冬に持ち越しで、「卒論書きながら駒場」という祭りに発展する。ガクガク。

駒場時代、試験前によく読まれた名著「履修の手引き」にかわり本郷で読まれている「理学部便覧」であるが、それによるとこうある。

また、4学年での情報科学特別演習の履修のためには、2学年4学期での必修科目11単位のうち9単位以上をあらかじめ取得しておくことが必要である。
情報科学特別演習というのは卒論のこと。つまり、幸いにして卒論に着手できず即あぼーん、という事態は回避できているということらしい。

が。

| | Comments (0) | TrackBack (0)

名前考えないとね

試験後オセロなメンツで協議。定石は認めるかどうか?定石の使用を認めるとみんな同じ定石を使っていて引き分けしか出ない、なんてことにもなりそう。

電気系学科の夏の課題としてちょうどオセロプログラムを書け、というのが出ているらしく、ちょうどよい機会だからそっちにも参加を呼びかけてみようか、ということに。さらにH氏の友人(6段?)も呼ぼうぜ、ってことになって、もうすごいことなりそう。人間に勝てないオセロプログラムに意味はあるのでしょうか。

ところでみんななんか超格好いい名前を考えている。NeothecだとかOxelonだとか。俺はまあThellでいいかなという気もするが、もともと「あー開発始めるにあたってプロジェクト名つけないといけないけどとりあえずいいのが思いつかんのでOthelloの前後のoを抜いておくか」と付けたコード名なので、微妙。

どうでもいい話になるが、ThellってのはWin32GUIアプリケーションのあの形をしているものがThellであって、一応思考ルーチン部分とは別、という扱いなのだ。思考ルーチン部分はplatform-independentにして、思考ルーチンとユーザーインターフェースとのやりとりは派生クラスを作ってそこが担当するというような構造をとっていたわけだ。

Thell2.3.3の思考ルーチンは"Harp"という名前で、「リバーシのアルゴリズム」のためにスクラッチで書いたのは"newharp"だったが、今回はどうしようかな。大幅刷新になるので新しい名前をつけたいところだ。

以上を注意深く読むとわかるが、「リバーシのアルゴリズム」についてるコードは実はThellに組み込まれていない。組み込んだのを出そう出そうと昔から思っていて気づいたらこんな時期になっていましたとさ。

ついでに、オセロ熱が高まってきたのでkozoOthelloを落として評価してみる。確かに強い。が、それ以前に驚異的なのはこのサイズの小ささだ。パターンの重みを学習しているといういわゆる90年代オセロプログラムの一種とのことだが、思考ルーチン本体のDLLで700KB強、しかも学習パターンファイルらしき外部ファイルは見あたらず。これはすごい。どうやって重み係数を格納しているのだろう?

将来のThellの構想として考えているのは、1つのバージョンとしてパターン、定石等とにかくありとあらゆる技を使って最強を目指したものを作る。これは多分巨大なデータベースを持つことになるだろう。展開すると100MBなんてことになるかもしれない。一方で、強さとしては劣るものの、古典的な評価関数(着手可能手数、開放度、近似確定石個数、隅の石数、など)の重み係数を統計的手法等できっちりチューニングすればかなりの強さになり、かつ配布サイズを非常に小さく抑えることが可能であるため、そういうバージョンもあるといいと思っている。

はっきり言って、「ちょっとオセロで遊んでみるか」程度の人(俺を含め)にとっては現行Thellでも強すぎるので、そういう人はわざわざ100MBのディスク領域を使ってまで最強のオセロプログラムを手に入れたいとは思わないはずだ。

| | Comments (2) | TrackBack (0)

明日はコンパイラ

OSの試験は終わり。やっぱり簡単だった。っていうか過去問そのものじゃん!

明日は「言語処理系論」、つまりコンパイラの試験。去年まで担当していた先生に比べると簡単な内容になってはいると思うのだが、そもそもコンパイラっていうものそのものが難しいと思う。

かつては「OSとコンパイラを作るのは男なら誰しもが一度は見る夢」ということでこの学科に来たわけだけど、OSは規模の点で作るのが難しく、コンパイラは技術の点で難しいと思う。(コンパイラは作る実験があるけど、今はOSそのものを作るというものはない。ちょっと残念。)

OSなんて、出てくるアルゴリズムは超自明なものがほとんどで、(ラウンドロビンとか幼稚園児でも理解できそう)、一番難しいものでハッシュとかB-treeくらいか?という感じであるが、コンパイラは初っぱなの字句解析からして正規表現だ、オートマトンだと始まって、構文解析になると文脈自由文法だとかLLとかLRとか…まあこの辺はツールがやってくるけれども…レジスタ割り当てに至ってはk染色問題でNP完全とか言っちゃってますよもう。んー、CPUスケジューリングも真面目にやるとNP完全とか聞いた気もするが…まあいいや

というわけで、何からやろうか…。

| | Comments (0) | TrackBack (0)

禁断症状

ここ数日オセロのコードを書いてなかったら早くも禁断症状が。本当にどうでもいい最適化案ばかりが浮かんでくる。1つは着手を大分高速化できそうではあるが。まあ、コードを書く前にいろいろ脳内検証する時間も必要ってことで。

冷静に考えると、経験者リーグに参加表明している4人のうち俺だけが評価関数未着手。まずい。ボードの最適化とかやってる場合じゃない。ああもうなんか、全然勝てる気がしないわけだが……。

| | Comments (0) | TrackBack (0)

July 20, 2004

Nikonの陰謀

一通りOSについては目を通したつもり。あとは過去問解いて用語とか確かめたらOKかな。

ところでNikonという会社は人の試験期間を狙って製品を出すというとんでもない会社であり、去年の7月にはD2Hを、今年1月にはD70を発表してきたため双方の試験ともとんでもないことになったのであるが、今回の試験には幸いそうした危険はないようである。

とはいえいくらなんでもここのところ情報がないなと思って調べてみたらあったあった。D2Xが今年のフォトキナで発表、来年2月のPMAまでにD50/D90発表、とのこと。D2Xはマジでそろそろ出さないとまずいしD50は大分前からささやかれてたからあり得る。D90ってなんだろう。D100後継だったら激しく期待だが。ま、でもこれが本当だとしても出るのは9月のフォトキナだから大丈……ん?9月にも試験があるじゃねーか(゚∀゚)

最近全然写真撮ってないなぁ。

| | Comments (12) | TrackBack (0)

Firefox不安定…

Firefox 0.9.2(Win32)がまたクラッシュした。なんかこれ不安定だなぁ。nightly追いかけていた頃でさえクラッシュすることはなかったのに、リリース版に腰を落ち着けた途端これかよ。

もっとも、0.9.2って0.9を出して1.0に向けての拡張…といこうとしたさなかセキュリティホールが発見されたのであわてて出したってバージョンだから、テストが不十分?んーでも0.9の時点でブランチを作って0.9に対するパッチなんかはそこに当てるはずだけどなぁ、普通は。

こうやって文章を入力してる最中に落ちたりされると困る。あとは、なぜかクラッシュするとブックマークのサイト別アイコンが全て消えてしまうので困る。というかなぜかFirefoxでは全然違うサイトのアイコンがついていたりするので困る。

| | Comments (2) | TrackBack (0)

おべんきょ

一日中、勉強をした。しかし振り返ってみると実は大してしてないような……

論理学演習。とりあえず現時点で単位認定条件はクリアしてるっぽいことを確認して、いくつか追加で解けそうな問題をチェックしたら安心してきたのでおしまい。

OS。半分強?リアルタイムスケジューリングの前までやった。過去問見ると、ファイルシステムとか全然出てないような…。一般的なプロセススケジューリングがわかってればいいのでは、とか思ってしまう。レジュメをめくりつつ、気になったところは恐竜本を眺めるというスタイルでやっているが、結構かかるな。同期やスケジューリングのところはなかなかおもしろかった。

コンパイラ。ノータッチ。まずい。なんかみんなが日記にOSの話ばかり書いてるからOSをやらないといけないような気になってしまったのだが、冷静に考えるとOSよりもコンパイラの方がヤバさが数段上である。確かに簡単めのことしかやってないっぽいとはいえ、アルゴリズムとか書けと言われたら普通に書けないしなぁ…。

形式言語理論。あれ、どうして俺だけ試験が1つ多いんだろう?アヒャ。とりあえずプリントを引っ張り出してきて雰囲気を思い出す。有限オートマトンが受理するものが正則の定義なのか。へぇー。
過去の本試と追試との相関関係をにらむに、本試と追試はほとんど変わらないはずである。さらに、ここ数年の傾向からして、例のメンバーシップ判定問題云々の巨大な設問は間違いなく出る(投機的実行)。えーと、分岐予測がはずれたら1年間くらいのパイプラインストールが起きたりするのか?という怖い想像が脳裏をよぎったが、現在の技術では95%くらいは予測できるらしいので、大丈夫でしょう、多分。前日と当日ひたすら写経だな。

| | Comments (0) | TrackBack (0)

July 19, 2004

今日の進捗状況

ふう暑い。人間も参るけどマシンも参る。放熱効率が悪くて全然CPU温度が下がらないので、ファンが常にまわりっぱなしで超うるさい→人間様がますます参る。

そんなこんなで丸一日レポートをやっていたため、全然オセロはいじっていない。朝に「高速化の手法を思いついた」と書いたが、ウソであることが判明。その方法では正しく更新できないことがわかった。っていうか以前も同じ事を考えて脳内で否定したことがあるぞ…。

ということでボードはひとまずこれでOKということにして、次に進まないと。まずは評価関数だな。終盤付近の評価関数を作ってみて、俺の考えで果たしてうまくいくのか検証しないといけない。見るべきパターンも、Logistelloのものが世の中では圧倒的優勢っぽいが、あんなにいろんなパターンを全部見る必要があるのか(隅の部分とか何回重複してカウントしてるんだ)というのはちょっと気になるところである。

それと序盤の戦略。序盤の戦略はきちんとした案すらないので非常にまずい。定石がないと非常に不利なのはいうまでもないが、定石はどう用意するのか。手でかき集めてくるのか、自動生成するのか。いやそりゃ自動生成するに越したことはないけどどうやって?考えるべき要素が多すぎるぞ……。

そんなことを考えながら、現実逃避に(現行の)Thellと対戦。「愚」(1手読み)には勝てるが「弱」(3手読み)には勝てない……。っていうか1手読みとはいえ、俺に負けるとはまだまだだな。あと、普通に実行速度遅すぎなのでこの3倍の速度を目指そう。

さらに現実逃避してリバーシ関係をぐぐっていて見つけたプログラムを落としてみて、Thellと対戦させようとするも……初期配置が間違ってるよこのプログラム(;´Д`)
ということで断念。ルールはちゃんと確認しようぜぇ……俺も最初に実装したThellでは思いっきり間違っていたけどな(笑)

しかし、こうやって毎日オセロのことを書いてはいるが、情報をもらすまいと(笑)肝心の詳細については一切書いてなかったりするので、後の人が検索で見つけても困るだけだろうなぁ。うまく作れた部分については、「リバーシのアルゴリズム」補遺みたいな形できちんと項目ごとにまとめてサイトにアップしたいとは思うけど。

U氏の日記にあった/usr/local/bin/Oxelonというのを見て思ったのだが、地下の/usr/local/gamesに成果物を残せるといいな。俺X11プログラミングわからんが^^;

| | Comments (5) | TrackBack (0)

Rubyもいいかもな

現実逃避に先輩方の日記やらサイトを巡っていたら、いろいろ発見。OCaml 3.08.0が出ただとか。その中で、一時間で覚えるRubyという記事を発見。

C/C++, Java は使える、大学で ML とか Scheme もやった、そろそろスクリプト言語を覚えたい、という人向け
まさに俺じゃん

Perlもなんかなぁーと昔から思っていて、スクリプト使えたらなぁと思いつつもそういう場面でスクリプト言語をよっこらしょ、と覚えるよりはC++でちゃちゃっと書いてしまった方が速いのでスクリプトチックなプログラムをC++で書いてきた(*1)俺であったが、プログラミングマニアを自称しときながらスクリプト言語を1つも知らないというのはさすがにどうかと、という感じなので、ちょびっといじってみるかね。最初からオブジェクト指向を考えて設計されたというのは、オブジェクト指向好きの俺にはうれしい配慮だ。型汎用性もあれば最高なのだが……って、それはC++じゃん。というかスクリプト言語なんてそもそも型があってないようなものでは。

(*1)とはいえSTLを駆使すると結構スクリプト言語なみの労力でさくさくっと目的のコードができてしまうのがC++という言語のうれしいところである。

さて、ふと沸いたRuby熱だがいつまで続くか?

| | Comments (0) | TrackBack (0)

物理なんて(以下略

ふうやっと終わった。といっても試験勉強じゃなくて、「解析力学・量子力学I」の追レポート。当然試験勉強など(ry

っていうか本当に何もわかってないな、俺。本当に理系なんだろうかと沈んだ気分になってしまうよ……

いや違う、理系=量子力学が出来ないといけない、なんて誰が決めたんだ?それは物理帝国主義者達が自らの利権を堅持せんがために植え付けた固定観念ではないか。物理屋など高性能プロセッサがないと理論を検証できないしコンパイラがないと数値計算プログラムを書けないし並列ライブラリがないと並列計算できないしMathematicaがないと面倒な数式を処理できないのである!ということで情報科学の有意はここに自明である!

ん、ノイマンは物理学者で数学者で情報屋?まあ天才はなんでもやるからなぁ。

とか叫びながら、ブラケットの演算をなんとかそのままC++で書けないか考えていたわけだ。
vector v; vector w;に対して
vector product = <v|w>;
ということ。|はいいとして<と>が2項演算子でなければならない、という点で思いっきり挫折。物理屋さんの気分としては|.>で1演算子というつもりなのだろうが、そういうものを用意するためにはC++の字句解析レベルにまで踏み込んだ改変が必要だ……。

| | Comments (0) | TrackBack (0)

July 18, 2004

試験?追レポ?

とてもいい夢を見ながら目覚めるとそこは現実という地獄の火の中。朝食を食べながらテレビをいじっていたら愛してるぜベイベ15話とかやっていて見てしまったが、なんか虐待ファミリーげな話で朝っぱらからutuになる。

親がAERAの桜蔭「女」vs.開成「男」卒業13年目アンケートで浮かぶキーワードという特集を見つけて買ってきたので読んでみる。開成卒で、団長と組責で組んで会社始めた人がいるらしい。ふっちーが最近よくマスコミに登場しておる。

さすがにそろそろ試験とか考えないとまずいかなぁと決意を固めた矢先に、着手を若干高速化できると思われる手法を思いついてしまった。どうしましょ。

| | Comments (0) | TrackBack (0)

/Oxが推奨されない本当の理由

ところで、注目の的の/Oxオプションがどれほどすごいのか見てみようとどきどきしながら実行したら、なんと/O2との有意な差は認められませんでしたとさ。あれれ?

| | Comments (0) | TrackBack (0)

July 17, 2004

ベンチマークその2

先ほどのベンチマーク後、ちょっと改善すべき点が見つかったのでそれを適用してみたところ43秒くらいにまで短縮することができた。が、それは今回の実装に限った話ではなくて旧実装でも同じ手法で高速化できるのでどうしたものか。旧実装の方は38秒くらい。なぜだ_| ̄|○

結局、実際の探索における使用でのパフォーマンスを見ないとしょうがないじゃん、ということで、AIに手を打たせての速度を見ることにした。評価関数は単純な方がよいだろうということで盤面テーブル値評価+終盤完全読みを用いた。

読み手数旧実装新実装中間ノード葉ノード
7+1321.5s11.5s5513752464608
7+1529.7s20.2s15344632798973
7+1658.2s51.4s61017034348029

葉ノードが増えるに従って双方の差が詰まっていく。先のベンチマークからわかるように、中間ノードにおいては打つ手の列挙が非常に重い処理であるため、どちらの実装もほとんど変わらないか、新実装の方がわずかに遅い。一方葉ノードについては新実装の方が圧倒的に高速である。よって今後は探索によっていかに中間ノードを削減できるかが勝負といえよう。

なお、旧実装と新実装で差し手に差異は認められなかったため、ボードの最実装によるバグは取れたと考えている。

しかしテーブルによる着手可能位置の割り出しがこんなに遅いとは_| ̄|○ それとも俺の実装で どうしようもなく終わってる部分があるのだろうか?

そもそも、やっぱり差分方式よりもコピーの方が速いんじゃないかという根本的な疑問が生じてきたZO

| | Comments (0) | TrackBack (0)

高・速・化!……?

数日前(1週間前?)からいじっていたボードの最適化がようやく終わった。いくつかインデックス計算の間違いがもとでクラッシュ・不正な結果を出していたが、とりあえず問題はなくなったかと思う。後で、もっと綿密なチェックをしないといけないけど。

はやる気持ちを抑えて早速ベンチマーク。適当にとってきた棋譜を最初から最後まで打って、最初までundoで戻るということを1サイクルとし、これを10万サイクル行う。
旧実装では51.046秒かかっていたのが、新しい実装では26.719秒で完了するようになった。すばらしい!

と思ったものの、新しい実装は「着手可能な手を列挙する」という重い操作が入っていないのだから速いのは当然か。(必要ないときに省けるようになったというのはもちろん大きいが)

ということで着手可能な手の列挙を入れてやり直してみると……59.968

むしろ遅くなってやがる_| ̄|○

っていうか、落ち着いて考えると、ノード探索においては1ノードあたり1回のmoveとundoがあるわけだ。つまり今回は600万回のmove/undoを行ったわけだからこれは600万ノードの探索に相当する。ここを見るに2000万近いノードを10秒ちょっとで読めないといけないらしいではないか。

こんなんじゃ勝てるわけねーYO!ヽ(`Д´)ノ

ふと試験が気になったときには、西川さんの日記を読んでしまう今日この頃。

| | Comments (0) | TrackBack (0)

大平さん

昨日はあまりにも眠かったので、書きかけだったコードを片づけて12時に寝てしまった。で今朝は9時に起きたので、NHKのラジオ「きらり10代!」を聴いた。プラネタリウム開発者の大平さんが出演するからだ。

大平さんは個人で、それまでどんな企業が作ってきたプラネタリウムをも上回る性能をもったプラネタリウム「メガスター」を開発した人だ。しょっちゅういろんなテレビとかに出ているようだがちゃんと見た・聴いたのは実は初めて。一応、駒場祭、五月祭と2回プラネタリウムを運営した身なので、神とあがめる大平さんの出演する番組には興味がある。(ここでサークルのプラネタリウム紹介のページにリンクを張ろうかと思ったが、ちょうど今停電でサーバーが落ちていることに気づいた。残念。)

大平さんはもちろん技術力がものすごいのはもちろんだけど、それだけではなくて、夢を他人に語ることがうまいと思う。あれだけの技術力を持っていれば技術一辺倒にならずにもっと大きな視点を持てるようになるのだろうか。

ちなみに現在のメガスターIIがどのくらいすごいかというと、例えばうちの天文部のプラネタリウムにおける恒星投影機において、原板に空けられる最小の穴の直径は30um。それに対してメガスターIIでは0.8umだそうだ。800nm?なんかそろそろ光が回折しそうな大きさじゃないの?

DSC_4009.jpg
これはメガスターじゃなくて、うちの天文部の五月祭プラネのときの写真。

| | Comments (0) | TrackBack (0)

July 16, 2004

キャッシュ・遅延評価

キャッシュといっても午前中やってた平木さんの話ではなくて、オセロの高速化の話なのであります。

ボードに石を置いて石を返して関連するデータ構造を全部アップデートするっていうのはなかなか重い処理なわけだ。これまでは特に気にせず確実に全ての処理を実行する、つまりeagerに処理してきたわけだが、ケースによってはがんばって用意したデータ構造は一切使用せずに石の数だけ調べておしまい、なんてこともあるわけだ。こういうときにがんばった処理時間を他のことに使うともっと効率がよくなる。

というわけで、データ構造はそれが必要とされるまで生成しないでがんばる、という手法が当然の事ながら思いつく。lazyな処理というやつだね。データ構造が有効か否かを示すフラグを用意しておき、データが必要になったらまずフラグをチェック。フラグが立っていたら現在あるデータを有効とみなしてそのまま使用、フラグが立っていなかったらしょうがないのでやっと重い腰を上げてがんばって生成してから使う。

まあ原理は簡単なんだが、綺麗なコードに落とすのがことのほか難しいことに気づいた。遅延評価したい要素が1つならまだしも2つ以上とかになってくると、謎のフラグがどんどん増えていってクラスがぐちゃぐちゃになる。

ぐちゃぐちゃしてきたら、ラップしてしまえばいいじゃないの。

ってことで、こうした遅延評価機構を透過的に実現するgenericなクラスが作れるのではないか、と思ったんだけど、ちょっと考えた限りでは結構難しい。boostにあるかも、と思って探したけどそういうのはなさげであった。

そもそもこれだけコードを汚くして遅延評価を頑張ったとして、どれだけの効果があるのか疑問という話はある。なんか考えていくとほとんどのケースで結局データを生成しないといけないし。

……と、書いているうちにいい解決案が浮かんだ気がする。考えを文章にまとめるというは自分の思考を整理する上でいい効果があるな。

さて、いつまでも細かい最適化にこだわってないで評価関数の実装を進めないと。O倉がパラメータ学習に手こずっているようだったので、俺も同じような罠にはまる危険性は大いにある。なにしろまったく検証されてない脳内理論だからな…。

| | Comments (0) | TrackBack (0)

Thellが全滅?

Thellを全滅できたという人がいるのでやってみたのだが、結果が再現できない。時期から判断するに、この頃公開していたThellと今公開してるのとではまったく違いがないはずなんだが……ううむ。

| | Comments (0) | TrackBack (0)

MMXとか

使えたらいいね、MMX。さすがにもはやx86系CPUにおいてMMX命令の存在は仮定してもよかろうし。今回のオセロは学習とかでSPARCも使おうかなぁーとか思ってるしいろんなコンパイラを行き来するつもりなので微妙だが、使えて悪いことはない。それに本番のターゲットはPentiumMともう決まってるわけだから、MMXを前提にばりばり最適化をかけるのも悪くない。

ということで参考になりそうなページを見つけた。ここで紹介されている「MMXテクノロジ最適化テクニック」は高校生の頃図書館で借りて読んだことがあって、とてもよい本だと思った記憶がある。C言語の関数呼び出しがどう実装されているかとかもこの本で理解した記憶が。が……品切れだとっ!?

ちなみにVisual Studio.NETだと、MMX/SSE用の関数が提供されてるんじゃなかったかな?アセンブリを書かなくても、その関数に4つの引数を渡せば中でMMX計算してくれるとか、そういうのがあった気がする。

昔何かに「CISCは命令が豊富なためアセンブリで書きやすい、RISCは命令がきわめて限られるため難しい」って書いてあった気がするのだが、本当か?x86の方がSPARCよりよっぽど難しいと思うぞ。レジスタもないに等しいし。「このレジスタはこの命令のオペランドになれない」とか、今はそういうのはないんだっけ?

| | Comments (0) | TrackBack (0)

生活様式学会

気づけば電脳な話題ばっかなので少し中和してみるか。無理な気がするけど。

試験勉強からの逃避で(っていうかいつものことだが)ネットサーフィンをしていたところふと迷い込んでしまったサイト。超有名サイトなんだろうがこれまで俺は見たことがなかった。

俺一人が試験前にこんなサイトにはまっていては問題だが、現実逃避、みんなですれば怖くない、ってことでとりあえず読め

| | Comments (0) | TrackBack (0)

July 15, 2004

Thell << (超えられない壁) << vsOtha

なんなんだこれは。今のThellで20手とか25手とか読んだら人生が終わっても返ってこないと思う。

今考えている改良で
Thell 2.3.3 << (超えられない壁) << Thell 3.0(仮)
とはするつもりだけど。

(10,10,6M)とかってどういう意味なんだろう?彼が「キャッシュ」と言っているのは置換表のことだろうか?置換表のハッシュテーブルのエントリ数を6M個にしたということかな?6Mもいるのか……。

先頭の10,10はなんだろうか。秘密のパラメータ…?

試験の優先度がまた1段階下がってしまったではないか。1週間後は言語処理系論の試験だと?

| | Comments (0) | TrackBack (0)

Windowsのシェア

さっきラジオのニュースで、マイクロソフトの独占禁止法違反問題に関連して「マイクロソフト社のOSはパソコン市場で94%のシェアを占め…」といっていた。独占してるということが言いたいのだろうが、むしろ非Windowsが6%もあるのかと驚いてしまうな。パソコン用と言ってるからには多分サーバーとかは除いた一般家庭向けPCのうちの割合なんだろうけど。6%のほとんどはMacだろうか?

というわけで我が家のWindowsシェアを数えてみよう。1つのOS環境を1とし、1台のマシンでデュアルブートするような場合は両方をカウントする。また、運用しているものだけをカウントし、使っていないマシンに入っているものや、実験的に動かしているものは数えない。ISから借りているノートに関してはカウントしなかった。

  • Windows XP Professional…3
  • Windows 2000 Professional…1
  • Windows 98 Second Edition…1
  • Vine Linux 2.6r4…2

というわけで、Windowsのシェアは71.4%らしい。サーバーを除いたデスクトップ用途だとLinuxが1つ減るので83.3%となる。

もっとも一般の家庭においては

  • Windows XP Home Edition…1

でWindowsが100%、ってのが普通なんだろうけどね。

| | Comments (0) | TrackBack (0)

夕立

今日は夕立があるという予報が出ていて、確かにそのとおりになった。雷も鳴り出して、おおすげーとか思いながらいつものごとくソースコードをいじっていたら、ものすごい轟音とともに

ぷちん。

一瞬何が起きたのかわからなかったが、ディスプレイが真っ暗だし部屋も暗いのでどうやら停電したらしい。ノートパソコンならバッテリで使うことができるけど、ルータも死んでいてインターネットにはつながらないし、デスクトップマシンに入っているファイルを取り出すこともできないから結局意味がない。ということで、雷も鳴り続けていたし、大事を取って全てのコンセントを抜いておいた。

雷が去ってからルータを再起動して見てみるとこんな感じ。

reboot system boot 2.2.25-0vl3 Thu Jul 15 16:18 (00:17)
reboot system boot 2.2.25-0vl3 Thu Jul 15 15:48 (00:47)

停電は2回あった。dmesgすると、

EXT3-fs: WARNING: recovery required on readonly filesystem.
EXT3-fs: write access will be enabled during recovery.
JFS DEBUG: (recovery.c, 255): journal_recover: JFS: recovery, exit status 0, recovered transactions 674612 to 674864
JFS DEBUG: (recovery.c, 257): journal_recover: JFS: Replayed 683 and revoked 0/0 blocks
EXT3-fs: recovery complete.
EXT3-fs: mounted filesystem with ordered data mode.
VFS: Mounted root (ext3 filesystem) readonly.
Freeing unused kernel memory: 84k freed
Adding Swap: 195544k swap-space (priority -1)
EXT3-fs: mounted filesystem with ordered data mode.
EXT3-fs: mounted filesystem with ordered data mode.

WindowsXPの方は特にNTFSのチェックも行われなかった。失われたソースコードは2行文だった。

とりあえず、サージによってマシンが死ななくてよかったよ。雷はなめない方がよさそうだな。さて、夕立のおかげでとても涼しくなったのでレポートの続きでもやるか。

DSC_4137.jpg
雨上がりの風景。確かに田舎っぽいな、うちの周辺。

| | Comments (0) | TrackBack (0)

July 14, 2004

ボード再実装

今日は実装の日。

ボードについて、O倉から処理が無駄だと指摘された部分を徹底的に書き換え。ボード単体においては多分作業量に見合うほどの高速化は得られないと予想しているのだが、新しい評価関数を実装する際にはどうせほぼ同じコードを書かなければいけないので、それに合わせた構造にしておいてまったく損はない。

現在のThellには「わかっちゃいるが…」という感じでさぼっている箇所が無数にあるので、それらを1つ1つつぶしていくだけでもかなりの性能向上につながるはずだ。

しかしすごい汚いコードだ。インデックス計算とか、その辺は汚くなるのは仕方のないことなのだろうか。

| | Comments (0) | TrackBack (0)

評価関数

よーし評価関数は2種類作るぞ。両方作って戦わせてみて強い方を採択することとしよう。

あと序盤の戦略も考えないとな。

| | Comments (0) | TrackBack (0)

July 13, 2004

Wake up on LAN

あーまたさぼっちまった。朝6時まで起きてて授業とか出られるわけないよね。無理に行ってもどうせ寝るだけだろうし、このクソ暑い日は家で引きこもっているのが正解、と。それもこれも全てLilf.+演習のせい。また締め切りブッチしちまった。アヒャ。というか、Lilf.+のおかげで離散数学に出席できないじゃねーか。離散数学の単位落としたらどうしてくれるんだこの(ry

ということで学校に行かなくてよくなったため時間が生じたので、かねてから気になっていたWake up on LANの研究。俺のデスクトップマシンはWindows XP Professionalなので、リモートデスクトップ接続ができる。家でつけっぱなしにしておけば、ルータを経由して学校からでも接続できるため、非常に便利だ。特に最近はLinux上でもKDE 3.2のリモートデスクトップであるとか、rdesktopといったクライアントソフトが充実してきたので、クライアントマシンのOSによらず家のWindowsデスクトップに接続できる。

しかしながら、こう暑い中使うかどうかわからないのにマシンを起動したまま家を出るのはちょっと気が引けるのも事実。ということで、必要な時にリモートから起動できるWake up on LANの整備を急ぎたいところである。

マザーボードはAOpenのAX4SG-Nで、ネットワークチップとしてはBroadCom 440xをオンボードで搭載しているのだが、BIOSにそれらしい項目(Wake up on LAN)があったのでEnableにしてみる。また、ドライバのプロパティでMagic Packetに対してwakeするように設定。そうした上で、ノートパソコンからWake up信号を送信……あれ、起動しない。

BIOSで「Power Management」の項にWake up on LANの設定があったので、サスペンド中じゃないと効かないのか?と思ってやってみるもだめ……。なぜだ。

当面は従来通りつけっぱなしにするか、緊急時はWake up on Telephone、つまり家に電話して家族の誰かに電源入れてもらう、かな。

しかしみんなよくLilf.+演習出してるなー。俺がDQNなだけ?

| | Comments (0) | TrackBack (0)

ヘネパタ?パタヘネ?

みんな買ってるなおい。やっぱり買った方がいいのかなぁ。しかし今注文して間に合うのだろうか。日本語版なら手にはいるかな。とりあえず計算機構成論で勉強しておかないとまずいと思うのは

  • マイクロプログラム
  • リザベーションステーション
  • トマスロのアルゴリズム
  • キャッシュのマッピング方式

かな。うーん、もっとある気がするけど……。

| | Comments (0) | TrackBack (0)

あー秋田秋田

Lilfes演習に秋田ので論文読み。かつてダウンロードしときながら「全然ワカラン」とHDDの肥やしになっていた論文が、今なら雰囲気くらいはわかる(気がする)。数学と英語の勉強って大事だね。多分、今さっぱり理解できない箇所も数学をもっとちゃんと勉強したらきっと自明なんだろうな。キーワードは単調増加性か。この性質はうまく使えるかも知れない。

H氏ががんがんチューニングを進めている模様で焦りを感じるが、まあ出遅れているのはもともととして、実装に費やす時間のない今だからこそじっくりいろいろ読んで検討しておきたいところ。

ところで、Zebraは終盤20手を2秒ちょっとで読むらしい。なんじゃそりゃ!

ということで、Lilfes演習はこれ以上一人でやっても多分進展はないので、残りは明日学校で誰かに聞きつつやるか。

| | Comments (0) | TrackBack (0)

July 12, 2004

SPARCにおけるクロックの測定

MPIもどき課題を出さないでいたらTAからメールが来たので、あわてて学校へ行ってレポートを書いた。というだけで済むはずだったのだが、いろんなバグとか罠にはまりまくって結局深夜までかかってしまった。

まずは徹夜明けの寝ぼけた頭で書いたコネクション確立部分のコードが間違っていた。接続してきた相手をちゃんと確かめずに勝手に決め打ちしてしまっていたのでとんでもないことに。「何番の人と通信したい」と要求した結果全然違う相手とつながることになってしまっていた。

それからアセンブリ。「実行速度を測定せよ」という項目があって、プロセッサのタイムスタンプカウンタを使うために、TAがgcc用のインラインアセンブリのコードを配布してくれたのだが、俺はC++の標準ライブラリの関係でSunのコンパイラを使っていたため、gccのインラインアセンブリが通らず、一から自分で書く羽目に。再びSPARCアセンブリなんか書くことになるとは。

そのアセンブリファイルがこれ。プロトタイプ宣言はunsigned long long rdtick();である。アセンブルするときに、CC -xarch=v8plusとしないと、rd %tick命令が通らない。

現在のSPARCって、実際はほぼ全てのレジスタが64ビットなんだけど、互換性のために32ビットアプリケーションからは32ビットプロセッサに見えるようになってるみたい。64ビットを扱う命令を使ったときだけ、レジスタが64ビットに見える。例えばsrlxは64ビット命令。最後にxがついていることで区別できる。

最後の下位32ビット分のコピーになんでsrlを使ったのかは謎。unsigned long longをどう扱うのかと思ってCのコードをコンパイルしてアセンブリを吐かせてみたらそんな感じのコードが出てきたので丸写し。64ビットのうち上位32ビットをクリアしてくれるとかなのかな?orはクリアしないみたいな感じ。

| | Comments (0) | TrackBack (0)

July 11, 2004

なるほど

なるほどRか。「統計 R」でぐぐってみる。駒場の数学の教官が激しく推奨していたのを思い出した。

現在のところ統計については、既存ソフトに頼るか、自分で回帰分析アルゴリズムを実装するか検討している段階である。これまで既存ソフトというと、Excelの統計が頭にこびりついてて、自動化が難しそうだなぁと尻込みしていたのだが、Rみたいな感じだったらうまく自動化できるか?もう一つ考えたのがECCに入っているSASとかいうソフト。これはiMacでしか使えないのかな?リモートから使えないとちょっと不便だな。

冷静に考えれば自分で実装するのは実装のコストとデバッグのコストがかかるので、既存ソフトの使い方を学んで使うのが一番正しいのだろうが、オセロ演習を単なる開発工程と捉えず、全体的なスキルアップの機会と捉えるならばあえて自分で実装してみるのも悪くないかも……なんて余裕をかましていられるのも今のうちか。

| | Comments (0) | TrackBack (0)

詳しくは4学期成績表などで熟知すべし

割と知られていることだが、俺の4学期成績表は大変なことになっている。具体的にどう大変かというと、必修及び選択必修19単位分のうち、

Continue reading "詳しくは4学期成績表などで熟知すべし"

| | Comments (0) | TrackBack (0)

July 10, 2004

うげ

情報科学科の地下室にあるSolaris端末のキーボードは英語キーボード、情報科学科から貸与されているノートパソコンのキーボードも英語キーボード。そして家のデスクトップはもちろん日本語キーボード、X23も日本語キーボード。なので学科の英語キーボードは打ちにくいなぁ…と思っていたのだが、今日久しぶりに家のマシンでコードを書いて愕然とした。

記号の位置、英語キーボードで覚えちゃってるYO!(;´Д`)

よくよく考えれば最近コードを書くのはほとんど学校で、家ではだらだらとネットサーフィンするか、こうして日本語を打つだけだったからなぁ。最近Happy Hackingの日本語版を買ってしまったのだが、こんなことなら英語版買っておけばよかった。

DSC_4131.jpg

▲このようにこの世の終末を思わせる机の上で威力を発揮するHHK。

| | Comments (0) | TrackBack (0)

オセロ演習

いろんなアイディアを非公開にしてこそこそ実装していくよりも、オープンにアイディアをぶつけあって他の人の考えを聞く方が最終的な利益が大きいような気がしてきた。

まわりで実装をはじめる奴がちらほら出てきている中、俺は1行もコードを書いていない…。っていうか課題ためすぎなだけなんだけど。追試とか追レポもあるし…。男らしくブッチといけたら格好イイが、4学期単位4単位分は大きすぎる。どうしましょ。

とりあえず材料となる「リバーシのアルゴリズム」のために書いたコードを持ってきて、開発用のディレクトリを作るとしよう。ボードの再実装と置換表の実装、まずはその辺からかな。

| | Comments (0) | TrackBack (0)

July 08, 2004

また泊まり…

昨夜から今朝にかけてMPIもどきの課題のため徹夜で地下室に引きこもり。なんか最近週に1回は泊まってる気がするな。まあ毎日泊まってる住人みたいな奴もいるから全然おかしくないんだけど。それにしても

なんでこんなにコード量が多いんだ。っていうかなんでこんなでかい課題をこれまで放置してたんだ、俺は。しかも結局完全には終わらなかったしOTL コード量多いっていっても、今の時点で700行強か。指定された残りの機能を実装しても1000行は超えないだろうな。最近老いたのだろうか。コーディング能力が落ちている気がする。

明け方、眠気覚ましにサーバールームに入ってみたらものすごく寒くて一瞬で目が覚めた。冷房が20度にセットされてがんがん動いていた。クラスタっていってるけどラックマウント式じゃなくて普通のタワー型ワークステーションなのね。そのうちがんがん使わせて頂くことにしよう。

午後はおーくらがvsOthaの評価をしていたら、9手を一瞬で読む化け物プログラムということが判明して我々はのたうちまわっていた。作者曰く前向き枝刈りはしていないらしい。どうやったらあんなに速くなるんだ…。っていうか現時点で既にあんなことになっているプログラムにどうやって勝てというのだろう…。

それにしてもvsOthaはあれだけ強いのならもっと日本のオセロコミュニティに知られていてもおかしくないのにな、と思った。

| | Comments (0) | TrackBack (0)

統計とか

強いオセロプログラムを作るためには統計が必要不可欠なのは明らかである。ということに気づいたのは3年前、浪人中の今頃だったと思うが、結局まともに統計を勉強してないな。駒場では統計の授業をとったもののいまいち理解できたとは言い難かったし。

一般論と逆かもしれないが、これに使いたい、という下心を持って勉強すると結果を急ぎすぎてすぐ飽きてしまったり諦めてしまったりするように思える。結局のところ勉強しているときには何に役立つのかさっぱりわからないような事項が後々役立ったりする気がする。

そうそう、統計と直接関連するわけではないけど、Numerical Recipies in Cはやっぱり持っているべきだと思った。こういう本が一冊も手元にないのはちょっと心細い。

| | Comments (0) | TrackBack (0)

July 06, 2004

Windowsのターミナル

LinuxでKDEを使っていて思ったのだが、Windowsに使いやすいターミナルソフトってないのかな。背景が透過とかしちゃうようなやつ。みんなOS標準のコマンドプロンプトの窓で満足しているのかい?コマンドシェルはcmd.exeやcygwinのbashシェルでいいからさ、それを走らせる格好イイウィンドウが欲しい。それともあのコンソールウィンドウってcmd.exeが作成してるんだろうか?

「Windows ターミナル」で検索しても出てくるのはターミナルサーバーの話ばかり。

欲しいものは自分で書けってか?うーん。オセロとかあるしな。

| | Comments (2) | TrackBack (0)

ステラギア1.1

唐突に天文関係の話でも。一応天文部だしな。

アストロアーツからステラギア 1.1アップデータが公開されたようだ。

なんで唐突にこんなソフトの話をしだしたかというと、3月までこのソフトの開発に関わっていたからである。とりあえず修正項目一覧に自分が残したっぽいバグがないと安心するねぇ(笑) 実は俺が気づいてないだけで、俺が作ったバグもこの中に入ってるのかもしれないが。

| | Comments (0) | TrackBack (0)

July 04, 2004

DX 18-70mm

以前書いたAF-S DX 18-70mm F3.5-4.5G(IF)を買った。マップカメラで24-85mm F3.5-4.5を下取りに出して2万円くらいになったので、あと2万円出すだけで買うことができた。あのレンズが2万で売れるとはねぇ。

DSC_4129.jpg

早速D100に装着してみて気づいたのはディストーションのすごさである。ワイド端ではタル型のゆがみが、テレ端では糸巻き型のゆがみがファインダーからでもはっきりわかる(写真は18mm側)。正直うーんと思ってしまうが、まあこの価格のレンズではこんなものだろうか。24-85mmではこんなにひどいディストーションはなかったので、正直ショックである。このレンズでビルを撮影してはいけないということはしっかり覚えておこう。解像度テストはまた後日、晴れた日の遠景を撮影してみたいと思う。

それともこれは17-55mmを買えという啓示か。マップカメラでは品切れしていたのだが。

| | Comments (0) | TrackBack (0)

オセロ大会

ICPCの煮え切らない感を払拭すべくおーくらによってオセロ大会なるものが提案された。要はリバーシプログラムを各人で書いてプログラム同士を対局させようという企画である。かつてはProlog演習の最終課題としてPrologでオセロプログラムを作って対局ということが行われていたらしいが、Lilfesなる謎の言語がPrologを侵食するようになって以来行われていないようである。

Thellの作者である俺は当然のことながら優勝を狙っていくわけだが、かつてThellを破ったvsOthaの作者がなんとうちのクラスにいることが判明。突如オセロ大会は血みどろの争いの様相を呈してきた。もうね、課題とかテストとかやってる場合じゃないですよ。

一応経験者リーグと一般リーグに分けて開催するようなので、未経験者の皆様もぜひ参加しましょう。もちろん未経験者の経験者リーグへの参戦も大いに求む。参考書としてはこのへんがおすすめ(w

よーしこれで長らくバージョンアップが滞っているThellを3年ぶりくらいで大きく更新することができるZO

>pascal氏 その理解でだいたいあってると思います。ぜひ参戦を!

| | Comments (3) | TrackBack (0)

ICPC2004国内予選

というわけでICPCの国内予選に出た。

結果はA,B,Dの3問を解いて、200チーム中24位。15位前後は堅いと思っていただけに正直OTL。さらに3年生で1位になれなくてOTL

しかもなんと、実は問題Cも解けていたのである。この問題は最初から2^nオーダーになることが予想されていた問題だったので、プログラムを実行して実行がなかなか終了しないので「これはハマった」と思ってあれこれ悩みながら制限時間を迎えたのだが、実はその後最適化オプション/O2をつけてコンパイルしたらさらっと終了した罠>OTL

4問解けばかなり上位だっただけに、しばらくチーム3人でOTLしたり意味もなく叫んだりしていたが、まあコンパイルオプションを試すということを思い至らなかったというのも経験不足故のことなのだろう。初出場にしてはよくやったというところだろうか。

と偉そうに書いているけど、実際俺が解いた問題ってないのではないだろうか。おーくらが考えたアルゴリズムのためのサービス関数を2つ書いただけじゃないのか?普段家庭教師をしていてベクトルとか教えまくっているのですんなり書けたのが幸いだった。アルゴリズムはもちろんだけど、実装力もまだまだ足りないな…。何はともあれ、練習も含めてとても楽しかった。使えないチームメイトで正直すまんかった。どうもありがとう>うんの、おーくら

Continue reading "ICPC2004国内予選"

| | Comments (0) | TrackBack (0)

July 01, 2004

IA-32e

64bit Xeonが本当に6月中に出た。すごいぞO倉。さすが業界人。

| | Comments (0) | TrackBack (0)

clip

いつぞや電波を受信して食後30分で書き上げたコード。プログラマともなればコマンドラインでの操作は日常的に行うものであるが、コマンドラインプログラムの出力を別のウィンドウに貼り付けたりしたいときが多々ある。そんなときにいちいちファイルにリダイレクトするのも面倒なので、パイプを通じてクリップボードに直接流し込みたいと考えるわけである。ちょうどこんな感じ。

ls | clip

とりあえずICPCで役立つこともありそうなので晒しage。ちなみにWindowsプログラムです。Xでクリップボードってあるのだろうか。GNOMEとかKDEとか、デスクトップ環境が提供しているのかな?

| | Comments (0) | TrackBack (1)

ICPC迫る

ICPCの国内予選が近づいてきた。うちのチームはここのTeam UFOってやつ。ICPCの練習は競技の練習という意味はもちろんだが、アルゴリズムの練習や復習になるしパズルだと思うとそれなりに楽しい。普段の課題と違ってチームメイトと綿密に協力しながらコーディングしていくという作業も新鮮で楽しい。

うちのチーム、実力的には国内予選を勝ち抜いて愛媛で開催されるアジア大会に進めるだけの能力があると思うのだが、いかんせんこういう事情があってorz を書いてて世界大会で入賞しちゃったりしてる神が今年も出場との事だし…。まあ今年は記念受験ってことで。

そんなわけで、ここ数日は夜~朝は課題、朝~夜はICPCの練習で、寝る時間がないのでありました_| ̄|○

| | Comments (2) | TrackBack (0)

« June 2004 | Main | August 2004 »