« 2005年12月 | メイン | 2006年02月 »

一段落?

とりあえず一段落。

ニューラルネットの学習効率がやたら悪かったので
1P側の手を GGGCCCPPPES に固定して学習させてみる。

……一向に学習しない。というわけで相手の出したカードをチェックする部分にブレークポイントを仕掛けてデバッグ。

…案の定、敵のカードと味方のカードを取り違えてました。
ゲームマスター側が。

そこを修正したら2回目ぐらいには必勝になった。
かなり緩い誤差条件にしててもこれだ。500回走らせても何の意味もない。

というわけで300回実行、3回の平均で勝率計算、グラフではさらに5点移動平均も。


そんな条件下でいろいろとデータを取ってみた。
一部を除いて、ほぼ期待通りのデータがとれたので満足。
少なくとも予稿の紙面を埋めるだけのデータは確保できた。

これで気兼ねなくコンプエースのスキャン作業ができるってもんだ(何

投稿者 Zawa : 14:45 | コメント (0) | トラックバック (0)

俺用メモ: ToDo

卒研プログラムのToDo

・学習部分の理想出力をセットする処理
・ できればforネストで片付ける
・そこから先の学習処理

・非学習ニューラルネットの勝率がおかしいのでチェック
・した上で平均値グラフの準備

投稿者 Zawa : 01:54 | コメント (1) | トラックバック (0)

俺用エンコードフロントエンド

楽をするための努力は惜しまない。ってわけでもないけど。

M2Pファイル→DVD2AVIでd2v→VirtualDubModでCMカット→エンコード って流れをまとめたフロントエンドを作成。
060121.jpg

DVD2AVIやらVirtualDubやらをコマンドラインでいじれればもっと自動化できるんですが、前者はどうもできそうにないし、
そこまでやるとフロントエンド作成の労力の方が上回りそうなのでやめ。

ついでにバイナリとソースも置いてみる。
ZawaEncodeFE_v001a.zip
当然のごとく自己責任で。内容に関して一切の責任を負いませんので。
まぁ誰もつかわんだろこんなの。

投稿者 Zawa : 19:39 | コメント (0) | トラックバック (0)

俺用メモ: NUnit

テストファーストのサポートツール NUnit
NUnit入門 Test Firstのススメ [NUnit 2.0対応版]

あとでやってみよう。
(=しばらくやらない)

投稿者 Zawa : 10:33 | コメント (0) | トラックバック (0)

地道に小規模リファクタリング

あんまりまともに設計作業をしないで組み始めた卒研プログラム。
一応ゲームマスター部分とプレイヤー部分などのモジュール間結合度はできるだけ弱くなるように作ったりましましたが、それでもいろいろとアラがあったので授業中の暇つぶしもかねてちょくちょくリファクタリング。

なかでも、一番面倒だったプレイヤー種類の変更をGUIでできるように変更。あとウェイトの設定も。これで実験値を採る作業が少しは楽になるかな?
今のSSがこんな感じですが:

060117.jpg

TCP/IPでの通信対戦をやってみたくなってきた。
その前にニューラルネット組み込んだプレイヤー作らないと話にならないんですがね。


んで、そのための実験結果を集計するためにやっつけプログラムを作ったりも。
今まではExcelで集計してたけど、研究室の1024x768×2のデュアルモニタ環境ならまだしも、1024x768一枚のノートマシンでは作業効率が悪い。おまけにメモリ容量もきついし。

というわけでC#で数分で書き上げたプログラムですが、明らかに効率はアップ。
どうせ中途数値は後で使ったりしないし、xlsファイルに残す必要もないなと。

それにしても、こういうGUIでやっつけなツールをさくっと作れるC#万歳。

投稿者 Zawa : 23:50 | コメント (0) | トラックバック (0)

卒研ぐにゃぁ

gunya.jpg
デバッグ作業中に起こった「ぐにゃぁ」

1Pは俺が適当に操作、2Pは乱数決定なんで起こるっちゃ起こるんですが、
福本スキーとしては、やっぱりぐにゃぁなビジョンが浮かぶわけですよ。


それだけ書いてもアレなんで、メモ書きチラシの裏。

今のところのユーザ周りクラス:

Player
|
+ UserPlayer
|
L PureRndPlayer

・今までUserPlayerレベルでインスタンシエーションしてたものを
 Playerレベルまで引き下げ。これで抽象化が簡単になった。
・っていうか、最初からそうするべきだったんだが。
・おかげで、Playerクラスにちょいと不自然なクラスができちゃったり。
public virtual object OnExternalCommand(object command)
 なんか落ち着かないなぁ。

・とりあえず、ニューラルネットの実装ははやめにやりたいところ
・そのために何を入力として使うかを検討する必要あり。

追記。
乱数プレイヤーvs乱数プレイヤーで試しにシミュレーションしてみた。
メルセンヌ・ツイスタ乱数使ってるんで、一応理想的なものに近いとは思うが。
各パターンについて100サンプルを計測、集計してグラフ化。

LtdJknPls_Star.jpg

InitStar: ☆の初期所有数
OnSlave: 奴隷vs皇帝の際、星をやりとりする量
平和試合数: 両者とも☆が0にならなかった試合の数(計測値)

平和試合数が増えると☆がなくなる危機感がなくなるのでこれは抑えたい。
かといって少なすぎると即死しすぎて面白くなくなるのでこの辺の調整が必要か。
とりあえず星の初期所有数=4、奴隷皇帝間も4でやってみようか。
最初の3ターンで奴隷-皇帝が起こるとほぼ即死になるのでこれはこれで面白いかね。

さて、次はもう少し賢い乱数をやってみようか?
NGワーオ:ニューラルネットはどこへ行った

投稿者 Zawa : 11:48 | コメント (0) | トラックバック (0)

AviSynthでアカギをエンコ

普段はAviUtilでエンコしていたモノを、試しにavisynthでやってみた。

スクリプトは適当に使い回せるように、共通部分だけ切り出して
名前だけ別ファイルで設定するようにしてみた。


どこか適当なディレクトリ
└─common
  commonAnime.avs アニメ用共通設定

作業ディレクトリ
└─akagi060111
  encode.avs avisynthスクリプト
  source.d2v source.m2pからDVD2AVIで作成したプロジェクト
  source.m2p 録画したもの(音声:MPEG2)
  source.mpa source.m2pからDVD2AVIで作成したMPA音声ファイル
  source.vcf source.m2pをVirtualDubModで開き、CMカットを行い作成したファイル


-=-=-=-=-=- commonAnime.avs -=-=-=-=-=-

# AviSynth 設定ファイル アニメ自動24fps用
# ※EncodeName にエンコするモノの名前を設定してからImportすること

# ディレクトリ・パス設定
# # プラグインのあるディレクトリ
PluginDir = "S:\tools\AviSynth208\plugins\"
# # ソース置き場
SourceDir = "R:\work\AviSynth\" + EncodeName + "\"
# # d2vファイルへのパス(SourceDir\source.d2v固定)
D2VPath = SourceDir + "source.d2v"
# # mpaファイルへのパス(SourceDir\source.mpa固定)
MPAPath = SourceDir + "source.mpa"
# # VCFファイルへのパス(SourceDir\source.cvf固定)
VCFPath = SourceDir + "source.vcf"

#--- ソース読み込み ---
LoadPlugin( PluginDir + "MPEG2DEC.dll" )
LoadPlugin( PluginDir + "mpasource.dll" )
MPEG2Source( D2VPath ) #DVD2AVI + MPEG2DEC
AudioDub( last, MPASource( MPAPath ) )


# CM編集
LoadPlugin( PluginDir + "AddRange.dll" )
AddRange( VCFPath )


# インターレース解除等
LoadPlugin( PluginDir + "De.dll" )
LoadPlugin( PluginDir + "LoadPluginEx.dll" )
LoadPlugin( PluginDir + "WarpSharp.dll" )
LoadPlugin( PluginDir + "Decomb.dll" )
LoadPlugin( PluginDir + "AntiComb.dll" )

# フィールドオーダー指定
AssumeFrameBased().ComplementParity() #トップ優先 ボトムはAssumeFrameBased()

#--- ドット妨害低減 ---
DeDot(10,40,100,5) #(luma2d,lumaT,chromaT1,chromaT2)

#--- 24fps化 ---
FrameCache(9).Auto24FPS(false,24,16,"blend",false) #WarpSharp.dll(間引き,閾値,範囲,mode)
Decimate(mode=2,cycle=5) #フレーム削除(Decomb)
AntiComb() #解除残し解除

# フィルタ
LoadPlugin( PluginDir + "Convolution3D.dll" )
LoadPlugin( PluginDir + "_2DCleanYUY2.dll" )
Convolution3d(1,12,22,8,8,2.8,0) #(0/1,2D-輝度,色差,T-輝度,色差,影響,debug)
_2DCleanYUY2(0,2,2,2,0,4,4) #(interlace,Y,範囲X,範囲Y,dmode,U,V)


# クリッピング・リサイズ
LoadPlugin( PluginDir + "lanczos3.vdf" )
crop(8,2,704,478) #(左,上,720-(左+右),480-(上+下))
Lanczos3Resize(640,480)


-=-=-=-=-=- encode.avs -=-=-=-=-=-
EncodeName = "akagi060111"

Import("S:\tools\AviSynth208\common\commonAnime.avs")


つまり、ソースはsource.xxxと決めうちして、
なおかつ 出力先ベース\EncodeName\ にあるものと決めちゃうことに。
実際にエンコード作業をするときは、

1) SourceDir に EncodeNameを名前とするディレクトリを作成( r:\Work\AviSynth\akagi060111 )
2) 出力先ディレクトリ(SourceDir\EncodeName\) に、録画したファイル(source.m2p)をコピー
3) そこでDVD2AVIプロジェクトを作成。 source.m2p->source.d2v,source *.mpa
4) 音声ファイルのファイル名にかかれたディレイ情報を確認してから、source.mpaにリネーム
5) VirtualDubModでsource.m2pを開き、CMカットを行い処理情報を保存。source.vcf
6) VirtualDubModでencode.avsを開き、CMカットが反映されているか確認。
7) 映像、ストリームの圧縮を設定。名前を付けて保存。
8) エンコード開始

といったステップ。


AviUtilの時は、インターレース解除2 / Wavelet3DNR / WaveletNR Type-G のフィルタで自動24fps出力でやってたんですが、
m2pファイルから直接CMカットして出力。優先度Lowerで、
30分アニメで約5時間。パッと見でのエンコード速度は2〜3fps程度。
まぁ寝てる間にちょうど終わるくらいでしたが、
上のスクリプトだと、 インターレース解除 / Convolution3D / _2DCleanYUY2 の自動24fpsで
優先度Lowerで約2時間半、パッと見で5〜6fps近く出てました。
DivXの出力設定はどちらも同じQB95%でしたが、さっと見たところほとんど違いは見られませんでした。
まぁアニメがアニメなんで、変化の激しい場面とかで比べてないのでわかりませんが、それでも2倍近く早いってのは驚き。
難点としては、VirtualDubModの編集がAviUtilのそれよりやりにくいってのと、DVD2AVIで映像と音声を切り分けなきゃいけないってことぐらいですかね。

とりあえず、今夜のローゼンでも試してみて、フィルタの組み合わせとかいろいろいじってみようかと。

投稿者 Zawa : 09:45 | コメント (0) | トラックバック (0)

続・USBあったか手袋&スリッパ

USBあったか手袋ですが、左手指先のフード?をかぶせると
何かに当たって痛かったので、さくっと裏返して糸を切って覗いてみました。
usbhand_tape1.jpg
どうも端子の処理が甘いようで心線がはみ出てました。
こいつが指に刺さってたようです。というわけで
usbhand_tape2.jpg
その辺にあったビニールテープを上から貼り付けて終わり。
縫い直そうと思いましたが、ユニットがはずれるようなこともなさそうなので放置。

うむ、これで快適な引きこもり生活にまた一歩近づいたと。だめじゃん。

投稿者 Zawa : 17:58 | コメント (0) | トラックバック (0)

USBあったか手袋&スリッパ

アレな商品が多い、サンコーレアモノショップで買っちゃいました。
USBあったか手袋USBあったかスリッパ
詳しいことはリンク先を見てもらうとして、早速使ってみました。

01.jpg
上がスリッパ、下が手袋。手袋は味気ない白箱に入ってます。


02.jpg
手袋の箱の中身。両手セットなので1個ずつ入ってます。
やる気のない説明書と手袋1組、USBケーブル(スイッチ付き)×2。
強-切-弱 の切り替えができるケーブルです。


03.jpg
指先まで覆う場合はこんな感じ。指先部分にもヒーターがついてます。
さすがに指先を覆うとキー打ちにくいですよ。今この文章をその状態で打ってますが
人差し指タイピングになります(;´Д`)でも超ぬくいですよ。
マウス操作は一応できます。サイト眺めたり動画見るときにはいいかも。


04.jpg
指ぬきモード。親指は途中に開いてる穴から指を出すだけですが。
この場合、指先にあったヒーターは手の甲の位置に来ますが、
もともとその部分にはあらかじめヒーターがきてるので
ヒーターが二重に来ることになります。効率悪そう?

でも、タイピングやマウス操作には支障なし。
親指出せば5ボタンマウスのサイドボタン操作もOK。
甲が暖かくなるのでなんか微妙ですけどね。


05.jpg
続いてUSBあったかスリッパ。
折りたたんで箱の中に入ってました。
ちなみにこちらはヒーターユニットから直接USBケーブルがのびてるだけで、
途中のスイッチとかがありません。抜き差ししろってのかね。
ケーブル長は1.3メートルあるんで手元のハブまで引っ張りゃいいんですが。
いいやつけっぱなしで、とか思いますがね。


06.jpg
手前にあるチャックを開けるとヒーターユニットが取り出せます。
黒い奴がそれ。ヒーターをはずして洗濯できるようです。
まぁ必須でしょう。

ちなみに、このスリッパの内部構造はこんな感じ:


  ↑奥
┏━━━━┓
┃    ┃
┃    ┃
┃  ┃  ┃
┃__┃__┃
┃    ┃
┗━━━━┛

つま先同士は触れます。途中まで仕切りがついてる感じ。
なんとも中途半端です(;´Д`)

ちょいと大きめなんで、「超ぬくい!」って訳じゃないですが
ふかふかスリッパよりは暖かいようです。まぁいいか。


07.jpg
実際に使うとこんな感じ。
あごにデジカメ挟んで強引にとったんでちと変ですが。
見かけは大変よくないですが、暖かさはなかなかのものです。

今回接続したのは、安売りしてたセルフパワーのUSB2.0ハブです。
バスパワーの(=ACアダプタ繋がないタイプ)ハブだときつい気がします。

あと、手袋の毛糸がちくちくするのが気になります(´・ω・`)
ヒーター外せないから洗濯できないし…これは我慢かな?


両手手袋とスリッパでこの値段でした。
================================================================
品番/品名 税込単価 数量 小計
================================================================
USGLOV10 2,980円 1 2,980円
USBあったか手袋 両手セット
-------------------------------- --------- --------- -----------
USSLIP01 3,980円 1 3,980円
USBあったかスリッパ
================================================================
商品合計 6,960円
(内 税) (331円)
================================================================
送料(税込) 500円
================================================================
合計額 7,460円
================================================================
想定外のお年玉で買ったので、まぁ有効利用できたかな?と。
とりあえずしばらく使ってみることにしますですよー

投稿者 Zawa : 14:38 | コメント (0) | トラックバック (0)