2012年03月
2012年03月31日
並行処理デバッグ完!
いやぁ~思ったより長くかかりました。
スタート盤面補正値による直列と並列処理の解が違う原因と対策が出来ました(^^♪
下記コードのTopValueの前にy0.のつけ忘れです。
if (level == 0)
{
for (j = 0; j < 12; j++)
{
if (y.list[y.p][0] == ng[j])
{
if (y.black + y.white < 34)
y.TopValue = -20;
else
y.TopValue = -10;
}
}
Board y0 = new Board(y);
y0.ChangeColor();
y0.Search();
for (j = 0; j < 30; j++)
{
if (y.list[y.p][0] == 0) break;
if (y0.list[j][0] == 0) break;
if (y.list[y.p][0] == y0.list[j][0])
{
if (y.black + y.white < 34)
y.TopValue += 5;
else
y.TopValue += 2;
break;
}
}
}
yメンバーにもTopValueがいるので文法的には問題ないのですが、
この値を使うのは盤面評価関数に渡る所なので、
下記ノードに渡すyのTopValueに代入する必要がありました。
これで、並列処理が同じ解を返す事が出来たのです。
言い訳がましいのですが、C++でTopValueはグローバル変数だったので、
取り扱いが混乱してました。
早速6レベル並行処理の時間を計測しました。
並列処理は打てる場所が多い場面で効果があるので、思考時間は一律に短くはならないのです。
長考する領域では1/4以下に出来たと思われます。
ではレベル8では?、C++の思考時間と比較しました。
C#はざっと見て3倍かかる様です。
コードを眺めてこの差を縮めるのは大変だと思います。
これからの方向性はもう少し時間をかけて決めますが、
今の段階では評価関数をチューンしてより強くする事を目指そうと思います。
今の段階で、6コアのPCを買ってやってみたかった事は完了。
評価関数のチューンがすんだら、いよいよアンドロイドアプリのバージョンアップです。
そうそう、CPU使用率も取ったのでUPします。
今のコードでは並行処理数は最大10なのでこれならちゃんと動いていそうですね。
電気アンカ不良交換が今日佐川急便で送られてきました。
2,000円以下の商品修理は原因だけ解明して新品交換なんですね。。。
今日の雨を予想して予約を明日にしたのは正解でした。
明日は今日より良い天気でラウンドできそうです。
久し振りに達成感のある週末でしたね。。。
よかったよかった。。。
2012年03月30日
3月成績
さすがに3月はおとなしくなりましたね。。。
大きく下げなければよいのですが、そうもいかないかな。。。
■マーケットFX
2月29日 2,472,529円 → 3月30日 2,349,642円 (-122,887円)
今月増減 -122,887円
思ったより下げがきついですね。
もう少し我慢してみます。
80円を下回ったら買ってみようかと。。。危険かな?
■株
2月29日 6,929,245円 → 3月30日 7,209,160円(+279,915円)
今月増減 +279,915円
思った以上に息の長い上げ局面です。
暫く待って買い場を探ります。
配当と優待重視で銘柄選定予定は変わりません。
■投信
中国 2月29日 3,503,093円 → 3月30日 3,389,248円 (-113,845円)
インベ欧州 2月29日 934,924円 → 3月30日 914,893円 (-20,031円)
日経 2月29日 2,645,453円 → 3月30日 2,569,073円 (-76,380円)
今月増減 -210,256円
早くもピークアウトの予感、日本株に比べて日経インデックスがマイナスと言うのは???
一応権利落ちの期末なのでこんなものなのかも知れません。
■合計
2月比 -53,228円
■リスク資産合計
20,000,000円 → 3月30日 16,435,016円 (-3,567,984円)
まずは資産まとめで一息つきます。
オセロで進捗があれば続きます。。。
2012年03月29日
誕生日
会社を休む口実になってくれるので(上司がわかってくれる訳ではないのですが)、
ちょっぴりは嬉しいですね。
そんな自分勝手な休日を香嵐渓のカタクリ撮影につかいました。
12mmで撮影した群生ですが、1輪白い花が写っています。
今年の花はちょっと痛んでいました。
蕾が出来てから寒い日が続いたからの様です。
撮影から帰って、練習して、近所にオープンしたMaxValueに行って、
部屋の掃除の後、土曜日のラウンド予約を日曜日に変更までできた有意義なお休でした。
ただ、オセロ検討は進まないですね。
スタート盤面の補正が、解に差が出来る原因は確定。
補正は、相手が打てる所であれば+10点の部分まで特定できました。
また、並行処理の正解は10局面に分けた10局面目にある事、
そこの評価値が-5(不正解時)で、正解は+5である事まで検討は進みました。
最後のなので、そこに何かあるのではと見ています。
ただ、今日はここまでにしました。
4月からの株為替が心配です。。。
2012年03月28日
並行処理までもう一歩だった
直列処理(現状)の解と一致しました。
原因は手を10局面に分割した時、その前のリストの消し残しが悪さをしてました。
直列処理ではリストに「0」が着たらブレークでしたが、
手を配分すると10手でブレークするはずなのに、12手目に消し残しがあると、
分割した3手目の最後のリストにそれがエントリされていたのです。
やったーと、喜んで補正を入れて計算すると、別の解になっちゃいました。
現状盤面の補正検討が必要です。
明日の課題ですね。
ただ、明日は送別会(期末だからね)があるので、検討難しいかな。。。。
写真在庫もなくなったので調度よい休刊日になりそうです。
木曜日は会社をお休みにして(誕生日だからね)、親孝行も兼ねたカタクリ撮影に行く予定です。
2012年03月27日
なぜ解が違うのか・・・
1)depthメンバー変数コピー忘れ。
前回の変更でMinMaxとαβの引数をメンバー変数にしました。
CopyBoard関数でこのdepthコピーを忘れてました。。。
前処理をしなくても解が違っていたので、検討した結果判明しました。
2)補正評価値TopValue?
1)の対策後、5手ほど確認して喜んでいたのですが、10手ほどで解の不一致が。。。
最初の盤面で打ち手による補正値の差?
選択した打ち手が相手も打てる場所であれば、その打ち手から派生した評価値に+の補正を加える。
この補正を切ると、平行処理前処理をした場合と現状の選択手で不一致が発生する局面を遅く出来る。
補正値OFF/ONで差はあるが問題が解決した訳でないので「?」付き。
3)不知の原因
2)で解決と思ったのですが、終了まで確認してみると。。。解の不一致がぁ~
と言うことで、検討は明日も続きます。
写真在庫が後一枚で終了です。。。
明後日からは、スマホの写真(飲み会で撮影)になっちゃうかも。。。。
木曜日はカタクリ撮影予定なのでその後1週間は持ちそうなんですが。。。