人工無能 / 2008/09/06 (Sat) / 編集 |
人工無能の春日さんですが、とりあえず「ログ型」「辞書型」「マルコフ連鎖」のうち「マルコフ連鎖」と「辞書型」を作ってみた
少し説明書いてみるが解釈が間違っていないことを祈る、、、
そんな感じのもの、もちろん超簡易版だけどねw 入力する文章が長いほど複雑な文章をしゃべってくれる
会話にならない確率高い、コントロール不能、実装は簡単。
絶対に会話になるが、あらかじめ用意された辞書の内容しかしゃべれない、、、会話を長く成立させるにはとんでもない量の辞書が必要なので大変。逆に言うと管理者が意図していない事はしゃべらないのでコントロールが楽。
会話すればするほど自動的に頭が良くなるが、荒らしにあうとたいへんなことになる。会話ログを監視していればコントロールできるけどめんどい、、、
少し説明書いてみるが解釈が間違っていないことを祈る、、、
マルコフ連鎖
入力された文章を形態素解析して単語に分割ー>連鎖テーブルを作る- 形態素解析を行う 「学校は好きだけど、課題は嫌いだ。」->「学校/は/好き/だ/けど/、/課題/は/嫌い/だ/。/」
- 連鎖テーブルを作る
- 連鎖させる まず「学校」を選ぶと次は「は」になる、「は」の次は「好き」と「嫌い」の二種類があるので適当に「好き」を選ぶ、「好き」の次は「だ」、「だ」の次は「けど」と「。」があるが適当に「。」を選ぶ、「。」の次は何もないので終了
学校 | → | は |
は | → | 好き |
好き | → | だ |
だ | → | けど |
けど | → | 、 |
、 | → | 課題 |
課題 | → | は |
は | → | 嫌い |
嫌い | → | だ |
だ | → | 。 |
。 | → |
そうすると「学校は好きだ。」という新しい文章ができる。
そんな感じのもの、もちろん超簡易版だけどねw 入力する文章が長いほど複雑な文章をしゃべってくれる
会話にならない確率高い、コントロール不能、実装は簡単。
辞書型
「Aと言われたらXと答える」という辞書を用意しておく方法。絶対に会話になるが、あらかじめ用意された辞書の内容しかしゃべれない、、、会話を長く成立させるにはとんでもない量の辞書が必要なので大変。逆に言うと管理者が意図していない事はしゃべらないのでコントロールが楽。
ログ型
過去の会話ログを使って返事する、たとえば三日前に「おはよう」「今日は晴れたね」という会話があれば「おはよう」と言われたときに「今日は晴れたね」と返事をする会話すればするほど自動的に頭が良くなるが、荒らしにあうとたいへんなことになる。会話ログを監視していればコントロールできるけどめんどい、、、
PR
OS自作入門 / 2008/09/05 (Fri) / 編集 |
ようは「どのメモリが空いていて、どのメモリが使用中か」が知りたい、ついでに「どこがどれだけ空いてるか」がわかると素敵だ。
まずはメモリの容量を調べる
番地を1つづつ(つまり1Byteづつ)調べてもいいけど死ぬほど時間がかかるので4KBづつとかにするといい。
肝心の管理はこんなん作って
あとは「空いてるとこが連続してたらまとめる」とか「空いてる領域を教える」とか「領域を確保する(freeinfoを消す、つまりfreeではない)」とかをがんばってプログラムする
まずはメモリの容量を調べる
- キャッシュメモリを停止
- メインメモリに値を保存
- 値を取得、さっき代入した物と同じか確かめる もし違うならそこからはメモリじゃない(=その直前までは使える)
番地を1つづつ(つまり1Byteづつ)調べてもいいけど死ぬほど時間がかかるので4KBづつとかにするといい。
肝心の管理はこんなん作って
struct FREEINFO { /* あき情報、どの番地からどのくらい空いてるか */ unsigned int addr, size; }; struct MEMMAN { /* メモリ管理 */ int frees, maxfrees, lostsize, losts; struct FREEINFO free[MEMMAN_FREES]; };
あとは「空いてるとこが連続してたらまとめる」とか「空いてる領域を教える」とか「領域を確保する(freeinfoを消す、つまりfreeではない)」とかをがんばってプログラムする
OS自作入門 / 2008/09/05 (Fri) / 編集 |
asmhead.nasのメモ
- 割り込みの禁止 マスタ、スレイブ、CPUのすべての割り込みを禁止
- A20GATEの設定 互換のためにデフォルトではメモリは1Mしかつかえないので、A20GATE信号線をONにすることで1M以上のメモリが使えるようにする(キーボードコントローラを経由して行う)
- INSTRSET "i486p" EAXなどの386以降の命令が使えるようにする
- GDTを仮設定 GDT0の番地は8の倍数にしておくと少しだけ早くなる
- CR0(コントロールレジスタ0)の変更 最上位ビットを0にしてページング禁止、最下位ビットを1にしてプロテクテッドバーチャルアドレスモード(以下プロテクトモード)移行
- 32bitモードに移行