Archive for the ‘進化計算班議事録’ Category

進化計算班3回目終了、企業さんと顔合わせ

木曜日, 10月 18th, 2012

午前中はデュアル・ソリューションさんと顔合わせ。(農学部の)鹿内先生→宮城先生→河野先生→遠藤先生、という流れであちこち突っついてみているらしい。所長挨拶に書かれてるように、「ポータルサイト・比較サイト等のWEBサイト」とか「ソーシャルゲームの企画・開発」をしてるようで、取りあえず次回はこちらが先方に伺って具体的な中身を見せてもらえる予定。

進化計算班は3回目が終了。本題は「拡張GA紹介」という名目で、プログラム自体を自動生成する「遺伝的プログラミング」と、人間に評価してもらう事で定性的な観点を組み込む「インタラクティブGA」のお話。

オプションは、FizzBuzzで相互にコードレビュー(学生らで簡単ではあるけどコメントし合う)に加えて、システム設計のプチ体験。具体的にはマインスイーパを例に、ユースケース図を考え、簡易的な外部設計として全体フローをフローチャートで捉え直し、機能項目毎にユースケース記述を途中まで設計してみました。そんなに大きくない規模なはずですが、機能洗い出し漏れやら共通機能浮かび上がるやらを体験できるので、面白いんじゃないかと想像。(多分)。

P.S.
研究室紹介の日程は、まだ調整中らしいです。学生間ではSkypeで周知されてるっぽいですが、「現時点の案」がどこかのタイミングで「決定事項」として誤解されて伝わってたりしませんか?

進化計算班2回目終了

木曜日, 10月 11th, 2012

今日は学生実験な一日。

午前中は準備で終わって、昼食時間で明日から始まる情報ネットワーク演習2の準備。長田先生&TAの皆さんがほぼやってくれて、私がやったのはスイッチ本体の稼働&変な設定保存されてないかの確認ぐらいですが。news-ieで告知済みですが、情報ネットワーク演習(実験2)ではLANケーブル1人1本持参して来ないと実習で一部困ります。自作/購入/借りるなりしてゲットしてきてください。(LANケーブル作成演習も予定してますが、時間の猶予次第でやるかどうかが変わる可能性あり)

午後過ぎに買っておいたバジルチキンサンドを食べて、小休憩。どちらのサンドも200円ですが、相変わらず旨い。下手なバーガー食べるよりこっちが旨いって。

本日メインの実験4・進化計算班は今回が2週目。今日のテーマは「GA基礎」で、先週の復習から質問攻めしつつ、ナップサック問題を例にコーディング決定、集団作成、点数付与、自然淘汰、交叉、突然変異といった具体的な処理手続きについて実装イメージできる程度に紹介したつもりです。振り返りとして、探索空間での動作イメージや、巡回セールスマン問題でのイメージ、また「組み合わせ最適化問題」に適用する観点からの整理をして本題を終了。

オプションではemacs lisp (auto-install.el, auto-complete.el) のインストール(PDF)をして自動補完できるようにして、FizzBuzz30分(PDF)してもらいました。コードレビューする時間はなかったので、来週に持ち越しです。というか一つのリポジトリを6人+αでcommit+pushしまくって使ってるので、衝突やらブランチいつの間にか誰かが作ってしまった嘉本か混乱模様に陥り、pushするのに時間がかかってただけかもしれない。

以前ブログで選書記事として紹介した「データを未来に活かす」に関連した話をすると興味を持つ学生がいたので、貸してみたり。GA関連本は1冊しか売れませんでしたが、ま、Web上にいろんな情報転がってるキーワードだし。

進化計算班1回目終了

木曜日, 10月 4th, 2012

昨日から後期の授業が始まり、今日が3年次向け学生実験「情報工学実験4」の木曜クラス1回目です。進化計算班も木曜クラスということで、1回目が終了しました。

全体的な流れは前に書いた記事を参照してもらうとして、1回目はガイダンス探索/最適化問題/近似解法/客観的評価といったことについてのお勉強。最初の1コマ目(90分)は、座学に近い形でやりつつ説明中に学生へ質問しまくるという形式でやってるので、(同じ質問を複数人に当ててるのでユニーク数は一桁台だと思うけど)累積質問回数は多分20〜30ぐらいなんじゃないかと。週に1回はパス可能ですが、基本的には何かしら答えてもらい、その理由や背景について突っ込んだり解説を加えたりしながらやってます。私自身が質問を楽しんでいるという側面はあるのですが、聞かれる方も聞かれた方が参加する意義を持ちやすいだろうという意図で昔からこの形式は続けています。

2コマ目は、実習上「複数人で同一リポジトリを共有しながら開発を進める」ことが避けられないというかそれを体験させること自体が一つの目的ではあるので、メンバ全員で共用のリポジトリを用意しつつMercurial演習してました。一人一人プロジェクタに移しながら hg clone/edit/commit/push させたり、意図的に衝突起こさせてどうなるかを確認しつつ、衝突解消したり。

一人だけ hg commit がうまくいかなかったのですが、後で聞いたら commit log を記入した後でエディタを一時停止(EmacsならCtrl+z)してたらしい。その場で気づかなかったのが悔やまれるw

リポジトリを共有利用する時にパーミッションとかどうしてるのかという質問が届きましたが、進化計算班では専用アカウントを用意しています。一般的にはauthorized_keysで管理するような気がしますが、そこまではやってない(それに気づいてる学生はやってる、ぐらいだ)な。ググると「Gitosis は、authorized_keys ファイルを管理したりちょっとしたアクセス制御を行ったりするためのスクリプト群」なんていうのもあるらしい。

進化計算班が(ほぼ)終了

水曜日, 8月 8th, 2012

午前中は進化計算班の最終提出物(ソース、プレゼン、ドキュメント一式)に目を通し、気になる点へコメント。発表時には「第三者が見ても設計がイメージしにくいな」という点も多々あったのですが、コーディング周り等当日コメント指摘した点についてのブラッシュアップが追加されててGoodです。ベストには遠いかもしれませんが、こういう経験を次回(後期の実験なり4年次での卒研なり、就職後なり)に繋げていってもらえればそれで良いんじゃないかと。「ほぼ終了」なのは、一つ未提出っぽいのがあるのでその確認中ってことです。

ちなみに、進化計算班は3年次向けの学生実験の一つ(サーバ班、コンテンツ班などなど多数あり)で、遺伝的アルゴリズムの実装を通したプチ卒研体験を目指してやってます。大まかな流れとしては、最初の3週間は「お勉強の時間」で、「探索」という概念を勉強しつついくつかの探索アルゴリズムと共に遺伝的アルゴリズムの特徴をイメージできることを目指す。次の2週間程度は「自分で問題を設計する」のが目標で、実際に探索したい問題を設計する。過去の成果物を眺めると分かりますがいろんな提案してきてくれますし、一部は別講義でのオフィシャル・ツールに格上げされたりもしました。残りの10週間程度が具体的な実装。ただし、自分たちで考案した問題を直接実装するのではなく、それを別の人に開発依頼しつつ自分たちはその別の人(クライアント)から開発を請け負うという形式を取っています。

この「開発を請け負う」というのは面倒な方針だし、自分でやりたいことを実装する訳でもないという点で苦痛なこともあるかもしれない。けど、就職後はそういうことが当然になってきたりするし、他人が何を望んでいるかをうまく引き出すスキルであったり、より良いものに仕様をブラッシュアップしていくスキルだったり、実際の現場で求められるであろう事柄の一つは実際に起きるだろうということを期待してこういう方針で続けています。

学生実験という点で特に力を入れている教育効果としては、「同じ世代の人らがどういう風にコーディングしているか」を見ながらコメントすることで、ステップアップしやすくすることを心がけているつもり。例えばFizzBuzzとか小さな問題でリアルタイム・コーディングして貰う様子を眺めつつ、コミットしてもらったソースをベースにリファクタリングをしてみたり。コードのテスト方法や、テストの自動化をTipsとして紹介したり。実際のGA実装に入ってからはコードレビューを主体として「グローバル変数使わないように設計し直そう。例えばここはどうしたら良い?/ここはこういうロジックで書いた方が読みやすい/実際にデバッグしよう!」とか、その時々でやってる事は違いますが基本はコード・レビューです。

そんなこんなで現在やってる学生実験では、主に「ゼロから1,000行程度のコードを書ける」レベルを目指しています。問題設定次第でもありますが、大抵どのグループも最低そのぐらいの量を書くことが多い。当初は「関数って何?」レベルの人もいますが、commit logを眺める限りでは最終的には30回ぐらいはコミットしてて、実験中にもそれなりに説明できつつ、こちらのコメントを理解できるようになってるらしい。勿論そこまで到達できない人もいることはいますが、それでも共同開発を通して自分のコミットが活かされてシミュレーションが動くという体験は必要なんだと思ってます。

という感じで進化計算班をやっていますが、来年度からは別テーマに変更することを想定しています。もう少しNAL研に近い内容にしたい。テーマ次第でもありますが、そもそもの達成目標をどうしようかなぁ、と悩んでいます。便利なツールを使いながら云々という方向にするか、泥臭い所から実装するようにするか、etc.。

(進化計算班議事録) 2011/04/18, 全体概説+イントロ+zsh補足+Mercurial補足

月曜日, 4月 18th, 2011

情報工学実験3/進化計算班の1回目が終了しました。MLに議事録を流しているのですが、参照し難い部分もあるので公開を兼ねてHTML版を投稿。


目次
議事録
zsh補足
Mercurial補足
 ・(1) 環境変数の設定。
 ・(2) hg 設定ファイルの編集。
 ・(3) リモートでリポジトリを作成。
 ・(4) ローカルにリポジトリを複製する。
 ・(5) リポジトリ内で作業する。
 ・(6) 必要に応じて古いバージョンに戻す。
 ・(extra.) マージの例。
 ・(extra.) 必要ないファイルを add 対象にしてしまった場合。


議事録

・プレガイダンス
・レポート確認: Level0: オープンソース外観
背景・基礎知識
・課題: Level1
・グループ作成
 ・グループ1: 095751J 東川上一成, 095720J 慶留間諒太, 095731D 新城幸之佑
 ・グループ2: 095771C 宮里友美, 095725K 重信琢人
 ・グループ3: 095708K 太田陽祐, 095701B 青木史林
・オプション: zsh & Mercurial 実習(複数人でシェアする使い方)。
・次回予定: GA概要、auto-complete.el &簡易プログラミング予定。


zsh 補足

参考サイト
漢のzsh
zshは、tcshやbash等を使っている以下のような症状に悩んでいる人に有効 である。

今回は便利な設定をコピーして利用しましたが、各設定の意味を理解するには自分で設定を読んだり、上記サイトやドキュメントを読んでください。便利な機能についてもいろいろ解説されてます。


Mercurial 補足

利用前の準備(個別リポジトリの場合)

バージョン管理システムの一例として学科でも提供してるMercurialを利用して開発を進めます。

(1) 環境変数の設定。
~/.zshrc 等のシェル用設定ファイルで
export HGENCODING=UTF-8
EDITOR=emacs

を設定。shark 側は設定済みですので、ローカル側にやっておきましょう。EDITOR は設定しなくても良いですが、デフォルトだと commit 時のエディタが vi になります。vi好きな人はviを指定しましょう。

(2) hg 設定ファイルの編集。
commit する際のユーザ名を指定しておきましょう。
~/.hgrc に
[ui]
username = Naruaki TOMA 

ぐらいを設定。ローカル側でやっときましょう。これを設定しておくと、commit 時の username が見つからなかったとかいうwarning が出なくなります。

(3) リモートでリポジトリを作成。
shark にログインし、リポジトリを作成します。リポジトリの場所は、~info3/HG/2011/ 以下にしてください。
 ・個人利用のものは ~info3/HG/2011/e095700/
 ・グループ利用のものは ~info3/HG/2011/groupname/
 ・全員共同利用のものは ~info3/HG/2011/share2/
とします。

例えば、e095700 というアカウントの人が個人利用のリポジトリをつくる場合には以下のようにします。

macbook> ssh info3@shark.nal.ie.u-ryukyu.ac.jp
shark% cd HG/2011
shark% hg init e095700

これで shark 側での作業は終了です。

(4) ローカルにリポジトリを複製する。
実際に作業するには、ローカル側で前述のリポジトリを複製し、ローカル内で管理するようにします。リポジトリを複製するためには以下のコマンドを実行しましょう。
macbook> mkdir temp	#作業用ディレクトリを作成
macbook> cd temp
macbook> hg clone ssh://info3@shark.nal.ie.u-ryukyu.ac.jp//home/info3/HG/2011/e095700/

引数が長ったらしいですが、これも一度zshで実行しておくと、「hg」や「hg clone」まで入力した状態で Ctrl+P で以前利用した引数を自動で補完してくれます。

(5) リポジトリ内で作業する。
ファイル生成したら add して、必要な時に commit します。
macbook> hg add (ファイル名)
 *ファイル名を省略することが可能ですが、その場合には
  未登録のファイル全てが対象になりますので、不要な
  ファイルまで登録候補になってないか確認してください。
macbook> hg commit
 *ただし、この時の commit ではメインリポジトリには反映しません
  ので、ローカルのみの管理になります。サーバ上にも反映するには
  commit してから push します。
macbook> hg push
 *普段は commit だけをやっておき、共用が必要になるタイミングで
  push する使い方になるでしょう。

(6) 必要に応じて古いバージョンに戻す。
macbook> hg log -v
 で更新履歴を参照できるので、そこで付けられてるバージョン番号を見つけ、
macbook> hg update -r (バージョン番号)
 として指定したバージョンに戻します。

(extra.) マージの例。
前提:サーバ側に最新状態があり、ローカル側で古いリポジトリで作業をしてしまった。
macbook> emacs test
macbook> hg commit
macbook> hg push
 *エラー!
macbook> hg pull
macbook> hg merge
 *新旧混ざったファイルが生成されるので、それを目視確認しながら編集。
macbook> emacs test
macbook> hg resolve --list	# マージ状態の確認
macbook> hg resolve -m test
 *編集し終えたことを明示。
macbook> hg commit
macbook> hg push

(extra.) 必要ないファイルを add 対象にしてしまった場合。
macbook> hg status
macbook> hg revert test~
macbook> hg status
 *問題無ければcommit&push