2006.05.20 Sat
# [音楽] music storeでぽちっとな
[エレクトロニック-Today'sトップソング]から。iPodのCM曲。アルバム買い。
ばりばりロックかと思いきや、Captain Funkみたいな感じ。
NHKの番組エンディングから。一曲のみ。
泥臭くて暑苦しいほどに前向きな感じは、やっぱり好き。アルバム買いすべきだったかなと、今は反省している。
あと、Amazonへのあさましリンク作成中"ええねん"検索で出てきた
「奈良の奥さん、気持ちええねん 声もでるでる鹿もでる」
ってのが少し気になった。
[エレクトロニック-Today'sトップソング]から。アルバム買い。
どこかで聞いた声だなぁと思い、過去アルバムをちまちま確認。2年くらい前の深夜番組エンディングでかかってた"東京喫茶"を買おうかどうか迷ったのを思い出した。
ピコピコ感Up、かわいらしさは控えめになったような気がする。
# Amazon, Music Store で買えない物
iPodのCM曲を買って思い出したCM。ソニーのちびロボットQRIOが博物館みたいなところでいろんなものに興味津々、というもの。そのCMで使われていたdreamlab「love to love you」を2年前探したけど売ってなくて買えなかった。で、今日あらためてAmazon、iTune Music Storeで探したけどなかった。Amazonで買えないCDってあるんだねぇ。
http://www.dreamlabmusic.com/
(*1)
追記(2006-06-12): ニョロbwmcさん、情報Thx。
(*1)は閉鎖されたっぽい。
dreamlabのMySpaceで聴けます。
参考レビューはニョロbwmcさんところでどうぞ。
2010.05.20 Thu
# 「リバーシのアルゴリズム」をRubyで その4
前回のつづき。第3章「探索アルゴリズム」。
# -*- coding: sjis -*-
class AI
def move(board)
end
# 事前探索の先読み手数
PRESEARCH_DEPTH = 3
# 序盤・中盤の先読み手数
NORMAL_DEPTH = 15
# 必勝読みを始める残り手数
WLD_DEPTH = 15
# 完全読みを始める残り手数
PERFECT_DEPTH = 13
end
require 'point'
require 'disc'
require 'board'
class AlphaBetaAI < AI
MAX_VALUE = 2 ** 30 - 1
MIN_VALUE = -(2 ** 30)
class Move < Point
attr_reader :e
def initialize(x = 0, y = 0, e = 0)
super(x, y)
@e = e
end
end
def move(board)
movables = board.get_movable_pos
if movables.empty?
#打てる箇所がなければパスする
board.pass
return
end
if movables.size == 1
#打てる箇所が一つだけなら探索せず、即座に打って返る
board.move(movables[0])
return
end
# 事前に手をよさそうな順にソート
sort(board, movables, PRESEARCH_DEPTH)
if Board::MAX_TURNS - board.get_turns <= WLD_DEPTH
limit = MAX_VALUE
else
limit = NORMAL_DEPTH
end
eval_max = MIN_VALUE
for i in 0...movables.size
board.move(movables[i])
eval_tmp = -alphabeta(board, limit - 1, -MAX_VALUE, -MIN_VALUE)
board.undo
if eval_tmp > eval_max
eval_max = eval_tmp
point = movables[i]
end
end
board.move(point)
end
def alphabeta(board, limit, alpha, beta)
if board.is_gameover or limit == 0
return evaluate(board)
end
pos = board.get_movable_pos
if pos.size == 0
#パス
board.pass
eval_tmp = -alphabeta(board, limit, -beta, -alpha)
board.undo
return eval_tmp
end
for i in 0...pos.size
board.move(pos[i])
eval_tmp = -alphabeta(board, limit - 1, -beta, -alpha)
board.undo
alpha = [alpha, eval_tmp].max
if alpha >= beta
#beta刈り
return alpha
end
end
return alpha
end
def sort(board, movables, limit)
moves = []
for i in 0...movables.size
point = movables[i]
board.move(point)
eval_tmp = -alphabeta(board, limit - 1, MIN_VALUE, MAX_VALUE)
board.undo
move = Move.new(point.x, point.y, eval_tmp)
moves.push(move)
end
#評価tの大きい順にソート
moves_sorted = moves.sort do |a, b|
b.e <=> a.e
end
movables.clear
moves_sorted.each do |move|
movables << move
end
return
end
def evaluate(board)
# 評価関数は4章で実装
return 0
end
end
序盤・中盤の先読み手数15は、いろいろいじらないと無理っぽい予感。
+ ニョロbwmc [オーストラリアからカリフォルニアに移って活動していたDREAMLABの6曲入りCDは、現在オレゴンのCDBABYのみ..]
+ Tongpoo [ニョロbwmcさん、情報ありがとう。あのサイト見れなくなっていたのですね。結構凝っていて好きだったのに残念。]