2009-06-20
*1245454540*需要と供給
この研究はもっと評価されるべき!
*1245466286*TAGBOAT SUMMER AWARD 2009に来ています
Twitterから転載:
何を持っていけばいいか正直初めてのグループ展なのでわからないから、とりあえず何でもかんでもかばんに入れているナウ
about 2 hours ago from web
ずっと作品のそばにいるべきものなのかどうかもよくわかっていない。でもとりあえず僕の作品は解説があるのとないのとで雲泥の差なのと、大部分の人はポートフォリオを見てくれないだろうってので作品の脇に貼る解説は作っておいた。行きにコンビニで印刷して画鋲を買う
about 2 hours ago from web
kaorun @nishio 逆に人がいると近づいてじっくり見にくい、って人もいるので、べったり貼りついてるより時々ふらふら出かけてるのもよいと思いますよ。真剣に興味があったら、人が来るまでそこにとどまってたりしますし。
@kaorun そうですよねー。常時いるとなんか宝石ショップの店員みたいで怖いですよね。
そう考えるとやっぱり作品と同じデザインのTシャツを作って着るべきだったか…
tokoroten @nishio ライフゲームTシャツきてったら?
@tokoroten ライフゲームTシャツでは同一性判定に失敗するだろw ライフゲーム知っている人じゃないとライフゲームであることすらわからない
@tokoroten ちなみに今日のTシャツは漂白剤で部分的に漂白した黒Tシャツである。
会場にてとりあえず解説文章の掲示と、机を作ってポートフォリオを開いた状態で置いておくのをやった。だって少なくとも僕個人としては椅子の上に置かれた閉じた冊子は手に取って開くのがためらわれるもの。
で、貼り付いている人少なかったのでとりあえず外に出てきてブログを書いているナウ。書き終わったら下に戻る。
hr
ふー、せっかくなのでポートフォリオを見てくれていた人に声をかけた。知らない人と話すのは心理的に大変だ。知らない人が800人くらいいるのは平気なんだが1人だとつらい。なぜだ。
hr
やっぱり何度見てもサンショウウオの存在感は圧倒的だ。僕の作品には存在感がない。「数学という神をあがめる宗教画」なのであれば圧倒的な存在感や畏怖もあってしかるべきだが今の作品にはそういう力がない。うーむ。改善すべきだがどうするかなぁ。
*1245472471*量子化ノイズ
一件うまく描けているように見えるこれ:
この辺りがダメですね。
直した:
あれ、途中から太くなるのは量子化ノイズとは別の要因なんだ?ふーむ。
before/after
並べてみるといかに最初の図がガタガタだったかわかる。
*1245496485*新しい七分割
帰りの電車でひらめいてしまった。点対称!
しかし12個の頂点を美しく配置する必要があり、人力でできる気がしないのでコードを書く。辺の長さが最少になるようにしたいので二次関数の最適化問題だから共役勾配法を使うべきだな。うん。
めんどくさいので遺伝的アルゴリズムで書いた(ぉ
まずこれが辺の長さを最小化すべきグラフ、固定点が座標、移動点が添字でかいてある。
|python|
edges = [
(0, (1, 0)),
(0, (1, 0)),
(0, 1),
(1, (2, 0)),
(1, 3),
(2, (3, 0)),
(2, (4, 1)),
(2, 4),
(3, 4),
(3, 5),
(4, (2, 2)),
(5, (0, 2)),
(5, (0, 3)),
]
||
距離を求める関数を作る
|python|
from math import sqrt
def calc_dist(xs):
ret = 0.0
for (v1, v2) in edges:
if isinstance(v2, tuple): # v2 fixed
x2 = v2
else:
ret += sqrt((x10 - x20) ** 2 + (x11 - x21) ** 2) return ret
||
突然変異をさせる関数とランダムな初期値を作る
|python|
from random import gauss, random
def mutate(xs):
ret = []
for i in range(6):
ret.append(
(xsi0 + gauss(0, 1), xsi1 + gauss(0, 1))) return ret
||
あとはコンピュータがひたすら頑張るだけ。
|python|
for i in range(1000):
children = [mutate(cur01) for i in range(1000)] cur.extend((calc_dist(xs), xs) for xs in children)
cur.sort()
print cur
||
実行すると
[(10.066974460981866, (1.0093958273824633, -0.10241337817317504), (1.67596128193252, -0.088355447743802051), (3.2439881038316933, 1.0639891791625744), (2.1424292236222975, 0.594492140279546), (2.3347757185495399, 1.4530289576181918), (0.010060747437447629, 2.2030633802780248))] あたりで収束した。突然変異の大きさを抑えてここから再スタートしてみよう。
こう書き換えるだけ。
|python|
def mutate(xs):
sigma = 0.1
ret = []
for i in range(6):
ret.append(
(xsi0 + gauss(0, sigma), xsi1 + gauss(0, sigma))) return ret
cur = [(10.066974460981866, (1.0093958273824633, -0.10241337817317504), (1.67596128193252, -0.088355447743802051), (3.2439881038316933, 1.0639891791625744), (2.1424292236222975, 0.594492140279546), (2.3347757185495399, 1.4530289576181918), (0.010060747437447629, 2.2030633802780248))] ||
今度は(removed)になった。説明忘れたけど最初の数字が辺の長さの合計ね。
最終的にこうなった。(removed)
hr
描いた。
あー。辺の長さの最小化より面積の差の最小化とか線分の長さの均質化の方が良かったか。辺は確かにピンと張られて120度風になっているけど、美を感じない。
hr
あ、そして
||
(0, (1, 0)),
(0, (1, 0)),
||
バグ発見。
辺に貼り付きすぎないように制約を入れて最実行。
わりといい感じになった。画面の端をまたぐ辺の途中で微妙に折れ曲がっているのは特定辺の傾きが一致するような制約を入れてぴったりまっすぐにすべきだな。