研究日誌とぼやき
Last-modified: 2010-09-21 (火) 13:47:39 (4976d)
Top / 研究日誌とぼやき
TODO †
C言語でのSTMのサポート状況を調べるあるからまた使うときに- uniq最適化
- 膜のエンコードに各ルールが持つ履歴も含めるように→あとはコミット
- オプション付けたら実行できるようにしようかな?
- 修士論文概要書
- 実験の単位
- chr2lmntal
研究日誌 †
2010-04-02 †
- 346 Most Admired companies(フォーチュン誌2010年度版)
2010-03-21 †
- 忘れるのでメモ
- マルチプロセス
- 複数のプロセスが存在し、各プロセス内はシングルスレッド
- マルチスレッド
- 一つのプロセス内がマルチスレッドになっていて、例えばプログラム上の別々の関数AとBを同時に処理する
- マルチプロセス
2010-03-12 †
- SLIMビルド
- Wikipedia:autotoolの図参照
- configure.ac:
- AC_*はautoconfの機能
- Makefile.am:
- autoconfと協力して環境に適したmakeファイルを生成
- 64bitで最近動くようになっている
- make checkは検証機能系にはあんまり対応していない
- uniqに影響が出そうなやつを確認
- いっしーさんのefg、俺のPCでは動いた
- vista2台、vista上ubuntu(VMware)で動いた
2010-03-11 †
- NESL、というか関数型言語のlet
let x = 式1 in 式2
2010-03-10 †
- TODO更新
- 早くあれから解放されたいものだ
2010-01-28その2 †
- 実験の単位
- CHRとLMNtalの実験データを比較したものを公開しようかと思ったけど、CHRの使い方ページとかでも面白いのかも
2010-01-28 †
- 進路面談
- 就職活動に関して先生から色々助言を頂いた
- しっかりした受け答え、スタミナのある人
- 就職活動に関して先生から色々助言を頂いた
- 続いて修論計画
- テーマは「共有メモリ下での細粒度な並列化」(今適当に考えた)
- ストーリーが立てやすく、面白いと思う
- 分散はあったが共有はLMNtalでは例が無いし、自明じゃないもの多し
- 問題をいくつか設定し、それぞれに対して有効そうな手法を実装してみる
- 問題目線で考えるほうがよい、確かに
- 今まで手法目線で考えていた
- 周りで頼りに成る人がいるからいいね
- ほりさん、ごちょう、へいれつはん(とくにむらおか)などなど
- テーマは「共有メモリ下での細粒度な並列化」(今適当に考えた)
2010-01-25 †
- 概要
- やったこと
- 結果
- 今後やること
- 自分のアピール
2010-01-19 †
- 就活プレゼン練習会
- 実用的なのか
- 企業に役立つ人間なのか
- どこまでがチームで、ここからが自分なのか
- 論文出してるアピール
- 参考文献アピール
- 研究Wikiをまるまる張るとか
- ソフト開発に近い人はテスト・バグ取りは気にする
- 時には処理系よりも作ってるチームの環境のほうが大事かも
- CHR
- 相手を自由に設定する、凄さを言う(制約プログラミング、記述性など)
- 例題
- 具体的な行数→一行になった
- 質問を誘発
- 話す大筋として
- システムに手を加えることが出来る
- 他の言語を知る力がある
- そしてLMNtal全体を話すことで、他の人の研究についても知ってるアピール
- 今後の課題
- いきなり並列化となってる、もう少し細かく
- グラフ同型性判定についてもう少し
- それでuniqはどう対応するのかを言うほうが分かりやすいかも
- 言語に追加と処理系に追加が微妙
- LMNtal処理系のどの程度のソースコードを見たのか
- 波及し具合
2010-01-12 †
- 修士論文計画書をダウンロードしてみた
- 3ページ分書くとこあるのに「2ページ書け」とあるのでおかしいと思ったらOpenOffice?だから書式が崩れてたorz
- ゼミで共有PCをどうたらって話が出てたけど、こういうときは無いと困る
- 19日資料作り
- 技術者向けは研究者向けより難しいのかも
- 見栄え良く
2009-12-23 †
- iwatasoのappendをCHRで書いてみた、だいたいあってる(と思う)。
- append.pl
:- use_module(library(chr)). :- chr_constraint start/0, gen_list/2, n/1, a/0, list/1, loopend/0, my_append/3, end/1. appendcons @ my_append([A|X], Y, Z) <=> my_append(X, Y, [A|Z]). appendnil @ my_append([], [], Z) <=> list(Z), loopend. loopstart @ list(X), n(N), loopend <=> N > 0 | M is N-1, n(M), my_append(X,[],[]). gen_list(0, L) <=> list(L), loopend. gen_list(N, L) <=> N1 is N-1 ,gen_list(N1, [a|L]). start <=> gen_list(10000, []), n(5).
- で、niolo上でcygwin同封のSWI-prologで走らせてみたら10000*5で80秒もかかった
- 実行手順と結果
$ pl ?- [append]. ?- time(start). ※2回目以降の実行結果 % 2,741,172 inferences, 82.88 CPU in 81.15 seconds (102% CPU, 33076 Lips)
- SWI-prologのtimeコマンド使ったから、正確な実行時間じゃないかも
- あとまぁ書き方にもよってだいぶ変わるだろう
2009-12-15 †
- memo
- ruleset1ならok
- slim315/present_test2rule.ilが41628で同じ状態数だった
- ruleset1ならok
2009-12-7 †
- todo
- エラーが出た(ruleset_copyとruleset_idの競合部分?)を調べる
- 解決した、pos+=の位置がおかしかっただけ
- エラーが出た(ruleset_copyとruleset_idの競合部分?)を調べる
2009-12-3 †
2009-12-2 †
- memo
[TAG_RULESET(1)][RS_NUM][RS_ID][RS_ID]... ⇒ [RS_ID] [HISTORY_TAG][RULE_NUM] ([RULE0])[HIS_NUM][HIS_ID][HIS_ID]... ([RULE1])... ([RULE2])...
2009-12-1 †
- 膜のエンコード×uniq
- 9割方実装できたと思う、とりあえず通常実行は問題なさそ
- presentで状態数が違ったからそれを調べる
- 履歴表とは別に履歴をどうにかソートして持たせておくとちょっといいかも
2009-11-23 †
2009-11-18 †
- slim ver1.0.0
- 膜のエンコードにuniqを対応させてからにしようかと思ったけど、バグが怖かったのであとで使う関数の追加にとどめた
- version upのやりかたメモ
- make dist するために./configureまでやっておく必要がある
- localの環境は反映されないらしい
- comfigure.acをコミットしてから固める
2009-11-16 †
- uniq bug fix
- ロード時に全てのルールがuniq ruleであるとみなされていたのを直した
- make_ruleのhistory_tbl=NULLを消してしまっていた、いっしーさん申し訳ないです
2009-11-12 †
- あいかわらずuniq
- 中間命令を読み込むと同時に履歴表を初期化するようにしたので、初期化されているかどうかでuniqとそれ以外のルールに分けることができた。has_uniq廃止
- 前はいらないと思ったけど、ルールセットがhas_uniqerule情報を持ってるのよかった
- rev284からメモリリークしてるみたいだ
2009-11-10 †
- ルール名手直し
- こっちの方がいいか
a(X, Y, Z) :- int(X), unary(Y), ground(Z) | . ---> commit ["(a(X, Y, Z) :- int(X), unary(Y), ground(Z) | )", 0]
- こっちの方がいいか
- リモートからの再起動
$ shutdown -r -t N
2009-11-9 †
- 中間命令列commitに関するバグ直し
- その前に.lmn→コンパイルで中間命令出力→.tal→ランタイムで実行、のやり方をメモ
$ lmntal --compileonly hoge.lmn > hoge.tal $ lmntal --stdin-tal hoge.tal
- 中間命令列commitの第一引数にはルール名が入るが、これまでrule名をつけない場合はこんな感じだった
commit [null, 0]
- このnullはJavaのnullオブジェクトがそのまま出力されたもので、Javaランタイムで中間言語読み込むと、nullなんて文字は知らないとエラーになってた
- だからルール名なしのものはルールの内容そのものをルール名にしてみた
- ソース
a. a:-b. //名前なし rule @@ b:-c.
- --compileonlyで出力
commit ["{ a } :- { } | { b }", 0] //名前なし commit ["rule", 0] //rule @@
- ソース
- その前に.lmn→コンパイルで中間命令出力→.tal→ランタイムで実行、のやり方をメモ
- Uniq Rule TODO
- 同型性判定はもうちょい最適化できそう
2009-11-5 †
- slim
- uniqを持たないルールのコピーは従来通りのアドレス渡しに戻した
- いやーコンパイラ変えたから楽だわ
- rulesetがuniq ruleを持つかどうか判定できるようにした
- lmn_mem_freeを若干最適化
- Java処理系を変更
- ↑の最適化の恩恵を受けるためにはlmntalを最新版にしてください
- memo
- GuardCompiler?
- rc.theRule.hasUniq
- Rule
- l.53, l.110
- GuardCompiler?
- Java処理系コミット方法
- コミットも同期化も全部「リポジトリーと同期化」でおけ
2009-11-4 †
- profiler
- peak # of rules版をコミットしてみた
- slim
- コンパイラの変更に対応したslimをコミットした
- コンパイラはまだコミットしてない
- コンパイラの変更に対応したslimをコミットした
- memo
- il_lexer.l
- Uniq Rule
- il_parser.y
- l.87, l.177 UNIQ RULE
- il_lexer.l
2009-10-30その2 †
- profiler
- peak # of rulesを作ってみた、コミットしてないけど
- uniq
- ndでおかしかった原因は、膜のエンコードに履歴が反映されてないから
- 識別子はidに変換しているから、それを含めてエンコードするようにする
- (rulesetにuniqルールを持つかどうかのフラグを持たせる)←これは必要ないか
- ndでおかしかった原因は、膜のエンコードに履歴が反映されてないから
- コンパイラ
- 後回しにしてきたが、やはりルール生成時にuniqルールか否かを判定したい
2009-10-30 †
- ルールの等価性判定
- 忘れるのでメモ、3段階で判定を行っている
- 膜に含まれるルールセット数を比較
- 昇順(例: @3,@3,@4,@5,@5)にソートされているruleset->idの番号のみを比較
- mem1からrulesetを一つ取り出し、同じものをmem2->rulesetsから探し出す(mem2-->mem1もやる)
- ruleset内でのruleの順序はソース依存なので、単純にruleを頭から一つずつ取り出して比較することで等価性判定する
- 3.で既に一対一で対応できたrulesetは次以降の探索でスルーするようにすれば、もうちょっと効率化できると思う
2009-10-29 †
- slim
- 初期状態が2回出力されるのを直した、コメントアウトしただけだが
- uniq
- (引数に数値を取るプログラムでだが)ndで10万状態いける、さらに上も測定中
2009-10-28 †
- uniq
- メモリリークを直した
- lmn_interned_strで識別子管理にしてみた
- 通常実行かつuniqルールの複製が無いプログラムだと、省メモリ化の効果はほとんどないんじゃないかな
- ルールによるルール消去はclearrule
2009-10-27 †
- ubuntuのショートカット
- デスクトップにD&Dするのは単にコピーだった
- 下のタスクバー上にD&Dすればショートカットになる
- JDK
- apt-getでsun-java6-jdk
- /usr/sbin/update-alternatives --config javaで関連付けを変える
- PATH変更を端末再起動無しで反映させる方法
source ~/.bashrc
2009-10-26 †
- ubuntu
- valgrind入れた
- vistaとの共有フォルダ設定した
- ubuntuでフォルダのショートカットをデスクトップに置く方法
- ただ単にD&Dでできた
2009-10-24 †
- NIOLOにVMware + ubuntu入れてみた
- ubuntu走らせてるvistaに家のxpからリモートアクセス、遅い、疲れた
- 入れたいもの
- JDK(openjdkだとLEが起動できなかった)
- eclipse
2009-10-23 その2 †
- slim233
- いくつか例題を試してみたが、uniqを使わないなら割とちゃんと動いているみたい
- ただuniqを使った例題で1個バグが出たのがあった、要考察
2009-10-23 †
- バグがありそうで怖い uniq for nd
- 膜内でrulesetをソートして保持していた仕様に対応(したつもり)
- アドレスじゃなくruleset->idでソート
- ルールコピーをすると同じidを持つルールセットがたくさん出来てしまう
- そのために↓
- 同型性判定を若干変えた
- idだけではrulesetを完全に1対1で比較できない
- だから「一方のrulesetsからrulesetを一つ取り出し、他方にも同じのがあるか」という調べ方をしなきゃいけない
- 膜内でrulesetをソートして保持していた仕様に対応(したつもり)
2009-10-21 †
- 懐かしのmem_eq
- uniq修正中にちゃんと同型性判定できているかどうか試してみたら、
{a.}. {a.}.
- というどう見ても同じ膜を別のものだと判定されてしまった
- mem_equals_rec()の
/* 膜1内におけるa1を根とする分子に対応する分子が膜2内に存在しない場合にここに入る (この場合は無条件に偽を返す) */
- でfalseになっちゃう
- mem_eq({a.}, {a.} ... )という形で与えるからっぽいな、リンク先の引数が違うから そこまで見られちゃうと今のままでは使えないのか
- まぁルールセットの一致は調べられるから別にいいんだけどね
- mem_equals_rec()の
- uniq修正中にちゃんと同型性判定できているかどうか試してみたら、
2009-10-19 †
- horiさん曰く
- Cはmalloc*100よりも(malloc+free)*100の方が圧倒的(?)に時間が短い、らしい
- メモリプール的な感じ、なるほど
- lmntal(javaでもSLIMでも)のビルド時にPerl関係で怒られたら
- 俺のB4の研究日誌+Perlにパスが通っていることを確認する
2009-10-16 †
- vista
- 更新があった場合に、勝手に再起動するやつをなくしたい
- スタート→GPEDIT.MSC→管理用テンプレ→Winコンポーネント→Win Update→ログオンしているユーザがいた...→有効
- 更新があった場合に、勝手に再起動するやつをなくしたい
- CCHRのPrime
- horiさんの言うとおり、LMNtalでルールの順番を変えたらだいぶ実行時間が変わった
- CCHRのGCD 初期状態
- 出力できた、最初に11*n (n=2〜2999)のGCDを生成してる
- 4000個のGCDと論文に書いてあったけど、これはどういうことだ?
- ちなみにPrimeはSLIMのほうがだいぶ遅かったけど、GCDは何も考えないでエンコードしてCCHR2スレと対戦させても若干勝てる
2009-10-15 †
- STM for Java, C
- どうやら使えるみたいだ
- プログラミング言語Clojure
- STMをサポート
- JavaVMのバイトコードにコンパイルできるらしい
- Cはこれ
- LE.jarファイルをWinのスタートメニューにD&Dするとうまく起動しない
- ショートカットを作ってD&DするとOK
- exeファイルとかは自動的にショートカット作ってくれるけど、.jarや.txtはそうじゃないんだね
2009-10-14 †
- 発表終了
- 案外問題なかった(気がする)
- まぁ内容が薄いからこんなもん?
- CCHRのGCDの初期状態を知る
- まずは簡単なロックベースでやってみよう
- 例題としては、GCDはもちろん、あとはソート関係
- C言語のSTMのサポートは?
- 案外問題なかった(気がする)
- CCHR 実行手順
- .cchr →CCHR→ .hs →ghc→ .exe
2009-10-12 †
- 先生のpretty printに対する動機付け
- 「LMNtalらしい問題を克服した」研究者はこういう理由付けができると強いんだろうな
- ゼミ発表準備
- Brockworldの例題の意味が分かった
- なんのことはない、モンキーアンドバナナじゃないか
2009-10-5 †
- 先生より:uniqをもっと整備する話
- そろそろやらないと、とは思ってた
- 発表のメドがついたらまた
- CCHR用のプログラムの書き方がわからん、なんで実行方法だけなんだ
2009-9-20 †
- 10/7ゼミ発表
- いつのまにやら更新されてた
- なにしよう、CHRの本読んでるが果たして・・・。
- 合宿成果報告
- こっちもどうしよう
- 今から実装再開?うーんめんどい
2009-9-10 †
- eclipse
- ファイルを二つ選択→右クリ→比較→相互→便利
- SLIMのmake
- 久しぶりにニオロでmakeしたらgrepが見つからないと、でgrepの2.5.3をインストールしたら直った
- borlandを入れたせい?
2009-9-5 †
- 合宿疲れた
- 実装しなきゃ
- SLIM読まなきゃ
- 10月研究発表
- 何も言えねぇ
- 小林さんの輪読の後半でもやろうかな
2009-8-10 †
- C++コンパイラメモ
- インストール先の bin ディレクトリで次の手順を実行します。
- a. 既存のパスに "c:\Borland\Bcc55\Bin"(デフォルト)を追加します。
- b. bcc32.cfg ファイルを作成します。このファイルは,Include および Lib パスのコンパイラオプション(コンパイラの -I および -L スイッチ)を設定するものです。ファイルには次の行を含めてください。
-I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib"
- c. ilink32.cfg ファイルを作成します。このファイルは,Lib パスのリンカオプションを設定するものです。ファイルには次の行を含めてください。
-L"c:\Borland\Bcc55\lib"
- C++の本
- ささっとp100まで
2009-8-5 †
- 提出課題(先生へのメールも)を全部終わらせた。
2009-7-27 †
- 並列と並行
- 並列処理(parallel processing): 「物理的に」多数のプロセッサによって実行される.
- 並行処理(concurrent processing): 「論理的に」複数のタスクが実行される.
- 実際にプロセッサが一個でも複数でも構わない. 従って, 並行処理を並列処理で実現することもできる. なお, 並行処理という用語は, 主に, OS, データベースの分野で用いられる.
- GDB
- break pointに条件をつける
2009-7-23 †
2009-7-19 †
- iTunes
- 最近、ipodをつなぐ度に「アップデート(1200円)」という表示が出てきて、毎回「あとで」にしてて面倒だったけど、ついに昨日、「いらない」というボタンが出てきた
- 即押した
- 最近、ipodをつなぐ度に「アップデート(1200円)」という表示が出てきて、毎回「あとで」にしてて面倒だったけど、ついに昨日、「いらない」というボタンが出てきた
2009-7-15 †
- uniq
- コミットしたら動かない例題(abp)があった
- 履歴表の解放忘れ
- うかつだった。でもabpは別にそんなにルール数多いわけじゃないし、そもそもuniq使ってないなら履歴表が消費するメモリなんてたかが知れてると思うなぁ
- 原因はルールの複製と同型性判定
- 膜にルールセットを追加する時にアドレス渡しではなく複製している
- 同型性判定では、ルールはアドレス順にソートして比較している
- 新しい仕様。ルールを複製すれば当然アドレスだって変わるからうまく比較が出来ずに状態がどんどん増えていた
2009-7-14 †
- SLIMの並列化
- ってどうなんだろう
2009-7-13(昼3) †
- nd、ltlでの生成済み状態のメモリ圧縮(iwasawa案)
- これ以上遷移しない状態は圧縮が可能、nakagawaくんのときにも言われていた
- uniqの経験がちょっとは生きるかも、文字列に生成するあたりだけだけど
- なんだかもう色々広げすぎて収拾つかなくなってきた
- 初心に帰れば「たくさんプログラムを書きたい」は無視したくない、しかし実際問題としてはどうだろうか
2009-7-13(昼2) †
- あぁレポートがめんどい
- でもほんとに↓に書いてきたことは浅い考えばっかりな気がする、こんなんで大丈夫なんだろか
2009-7-13(昼) †
- UML図を書くだけでLMNtalモデリングができる、とか
- LMNtalは直感的にモデルを書ける、とはいえやはり慣れていないとどう書いていいかわからない場合もあるかな
- Javaにそんなのがあったから、そんなノリで
2009-7-13(朝) †
- ビジュアルプログラミング
- クリックでアトム配置、ドラッグで膜配置、とか?
- 色んな種類のアトム(膜)があってもよさそう、一個あるとウィンドウが開くwindowアトムとか
- でもビジュアルプログラミングの利点て何なんだろう、LMNtalはそれを実現できるだろうか
- UNYO 3D
- 見やすそうだけど、ユーザがアトムを引っ張ったりする操作が大変そう、というか3Dでどうやったらいいのかイメージがわかない
- 360°フルに見れるのではなく、x,-x,y,-y,z,-zの6方向から見れるだけでも大分違うのでは
- 動的に変化するルール
- 何の例題を書いてるときか忘れてしまったが、ヘッドが動的に変化すればもっと簡潔に書けるのに、って例があった気がする
- 今はルールの移動・複製・消去しかできないけど、「ルールの内容をルールで変更する」とか「実行中にルールが定義される」とかあっても面白いんじゃないか
- 言語仕様とか気にしないで書いてみた
- 特にモチベとなるような例は無いけど
- それに後者はあらかじめ用意しておいて展開すれば似たようなのは書ける
- uniqの時も思ったが、結局LMNtal言語に何か新機能をつけても、元々のLMNtalで代用できるようなのが書けちゃうことが多い、変数の概念だってモジュールで実現できてるし
2009-7-12(深夜) †
- 布団に入ったけど寝れないからPCつけた
- 自分はなぜ上田研に入ったか?
- プログラミング言語を作る=たくさんプログラムを書きそう、というイメージ
- (あくまで一因だけど)
- なんかたくさんプログラム書いてみたいなぁ、たくさんっつっても俺的には「何千行」と言えるくらい書いたら、それはもうたくさん書いたことになるんだけど
- その視点から研究テーマ探してしまうか。笑
- プログラミング言語を作る=たくさんプログラムを書きそう、というイメージ
- LMNtalでのビジュアルプログラミング
- ふとPPLでLMNtalもビジュアルプログラミング諦めないで、と言われたのを思い出した
- 言語班ページ内で検索すると中野さんがUNYOをヴィジュアルプログラミングへ持っていきたいと言っている
- けど中野さんの修論にはそういうことは書いてない気がする
- UNYO3Gは今後そっちの方にいく予定はあるのかな
- 少なくともルールをUNYO上で書く(描く)みたいな事は去年の夏合宿でも話し出てなかったような
- いつだか班ゼミで話題に出たサイト
- あとはUNYOの三次元化なんかも中野さんは課題に挙げてる
- 小林(史)さんがいつぞや言ってたことも、今思えば研究テーマとして取り上げてもいいのかも
- でもUNYOって「見やすさ」で勝負するものだから、すごい大変そう
- まぁ大変そうじゃないものなんて無いが
- 関係ないが富永先生のレポが面倒この上ない
- uniq
- 164へ入れようと思ったけど、port.cをどう変更するかで迷いが、horiさんに聞こう
- やっと眠くなってきた、寝る
2009-7-9 †
- uniqのコミット
- horiさんのver.upが一段楽したので164を落としてきてやってしまおう
- 研究テーマ
- うーん、膜の同型性判定を見直すか、PORか、はたまたiwatasoの手伝いか
- SLIM用、eclipseのC/C++エディター設定(インデント・タブサイズ変更&スペースに)
- ウィンドウ→設定でC/C++のコードスタイル
- 新規→名前決めok
- プルダウンメニューを「タブのみ」から「スペースのみ」に変更→保存
- 同じく、ファイル関連付け
- ウィンドウ→設定でC/C++のコードスタイル
- 一般→エディター→ファイルの関連付け、で設定
2009-7-8 †
- ニオロの環境構築
- eclipse
- Pleiadesにはトラウマがあったので避けてきたが、ガリレオに入れてみたらすんなり動いた
- LMNtal、SLIMともに問題なし
- eclipse
- インターン
- 東芝は受かった、村岡と場所一緒
- NRIは面接、腹痛を抱えながら頑張ったと思う、反省点も多いが
2009-7-7 †
- atomic
- 使い方すぐに忘れるからここにメモ
{ '$callback'('atomic_ruleset', 1). a :- b. b :- c. b :- d. }. a.
- 使い方すぐに忘れるからここにメモ
- 1と2
- この違いは何なんだろう?
- 第二引数が1
{ '$callback'('atomic_ruleset', 1). a:-b. }. a. b:-c. ---> init:17072240 17071352::::b. @4,@3 17072240::17071352::a. @4,@3 # of States = 2
- 第二引数が1
- この違いは何なんだろう?
- 2のとき
---> init:17072240 17146504::17071352::b. @4,@3 17071352::::c. @4,@3 17072240::17146504::a. @4,@3 # of States = 3
2009-7-6 †
- 風邪
- 電車に12分乗ってただけで吐きそうになるとかどういうこと?
- eclipse
- ガリレオは言語パックまだ無いのね、がっかり
2009-7-5 †
- 風邪
- 引いた、明日テストセンターなのに、まぁ治すけどね
2009-6-30 †
- インターン
- NRIと東芝の研究所に出した
- NRIはES通った、テストセンター行かなきゃ
- 研究
- 何しよう・・・atomic使ってなんかモデル書いてみようかな
2009-6-25 †
- uniqが得意なもの
- 一般的な言い方があると、学会で聞かれても役立つ
- 最低能計算とでも言うか(先生より)
2009-6-23 †
- 研究環境の移行
- 笹島さんPCことNIOLO(ニオロ)に環境を移行中
- リモートデスクトップ
- TeraTerm?→設定→SSH転送→追加
- ローカルのポート:13389、リモート側のホスト:操作するPCのIPアドレス、ポート:3389→OK→設定の保存
- (Vista)アクセサリ→リモートデスクトップ接続→「localhost:13389」と入力し接続
- ↓参考までに中野さんのリモートデスクトップのやり方ページ
2009-6-18 †
- 終わった。\(^○^)/ではなかったと思う。
- あいつなら、「どんなもんじゃ〜い!」と言うだろう。
- 先生含めみんな、特に綾野には感謝してもしきれない。ありがとうございました。
2009-6-12 †
monkey and banana †
- さらに短くしてみた?
- やっぱりなんか↓のafterのSVは違うかも、あんなきれいに環状にはならない気がする
- それと膜を使った理由が「CHRには膜が無いから使ったら面白いかも」とかいう理由だった気がした、特に面白くもなかったようなので膜を使わないで書いてみた
- afterのafter
p(goal,no). p(a,box). p(b,stick). p(c,no,monkey(no)). p(P1,O1,M), p(P2,O2) :- p(P1,O1), p(P2,O2,M). p(P,O,monkey(no)) :- p(P,no,monkey(O)). p(P,no,monkey(O)) :- p(P,O,monkey(no)). p(P,box,M) :- p(P,box(M)). p(P,box(M)) :- p(P,box,M). p(goal,box(monkey(stick))) :- got_banana.
- ガードにunary書かなくていいからすっきりしてる、図も正しそう(ちょっと汚いが)
- あと個人的に猿はmonkeyと書きたい
2009-6-12 †
monkey and banana †
- コードを短くしてみた
- SLIMは整数アトムが無いから、猿が何も持っていない状態をmonkey(0)で表してしまうと、例えばmonkey(box)の状態に対して「monkeyが何も持っていない場合」を判定できない
こんな場合: monkey(X) :- X\=0 | ・・・.
- \=はunary型以上の比較だから、0が整数アトムじゃないとダメ、あたりまえだがjavaならこのガードはok
- しょうがないから道具が何も無い地点にはobject(none)を配置、noneなら猿は持っている物を置く、とした(monkey(none)でも道具を置く動作が発生しちゃうけど)
{mk(X), ob(no), $p} :- unary(X) | {mk(no), ob(X), $p}.
- SLIMは整数アトムが無いから、猿が何も持っていない状態をmonkey(0)で表してしまうと、例えばmonkey(box)の状態に対して「monkeyが何も持っていない場合」を判定できない
- before
{goal}, {a,obj(box)}, {b,obj(stick)}, {c,monkey(none)}. cond(none). move@@ {monkey(X), $p}, {$q} :- unary(X) |{$p}, {monkey(X), $q}. hold@@ {monkey(none), obj(X), $p} :- unary(X) |{monkey(X), $p}. put@@ {monkey(X), $p}, cond(C) :- \+($p=(obj(Y),$pp)), X\=C | {monkey(none), obj(X), $p}, cond(C). get_on@@ {monkey(X), obj(box), $p} :- unary(X) | {monkey(X,box), $p}. get_off@@ {monkey(X,box), $p} :- unary(X) | {monkey(X), obj(box), $p}. goal@@ {goal, monkey(stick,box) } :- got_banana.
- after
{goal,ob(no)}, {a,ob(box)}, {b,ob(stick)}, {c,mk(no),obj(no)}. {mk(X), $p}, {$q} :- unary(X) |{$p}, {mk(X), $q}. {mk(no), ob(Y), $p} :- unary(Y) |{mk(Y), ob(no), $p}. {mk(X), ob(no), $p} :- unary(X) | {mk(no), ob(X), $p}. {mk(X), ob(box), $p} :- unary(X) | {mk(X,box), $p}. {mk(X,box), $p} :- unary(X) | {mk(X), ob(box), $p}. {mk(stick,box), goal} :- got_banana.
- SVはこんな感じ
- beforeのSVと見比べてかなりすっきりしてしまった
- 道具を置く動作のセルフループが気になるけど、まぁ、黙ってりゃわからんかな・・・
2009-6-11 †
JSAI発表練習 †
- やったった
- 19分、うーん削らなきゃいかんのか
- 色々意見いただけた、ありがたい
- 橋渡りを除く、代わりに最初にモンキーを持ってくる
- モンキーでSV見せたときに「このグラフが状態空間です!」と言う
- で、赤い点が最終状態だから、状態空間探索できてるでしょ?と言う
- モンキーの解説の次にソースの説明を持ってくるか?要検討
- 先生の意見では「ソースは見せたほうがいい」
- 2枚目はそのまま、ルールはそもそもヘッド:-ガード|ボディ.だと言う
- 3枚目はもっとツールの紹介っぽくする、あれもあるこれもある
- 最後にこれらのツールは全部公開されていますよ、的な感じでURL
- この辺りに研究の背景と目的を持ってくる
- 状態空間探索
- 通常実行(決定的実行)と非決定実行に分けて書く
- 混乱させちゃうかも
- 通常実行(決定的実行)と非決定実行に分けて書く
- 例題モンキー
- 最初に持っていくから抜く
- 状態空間探索
- こんなもん、現状維持
- SWP
- ちゃんとソース読まないと、今日はカンペ失敗だった、時間も
- 状態空間探索にする
- 今までの「uniq制約の導入」を入れる
- CHRの部分にこんな例題を書きにくかった(単純なもの)を入れたほうがよい
- path consistencyが使えそう、もうエンコードしてあるし
- uniq制約の活用例
- 最後のページとか、とにかくどっかに持ってく
- で、uniqだけじゃない、モデル検査とか羅列でいいから書いておく
- その他の例題はPPL2009見てくれ、は書くかわからん
- プレゼント交換とuniqの利点
- 問題なしかな
- まとめと今後の課題
- ×例を紹介した
- ○ができる!!
2009-6-5その2 †
uniqのバグ †
- 解決
- lmn_mem_ruleset_equals
- デバッグのためにif文の構造を変えちゃったのがいけなかった
atomic †
- 最新版SLIMを落としてきた
- atomic実行がうまくいかなかった
- なんか書き方がまちがってるんだろう、明日もう少しちゃんとやってみる
- atomic実行がうまくいかなかった
2009-6-5 †
uniqのバグ †
- これはOK.
a(1). a(2). a(A1) :- uniq(A1) | a(A1). --> init:14705432 14803304::::a(1). a(2). @3 14779512::14803304::a(2). a(1). @3 14710464::14803304::a(1). a(2). @3 14705432::14710464,14779512::a(1). a(2). @3 # of States = 4
- でもルールを一つ増やすとダメ
a(1). a(2). a(A1) :- uniq(A1) | a(A1). a:-b. --> init:14697920 14697920::14697920::a(1). a(2). @3 # of States = 1
- 反応前と反応後でアトムが変わらないようなルールを書いたときに、他にルールがあるとダメみたいだ
- どうやら履歴表の等価性判定の問題、後者の例でも呼び出されてはいるけど同型だと判定されちゃってる
JSAI発表資料 †
- 先生からいただいた意見
- 流れを大きく変更すべき所はない
- モデル検査の話を0だとやっぱりだめかも、LMNtalは色々できると言ったほうがいい
- 橋渡り・モンキーはパズル問題、もっと検証臭い例題を入れられないか
- PPLの例題を使ってもよい
- slim0.5.0に対応させてみては?
- CHRとの比較を載せていなかった
- 同じくらいの表現力がある
- LMNtalはCHRのスーパーセット的な存在になれたと言う
- 比較に使う例題は制約問題でもよい、探索とかじゃなくてもよい
- atomicあればCHRの例題(数独とか)解けないか
- ayanoとの相談より
- プレゼント交換を応用した例題を無理矢理考える
- iwatasoより
- uniqの使用例はもう少し簡素で、リンクのあるなしくらいの違いでいいのでは
5/30,31言語班合宿に向けて †
- こういうことじゃなかったら陳謝
- ルール
- ガードのor、あるいはif文的な書き方(ifはmoduleとして用意されてるけど)
Head :- Guard1 && Guard2 | Body. ==> Head :- Guard1 | Body. Head :- Guard2 | Body.
- 2つのルールに変換する、みたいな?
- 動機?同じようなコードを書くのがめんどい
- ガードのor、あるいはif文的な書き方(ifはmoduleとして用意されてるけど)
- 否定
- 否定はどうなんだろう?
- (ルールは)自分が属している階層の端は見れないから無理だ、みたいな話をしていた記憶が
- (細かいけど)Simpagation rule(バックスラッシュ記法)を最適化してくれたら嬉しい
- そもそも使う人がほんと少ないけどね、俺はたまに使いたくなる
a \ b <=> c.
- \の後ろをボディと書換え
- CHRでは、aはマッチングのときだけ参照されて、書換えのときは触らない
- 「Simplification ruleの最適化の形」と書かれている
- LMNtalではaも消してまた生成してる
- そもそも使う人がほんと少ないけどね、俺はたまに使いたくなる
2009-5-15 †
uniqの例題 †
- いろんなものに手を出しすぎた、少し整理したほうがいい
- 発表資料ももっとしぼっていこう
2009-5-15 †
uniqの例題 †
- CHRに数独があったから、LMNtalでもやってみる
- CHRの方はPropa〜つかってないけど、uniq使うとちょっと面白くかけるかも
2009-5-12 †
ノートにプリンタドライバ入れた †
- end usersのほかに参照したページ
- ハミング数
- 素因数が5以下の自然数のこと
- ハミング符号とは別の話だった
uniq nd †
- ×文字列 ○バイト列 の方が印象良い
2009-5-12 †
発表終了 †
- たくさんの意見、ほんとうにありがたい
- CHRとの比較の話はとにかく入れる
- タイトルが状態空間探索
- LMNtalで状態空間探索をするとなにがいいのか
- どういう探索に適している(よりいい感じになる)のか
- 流れ
- 例題
- 最初の例題は、何もuniqを使ったやつでなくてもおけ
- LMNtalで探索するとこんな感じ、で引き付ける!
- イントロ
- LMNtalをさらっと(処理系もさらっと入れるか、全く入れないか)
- モデル検査の話は省いてもいいかも
- もう省くことにしよう、断然楽
- むしろLMNtalには、状態空間探索のための機能、nd実行がある
- 例題
- 「一行で書けた」は、記述量削減のための言葉として言ってよい
- 一行で書けて気持ちがいい
- 例題
- ndの話し方
- 実装するときに、膜の同型性判定を入れた
- uniq制約が出来た
- ndに対応させるためには、履歴表も見なきゃね
- ペアの生成
- 有り無しの場合で意味が違うのでは?
- そうかも・・・。
- でもなんかうまく使えそうな気がする
- 有り無しの場合で意味が違うのでは?
- Spanning Spiderをndで書く
- スライド12
- uniqを適用できるグラフは、もっと大きく複雑なやつでも大丈夫だといったほうがいい
- 図も入れよう
2009-4-29 †
uniq ndへの道 †
- 一応、正常に動くように
- 論文のなんちゃって例題と同じ状態遷移になってるから、あってるだろう
- でも新たに処理を追加してるんだよなぁ
- ポインタ受け渡しとコピーの使い分けの部分のバグを見つけて直したわけじゃない
2009-4-29 †
lmn_mem_rulesets_equals †
- ruleset数が0なら比較しなくていいじゃん
外付けキーボード+マウス、PCスタンド †
- ノートPCがまるでデスクトップPCのように
2009-4-28 †
interpretメモ †
142 src/task.c static BOOL interpret(LmnRule rule, LmnRuleInstr instr, LmnRuleInstr *next); 365 src/task.c (inst_seq && interpret(rule, inst_seq, &dummy)); 736 src/task.c if(interpret(rule, instr, next_instr)) { 776 src/task.c if(interpret(rule, instr, next_instr)) { 851 src/task.c ret = interpret(rule, instr, next_instr); 955 src/task.c interpret(rule, instr, &instr); 1036 src/task.c if (interpret(rule, instr, &instr)) { 1102 src/task.c if (interpret(rule, instr, &instr)) { 1143 src/task.c if (mp->name == memn && interpret(rule, instr, &instr)) { 1406 src/task.c if (interpret(rule, instr, &instr)) { 2003 src/task.c interpret(rule, instr, next_instr); 2288 src/task.c if(interpret(rule, instr, next_instr)) { 3021 src/task.c if (!interpret(rule, instr, &instr)) return FALSE; 3030 src/task.c if (interpret(rule, instr, &instr)) return TRUE; 3039 src/task.c while (interpret(rule, instr, &instr)) ;
2009-4-25 †
www-admin †
- 構成員を更新してみた
2009-4-20 †
JSAI2009 †
- 無事(?)提出できました。
- 皆さんのおかげです。ありがとうございました。
2009-4-15 †
JSAI2009 †
- 班ゼミで質問したいこと
- 話の流れ
- LMNtalにはモデル検査器がある→uniqを追加して更なる検証の可能性が広がる云々
- uniqがあると‐態数の削減や遷移の簡素化∈までより簡潔なモデルの記述ができる
- 例題(ペアとプレゼント)
- 枚数
- 膜同型性判定にルールを見る部分を追加したが、どういう風に文章にするか
- 話の流れ
uniq †
- やっぱりルート膜内とそれ以下で実行結果に若干の違いが。。。
2009-4-14 †
JSAI2009 †
- 例題、こんなのはどうだろうか
- a,b,cというグループに属する人達から二人を選んでペアを作る。
- 条件1:同じグループ同士でペアを作ってはいけない
- 条件2:同じ組み合わせが二つ出来てはいけない(簡単にするため、pair(a,b)とpair(b,a)は違う組み合わせ)。
- 条件1、2の下で最も多くのペアを作れる組合わせは何通りあるか。
- SVでこの「最も多い」組合せを作れている状態は一番右の列にある最終状態
初期状態: (見れば分かると思うが、aグループは4人、以下同様) p(a).p(a).p(a).p(a). p(b).p(b).p(b). p(c).p(c). uniq無: p(X), p(Y) :- X\=Y | pair(X, Y). pair(X1, Y1), pair(X2, Y2) :- X1=X2, Y1=Y2 | pair(X1, Y1), p(X2), p(Y2). uniq有: p(X), p(Y) :- uniq(X, Y), X\=Y | pair(X, Y).
- uniq無の場合
- まず一つ目のルールだけじゃ条件2を満たせない(pair(a,b), pair(a,b)とかが同時に生成されちゃう)
- さらに状態数が多い、SVが見にくい
- 全状態数93、最も多くペアを作った最終状態5(2本目のルールのせいで同じ列には他に24の非最終状態がある)
- uniq有
- 一本のルールで条件1,2を満たしている
- 状態数が少ない、見やすい!
- 全状態数43、最も(略)最終状態5(同じ列に非最終状態は無い!)
- バグで全遷移が表示されていないが、状態数は正常
- でも状態数がどんどん多くなると結局uniq有でも見づらくなっちゃうから、微妙かな
- 全状態数が減らせる、ってだけでも良しとするか?
2009-4-13 †
先生のゼミ発表 †
- モチベーションのところで、なるべくデータを
- 原さんの名前をどこかに?
- 原さんの研究はここがよかった、自分はさらに拡張した
JSAI †
- バグがある
- 引数無しuniqの辺り
2009-4-12 †
uniq 〜ndへの道〜 †
2009-4-11 †
uniq:ndへの道 †
- 昨日の作業でだいぶ前に進んだが、
- おそらく膜のコピー、rulesetsの複製辺りをもう一度見直す必要がある
- それか状態生成の部分
2009-4-10 †
JSAI2009 †
- 論文のどこかに、「今回の実装は、そんなに大きなモデルを扱うことを想定していない」みたいなことを書いたほうがいいかな
- 少なくとも、今後どうする、をちゃんと言えるなら入れよう
uniq:ndへの道 †
- ハッシュテーブルの等価性判定は完成(一応O(2n))
- 仝澆い持つ要素数で比較
- ▲董璽屮Aから要素を取り出す→テーブルBにあるかどうか
- △汎瑛諭▲董璽屮B→テーブルA
- st_table_entry.nextがNULLかどうかで処理を決めるようにした
- strタイプ(文字列)の場合しか試していない
- よって膜同型性判定において、ルールが持つ履歴の(とりあえずの)等価性判定が出来るように。
- )譴持つruleset数(ルールテンプレート数)を比較
- rulesetsから取り出したrulesetのidを比較&rulesetが持つrule数を比較
- rulesetから取り出したruleの名前を比較&履歴を比較
- ここでのruleの名前とは、@@によって付加できるルール名ではなく、ruleのメンバnameのこと、例えばa:-b.のnameはa(マッチングの際のグループ分けに利用)。
- き 銑で異なるruleだと判定できなかった場合は、等価であるとした
- 一番簡単な例としては、↓が変わった
{ a(1). a(X) :- uniq(X) | a(X). }. ----------------------------- (before) init:14705000 14705000::14705000::{a(1). @3}. # of States = 1 (after) init:16736616 16810048::::{a(1). @3}. 16736616::16810048::{a(1). @3}. # of States = 2
- 初期状態と生成された状態では、ルールの履歴が異なる(生成された状態では履歴に1が入っている)ので、2状態
- 履歴等価性判定の補足
- 現段階で比較材料として利用できるものはとりあえず使ってみた、という感じ
- ruleの名前とか、rulesetのidとか
- つまるところ、rulesetのidを比較する(=静的に定義されたルール同士は必ず異なるものとみなす)ため、ruleのnameで比較する必要は無いかも
- ↓の中で一つでも異なると判定された場合は、その膜は非同型(としている)
- 膜が持つrulesets数、ruleset数(@の数)、rule数(@nが持つrule数)が異なる
- rulesetsのn番目に格納されているrulesetのidが異なる、またはrulesetのn番目に格納されているruleの名前が異なる(n番目に入っているruleset同士またはrule同士を判定する形になっている)
- 履歴が異なる
- 現段階で比較材料として利用できるものはとりあえず使ってみた、という感じ
- 別の例
rule0{a(X):-uniq(X)|ok(X).}. rule1{a(1). }. rule2{a(1). }. rule0{@p}, rule1{$p}, rule2{$q} :- rule1{$p, @p}, rule2{$q, @p}. rule1{$p[], @p}, rule2{$q[], @q} :- mem_eq(H1, H2, a, b, r), {+H1, @p}, {+H2, @q}. ---------------------------------------------------------------- true(r). a(L0). b(L1). {+L1. @3}, {+L0. @3}. @4
◆ rule1{a(1). a(X):-uniq(X)|ok(X).} rule2{a(1). a(X):-uniq(X)|ok(X).} ---------------------------------- false(r). a(L0). b(L1). {+L1. @4}, {+L0. @3}. @5
- rule0内のルールをrule1,2にコピーし、それぞれの膜内適当に反応させ、mem_eqで膜同型性判定
- ,魯襦璽襯謄鵐廛idと履歴が同じなのでtrueが返ってくる
- △里茲Δrule0を無くし、rule1,2内に同じルールを書くと、履歴は同じだがルールテンプレidが異なるため、テーブルの等価性判定以前にFALSE
2009-4-9 †
uniq:ndへの道 †
- もう一度ルール&ルールセット&ルールセッツ辺りのコピー部の見直し
- どの段階でのコピーでもちゃんとルールが2本になっているか
- ハッシュテーブルの同型性判定は自分で作る
- ルールテンプレートごとに判定する感じでやってみる
- まったく同じルールが同じルールセット内にあったら・・・一先ず置いておく
金曜1限 †
- 上田研の斥候として参加、朝早い
2009-4-8 †
uniq:ndへの道 †
- なんか惜しい
a(1), a(1), a(2), a(2). a(X) :- uniq(X) | ok(X). -------------------------------------------- init:14708856 14787240::::a(2). ok(1). ok(2). @3 14711328::14787240::a(2). a(2). ok(1). @3 14710848::::a(1). a(2). ok(2). @3 14708856::14711328,14710848::a(1). a(2). a(2). @3 # of States = 4
- ある状態から分岐する場合はうまくいくけど、ある状態に収束する場合に全ての遷移が出力されない
- なんかちょっとした見落としな気がする
2009-4-7 †
uniq:ndへの道 †
- horiさんと相談できた
- 状態に履歴を持たせる
- 状態が同一かどうかの判定に履歴も同一かどうかの判定を加える
- とりあえずこんなもんか?
2009-4-6深夜 †
uniq:ndへの道 †
- バカか俺は。バカだ俺は。
a(1), a(2). sample @@ a(X) :- uniq(X) | ok(X). ----------------------------------- a(1), a(2). --> ok(1), a(2).(最終状態) --> a(1), ok(2).(最終状態)
- ↓△両態を作った時点で既にルールsampleにはX=1,X=2の履歴が挿入されてるじゃないか、これが原因だ
2009-4-6 †
uniq:ndへの道 †
- rulesetsが保持するruleset数→各rule数→hash_tableの要素数→片方から一つ取り出しそれが他方にあるか
- 状態が展開されないのは、stateに関係しているというよりは、ルールが適用できないとみなされているのではなかろうか。
2009-4-5 †
vvvvvv-admin †
- になった。メーリスにも入った。
JSAI †
- 2,3週間ぶりくらいにSLIMの中をいじれた。
- 佐々木さんの同型性判定メモはもっとちゃんと読んだほうがいい。
- 原稿テンプレを落としてみた。
- 書き方はpplとかとの違いは無さそう。Latexの種類(ver.?)によってスタイルファイルの設定の仕方に違いがあるとか。誰かに聞く。
- どこに置いて執筆するか、ayanoと相談
uniq:ndへの道 †
- intの場合
a(1), a(2). a(X) :- int(X) | ok(X). init:17391736 17367664::::ok(2). ok(1). @3 17391736::17397360,17398664::a(1). a(2). @3 17397360::17367664::a(2). ok(1). @3 17398664::17367664::a(1). ok(2). @3 # of States = 4
- uniqの場合
a(1), a(2). a(X) :- uniq(X) | ok(X). init:16937080 16937080::16938224,16908992::a(1). a(2). @3 16938224::::a(2). ok(1). @3 16908992::::a(1). ok(2). @3 # of States = 3
- どちらも最終状態はok(1),ok(2).で一致してほしいところだが、今のところuniqの方は片方のアトムにルールが適用されるとそこから先の状態が展開されていない様子。
- メモ
- lmn_mem_equals_recで膜内にあるルールセットの数を考慮する同型性判定は可能、しかも簡単に
- state_equalsからは、履歴はどう見えてるんだろう?
- 要素数だけを見てる、なんてことは無いだろうか?
- 等価なルールであると判定することは出来ないんじゃないか、コンパイラから見直せばあるいは・・・
ぼやき †
- 4/11 土曜日 午後3時
- 春だ、いい天気だ
- 6/11 木曜日 午後19時 雨のち晴れ
- uniqってさ、使う?
- 6/18 木曜日 午前7時 晴れ
- 俺、発表が終わって無事研究室に帰ったら、デスクトップPCをメインPCにするんだ・・・。
添付ファイル: Image284.jpg 253件 [詳細] monkey0612__.jpg 393件 [詳細] monkey0612.jpg 236件 [詳細] uniq debug2.txt 304件 [詳細] uniq debug.txt 378件 [詳細] 090414_2.jpg 419件 [詳細] 090414_1.jpg 421件 [詳細] 090413.jpg 395件 [詳細]