2012年8月30日木曜日
2012年8月29日水曜日
2012年8月27日月曜日
2012年8月26日日曜日
2012年8月23日木曜日
2012年8月22日水曜日
2012年8月21日火曜日
2012年8月20日月曜日
2012年8月19日日曜日
時刻:
10:18:00

夢:会社に行きたくなくてサボることにした。電車で愛知の徳島に向かう。徳島駅というのはなくて、総合何とかレジャー駅という名前らしい。さすが辺境の地にあってなかなか着かない。昼までに着かないと忍者屋敷のチケットが取れないのだが、と思いながら居眠りする。目が覚めると余市駅を発車したところだった。路線図を確認すると、徳島の2つ先らしい。時刻は迫っている。もどかしく焦り出すがどうにもならない。徳島から先は単線になっていて、スレ違いのたびに時間がかかる。ようやく徳島に戻るとチケットは売り切れ、しかも雨。売店で傘を買って駅舎の中に戻る。傘をさしたまま構内をウロウロし、栗おこわを買って帰った。
時刻:
0:17:00

そんで、これがコード。ほとんど 1-pass で書いたので(略)。肝心のグラフ出力部を作っていないけど、座標とリンクは取れるからどうとでも。アルゴリズムは簡単で、リンクを二次元行列で表現する。点 i,j に対して距離は d_{i,j} = d{j,i}, d_{i,i} = 0 だからリンク行列は対角要素が 0 の対称行列になる。この行列に i 番目の要素以外が 0 の縦ベクトル (0, ... , 0, 1, 0, ..., 0) を右からかけると点 i に関するリンクベクトルが得られる。
#!/usr/bin/python
# coding: UTF-8
from numpy import *
import random
import math
import sys
DIM = 10
K = 1.0
SCALE = DIM * K
DISP_SCALE = K
BETA = 10.0
class GeoUtil:
@classmethod
def getDist(cls, x1, y1, x2, y2):
return math.sqrt((x1-x2)**2 + (y1-y2)**2)
@classmethod
def getTrialDisplacement(cls):
return random.uniform(-DISP_SCALE, DISP_SCALE), random.uniform(-DISP_SCALE, DISP_SCALE)
class Points:
def __init__(self):
self.linkMtrx = self.initLink()
self.pts = [Point() for x in range(DIM)]
def initLink(self):
rndMin, rndMax = 0, 10
mtrx = zeros((DIM, DIM))
for l in range(DIM):
for c in range(l):
mtrx[l,c] = mtrx[c,l] = random.randint(rndMin, rndMax)
return mtrx
def getDist(self, i, j):
(xi, yi) = self.pts[i].getCoord()
(xj, yj) = self.pts[j].getCoord()
return GeoUtil.getDist(xi, yi, xj, yj)
def getDistMtrx(self):
mtrx = zeros((DIM, DIM))
for l in range(DIM):
for c in range(l):
mtrx[l,c] = mtrx[c,l] = self.getDist(l,c)
return mtrx
def getDisplacementMtrx(self):
return self.linkMtrx - self.getDistMtrx()
def getTotalEnergy(self):
energy = 0.0
for i in range(DIM):
energy += self.getLocalEnergy(i)
return energy
def getLocalEnergy(self, i):
Dmtrx = self.getDisplacementMtrx()
localEnergy = 0.0
Dlist = dot(Dmtrx, probeVec(i))
for d in Dlist:
localEnergy += d**2
return localEnergy
def tryMoving(self, i):
oldLocalE = self.getLocalEnergy(i)
self.pts[i].updateCoord()
newLocalE = self.getLocalEnergy(i)
dE = oldLocalE - newLocalE
if dE < 0:
if random.uniform(0,1) > math.exp(-BETA * math.fabs(dE)):
self.pts[i].revertCoord()
def updateSystem(self):
for i in range(DIM):
self.tryMoving(i)
return self.getTotalEnergy()
class Point:
s_num = -1
num = 0
def __init__(self):
Point.s_num += 1
self.num = Point.s_num
self.x, self.y = random.random()*SCALE, random.random()*SCALE
def getCoord(self):
return self.x, self.y
def setCoord(self, x, y):
self.x, self.y = x, y
def updateCoord(self):
self.oldX, self.oldY = self.getCoord()
dx, dy = GeoUtil.getTrialDisplacement()
self.setCoord(self.oldX + dx, self.oldY + dy)
def revertCoord(self):
self.setCoord(self.oldX, self.oldY)
def getLinkedPoints(self, mtrx):
return dot(mtrx, probeVec(self.num))
def probeVec(index):
vec = zeros((DIM))
vec[index] = 1
return vec
def main():
pts = Points()
for i in range(501):
e = pts.updateSystem()/(DIM**2)
if i % 5 == 0:
print i, e
if __name__ == '__main__':
argvs = sys.argv
argc = len(argvs)
if argc != 2:
print 'Usage: # python %s num' % argvs[0]
quit()
DIM = int(argvs[1])
main()
~
2012年8月18日土曜日
2012年8月17日金曜日
2012年8月16日木曜日
2012年8月14日火曜日
2012年8月13日月曜日
時刻:
22:12:00

省略されているのと目的語が不明確なのとで題意を正確に把握できない。あと用語が一般的でないような。24 時間経ったようなのでもはや用済みと思うが:
「k 次元ユークリッド空間 S 上で N 点の座標が与えられており、これを平面 S' に射影する。S 上の点 i, j 間の距離を d_{i,j}、 S' 上の距離を d'_{i,j} と書くとき、\sum_{i\neq j} |d_{i,j} - d'_{i,j}| を最小とする平面 S' を定めよ」あたりでどうか。「N個の頂点が与えられている」を「座標は与えてねーよ」と読むと少し面倒になる。射影じゃなくなって「写す」になるのか。
座標が既知の場合:重心を原点に選んで内積を計算するんじゃねーの?
座標が未知の場合:you, モンテカルロしちゃいなyo!
モンテカルロなら普通は自乗距離にして、あとは並進運動量を気にしないために周期境界条件を課すかな。自然長 d_{i,j} のバネで繋がれた質点系の分布ですね。
「k 次元ユークリッド空間 S 上で N 点の座標が与えられており、これを平面 S' に射影する。S 上の点 i, j 間の距離を d_{i,j}、 S' 上の距離を d'_{i,j} と書くとき、\sum_{i\neq j} |d_{i,j} - d'_{i,j}| を最小とする平面 S' を定めよ」あたりでどうか。「N個の頂点が与えられている」を「座標は与えてねーよ」と読むと少し面倒になる。射影じゃなくなって「写す」になるのか。
座標が既知の場合:重心を原点に選んで内積を計算するんじゃねーの?
座標が未知の場合:you, モンテカルロしちゃいなyo!
モンテカルロなら普通は自乗距離にして、あとは並進運動量を気にしないために周期境界条件を課すかな。自然長 d_{i,j} のバネで繋がれた質点系の分布ですね。
2012年8月12日日曜日
2012年8月11日土曜日
時刻:
0:52:00

会社では Win/Linux、家では Win/Linux/iPad、ブラウザは Opera/Chrome/Safari、常用の gmail アカウントは 4 つほど、というわけでブックマークは記憶だよりだったのだがアンテナを登録してみた。今更。http://a.hatena.ne.jp/awayama_hajime/
2012年8月10日金曜日
2012年8月6日月曜日
時刻:
22:14:00

人が「そんなことに金を使うな」と言った時、どのような心理的機構が働いているのか。加速器とか生活保護とか、何でもいいんだけれど。多分それに対して「私の何かが損なわれている」という実感があるのだろう。それがなければ、それを実現するための税金を払わなければ、私はもう少し手元に小銭を握っていられた、という。でも「損なわれている」という実感がすでにフィクションだよな。架空の富める自分を設定して、架空の欠如を見出して、現実の自分を損なわれたそれと認識するというのは随分貧しい考え方だ。
あるいは、それを非難することで何かが贖われるのかもしれない。科学や数学に挫折したその自尊心や、薄給を手にするために費やした時間や苦労が。私は間違っていない、彼らは間違っているという錯覚を通して。
あるいは、それを非難することで何かが贖われるのかもしれない。科学や数学に挫折したその自尊心や、薄給を手にするために費やした時間や苦労が。私は間違っていない、彼らは間違っているという錯覚を通して。
2012年8月5日日曜日
時刻:
22:24:00

昨日: 午前中はラブやんを読んで過ごす。昼は Asian Taipei でバイキング。食べ過ぎ。小雨に濡れながら本屋経由で喫茶店。ラブやんの続き。お腹が空かないので夕飯は無しでビーフジャーキーとビール。暑かったので久々にスーパードライを買ってみた。あとクラシックラガー。
今日: 午前中はラブやん再読とアオイホノオ。米粉パンとポテトサラダと牛乳。午後は洗濯。その後プール。夏休みなのに公園に子供がいない。塾に行っているのかクーラーの効いた部屋でテレビゲームなのか。プールは普段より人が多いが込んでいるという程でも無し。公園内をぶらぶら歩いてから帰宅。ピサの斜塔がいよいよ崩壊間近であるが片付けはしない。夕飯: カボチャのそぼろ煮、ポテトサラダカレー風味、がんもどきと人参の煮付け、卵とエノキダケのスープ、高菜チャーハン。最初の三品は残り物。
今日: 午前中はラブやん再読とアオイホノオ。米粉パンとポテトサラダと牛乳。午後は洗濯。その後プール。夏休みなのに公園に子供がいない。塾に行っているのかクーラーの効いた部屋でテレビゲームなのか。プールは普段より人が多いが込んでいるという程でも無し。公園内をぶらぶら歩いてから帰宅。ピサの斜塔がいよいよ崩壊間近であるが片付けはしない。夕飯: カボチャのそぼろ煮、ポテトサラダカレー風味、がんもどきと人参の煮付け、卵とエノキダケのスープ、高菜チャーハン。最初の三品は残り物。
2012年8月3日金曜日
2012年8月2日木曜日
登録:
投稿 (Atom)