トップ «前の日記(2005-04-02) 最新 次の日記(2005-04-04)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2005-04-03

_ すごくおもしろい本を読んでいる

アマチュアの生物学者、ロボット工学者(?)による、人工知能を持つロボットの開発の記録。と要約すると違うような。

しかし、落ち着いて読んでられないので、全然読み進めていない。別の本を読んじゃったり。

これは、不思議だな。まっさきに読みたくてスタックの先頭に置いてあるんだけど、逆にウェイトがかかり過ぎていて下のほうの軽いやつが上に出てきちゃうんだ。たとえば拾い読みできるからハッカーと画家を読んでたり。そのほか、こまごまと。

で、この調子だと一体いつ読めるのか、それとも永遠にスタックのトップにいるくせに追い抜かれていって結局読まないのかわからないな、とここで書いておいてみたり。

アンドロイドの脳 人工知能ロボット"ルーシー"を誕生させるまでの簡単な20のステップ(スティーヴ・グランド)

何気なく六本木の警察の横の本屋で買ったんだがすごくおもしろい。とはいえ、最初の数章しか読んでないんだけど。

書いてる人間が無茶苦茶なやつだ。まあイギリス人だしな(とつなげると、イギリス人は一般的に無茶苦茶だという意味になるから不思議なものだ。もちろんそんなこたないだろう)。高校時代は生物学に興味を持ったけど何かの気の迷いで小学教師になってみたものの、子供の前で何かを教えるなんてうまくできず、そこでプログラマになったらどうだろうとゲームプログラマになったけど、そこではろくな扱いもしてもらえずうんざりしていたが、ちょっとしたゲームのアイディアを思いついて(クリーチャーズというのだそうだ。ポピュラスとかシムシティみたいな感じなのかな?)それが爆発的なヒット。おかげでゲーム会社の企画部門みたいなところに昇進してマネージャをやらさせられて失敗して馘首になった(ぼやかして書いてあるから良くわかんないけど)まさにその日にゲームで外貨獲得に貢献したから(なんかビートルズとかを想起したり)っていうので女王から勲章をもらって少しは気が晴れて、そこで、家でこつこつと本当の人工知能を持ったロボットを開発することにした、というマッドサイエンティストって世の中に本当にいるんだな、と思わずにはいられないような紆余曲折人生。

で、とりあえず現在はバナナをバナナと認識するオランウータンロボットができたので、さらに次へと進めるための資金稼ぎがこの本だということらしい(が、最初の数章を読んだだけなので以下同文の言い訳)。

アマチュアの生物学者と名乗っているけど、プログラマーだし、電子工作屋だし、なんなんだろう。でも、うさんくさいかと言うとそれはうさんくさいのだが、帯にリチャードドーキンスが絶賛とか、瀬名秀明(解説も書いてるし)の推薦文とか出てるし、なにやら本気らしいし、実際に動くというか認識するロボットがあるみたいだし。

ロボットを作っているというとAIBOなんかと比べられるから説明が難しいと書いているがそれはそうだろう。させたいことをプログラムして、命令してそれをさせるのではなく、したいことをするプログラムをプログラムしてるんだから。抽象度が1段高い。バナナをバナナと認識するっていうのは、AIBOにオーナー登録コマンドで顔と声を覚えさせ、その声や顔を見たら目を緑に光らせるというプログラムとは全然異なることのようだ。

おもしろいなと思ったのはこの人の方法だと視覚情報が重要らしい点だ。おそらく素人工作屋なので1番制御しやすいデバイスがカメラだからかな? カメラは接続するだけなら非常に単純なデバイスだが入力デバイスとしては圧倒的な情報量を送りこんで来るし、それにプログラムのこちら側へのフィードバックも得やすそうだ。

_ P.201をJavaでやってみる。

これならどうだろう?
import java.math.*;
import junit.framework.*;
public class PG extends TestCase {
    public interface Acc {
        public Number call(Object i);
        public Number call(double i);        
    }
    public static Acc foo(final Object n) {
        return new Acc() {
                BigDecimal s = new BigDecimal(n.toString());
                public Number call(Object i) {
                    s = s.add(new BigDecimal(i.toString()));
                    return s;
                }
                public Number call(double d) {
                    s = s.add(new BigDecimal(d));
                    return s;
                }
            };
    }
    // 一応試してみたり
    public void testInt() {
        Acc a = foo(new Integer(16));
        assertEquals(17, a.call(1).intValue());
    }
    public void testLong() {
        Acc a = foo(new Long(987654321L));
        assertEquals(987654322L, a.call(1).longValue());
    }
    public void testDouble() {
        Acc a = foo(new Double(1234.56));
        assertTrue(1235.56 == a.call(1).doubleValue());
    }
 
    public static void main(String[] args) {
        junit.textui.TestRunner.run(new TestSuite(PG.class));
    }
}

ますます見苦しいけど。あと、public static Acc foo(double d);を付け加えれば一応OKかな。

見苦しい原因は、プリミティブ型とObjectを同一に扱えないからだ。と思ったけど、1.5で作ればオートボクシングがあるからそのあたりは問題ないのか。(これは1.4.2で作った)

戻り値にlongVlaue()とかをつけなければならない点はルール違反かも。でもNumber型を返してはいるから、大目に見ることにしようかな。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|

ジェズイットを見習え