平成27年度 情報工学演習B(夜間主) †
担当者 †
- 担当:倉重(V407),松本,三林
- 担当TA:小橋(V407)
演習について †
- 演習の場所
- 演習の進め方
- 詳しくはガイダンス資料を見てください.
- 演習ですので欠席はしないでください.毎回出欠を取ります.もし,欠席せざるを得ない場合,その理由と関係書類を提出してください.
- 質問等
- 演習やレポート課題の内容,プログラミング方法についての疑問は,倉重まで質問に来て下さい.
レポートについて †
レポート作成方法 †
- レポートの書き方の説明および雛形として次のtexファイルを用いること.
- 上記texファイルをダウンロードし,解凍する.
- tar xvf report_sample.tar
- 解凍してできたファイルを用いて以下のコマンドでpdfファイルを作成する.作成したpdfファイルを開くことで,レポートの書き方等を書いた資料を読むことができる.
- platex sample.tex
- platex sample.tex
- 二回行うこと
- エラーなく,sample.dviが作成されていることを確認
- dvipdfmx sample.dvi
- evince sample.pdf
- レポートの作成は,上記ファイルを改変し,作成すること.このとき,同じようにpdfファイルを作成し,期日までに提出すること.
レポート作成上の注意 †
最終レポート提出期限 †
出欠席表等 †
演習スケジュール †
- 開講
- 月 3,4限(18:40-20:10)
- 火 3,4限(18:40-20:10)
回数 | 演習日 | 内容 | 資料 | 演習課題 |
1 | 6/9(火) | ガイダンス |
| 3.1:コマンド・入力・結果・考察を記述すること |
| 6/15(月) | | | 1のレポート提出期限 |
2 | 6/15(月) | 基礎文法 |
| 4.4:作成したプログラム・実行コマンド・入力・結果・考察を記述すること |
3 | 6/16(火) | 条件分岐 |
| 2.6.2:作成したプログラム・実行コマンド・入力・結果・考察を記述すること |
| 6/22(月) | | | 2,3のレポート提出期限 |
4 | 6/22(月) | 反復 |
| 2.6.2:作成したプログラム・実行コマンド・入力・結果・考察を記述すること.試行回数は10回で. |
5 | 6/23(火) | 配列 |
| 2.6.1:作成したプログラム・実行コマンド・入力・結果・考察を記述すること |
| 6/29(月) | | | 4,5のレポート提出期限 |
6 | 6/29(月) | ポインタ |
| 3.5:作成したプログラム・実行コマンド・入力・結果・考察を記述すること |
7 | 6/30(火) | 関数 |
| 4.5.2:作成したプログラム・実行コマンド・入力・結果・考察を記述すること |
| 7/6(月) | | | 6,7のレポート提出期限 |
8 | 7/6(月) | 構造体 |
| 2.6.1:作成したプログラム・実行コマンド・入力・結果・考察を記述すること. |
9 | 7/7(火) | 文字列処理 |
| 2.4:作成したプログラム・実行コマンド・入力・結果・考察を記述すること |
| 7/13(月) | | | 8,9のレポート提出期限 |
総合課題の目的:バンディットを解く(高い報酬を得られる)プログラムの作成 |
総合課題1の目的:個々のバンディットを解くプログラムの作成 |
10-前半 | 7/13(月) | 総合演習1 |
| 2.2:他人が聞いて理解できるように手順を言葉にする.3.4:作成したプログラム・実行コマンド・入力・結果・考察を記述すること |
10-後半 | 7/14(火) | 総合演習1 | | 演習対象のbanditはbandit00と他3つ好きなものを選ぶこと.レポートはbandit00以外で1つ好きなものを選んで,上記課題を行うこと.「2.2 bandit00.oを解く」となっているがbandit00.o以外を選ぶこと.また2.2で選んだbanditに対して3.4を解くこと.ただし、bandit00に対して、日本語の説明・プログラム作成はやっておいてほしい. |
| 7/23(木) | | | 10のレポート提出期限 |
総合課題2の目的:雛形(スコア計算部分)と自作プログラムを分けて分割コンパイル |
11-前半 | 7/23(木) | 総合演習2 |
| 2.6:どのように考えてplayer.cを作ったかの説明・作成したプログラム・実行コマンド・入力・結果・考察を記述すること |
11-後半 | 7/23(木) | 総合演習2 | | 演習対象のbanditはbandit00と他3つ好きなものを選ぶこと.レポートはbandit00以外で1つ好きなものを選んで,上記課題を行うこと. |
| 7/27(月) | | | 11のレポート提出期限 |
総合課題1の目的:ひとつのプログラムで全てのバンディットを解くプログラムの作成 |
12-前半 | 7/27(月) | 総合演習3 | | 教員に指示を仰ぐ(公式スコア登録・汎用player・all bandit...) |
12-後半 | 7/28(火) | 総合演習3 | | 演習課題:作成したplayer.cのソースコード、どのように考えて作ったかの説明、実行結果(wikiに出ているスコア)、考察 |
| 8/3(月) | | | 12のレポート提出期限 |
- 注意
- どのバンディットをプレイしているか分かるように,コンパイル時のコマンドもレポートに記述しておくこと
- 例:gcc -o game player.c bandit03.o であるなら,バンディット03を実行してることがわかる
N本腕バンディット †
N本腕バンディットとは †
本演習で用意するN本腕バンディットの一覧 †
- 注意
- テストプレイは,該当ファイルをダウンロード後に「chmod +x ファイル名」が必要
N本腕バンディット・オブジェクトファイルの使用方法 †
N本腕バンディットプレーヤー創作(総合演習) †
目的 †
- バンディットを自動的にプレイし,解く(高い報酬を得る)プログラムを作成する.
アプローチ †
- 対象のバンディットを決める
- 自分でバンディットをプレイし,高い報酬を得るためにはどのように腕を選択すべきか考える.
- 考えた選択の方法をプログラムで実装する
作成したプログラムの出来の評価方法 †
- 作成したプログラムがどれだけ良いのか,その評価はどれだけ報酬をもらえたかで為される.
- ここでは,10万回プレイをし,その中で連続した1万回のプレイで得た報酬の合計としている.これを「
スコア」とする.
- 他の人が作成したプログラムよりも高い「スコア」を得ていれば,他の人が作成したプログラムよりも優れていることを示す.
まずやること・バンディットを解くプログラムの作成 †
- このページを参考に,
- の値を決めるプログラムを作成する.
N本腕バンディットを解くプレーヤーを作成したときに,他と比較・競うために †
スコア(演習の成績とは関係なし) †
学生番号 | 氏名 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | Total Max | | | | | |
TA2012の | TAの学生さん | 9443.00 | 3197.00 | 19907.00 | 5821.00 | 20902.50 | 1143.00 | 2315.00 | 5390.00 | 7496.00 | 74647.50 | | | | | |
11034020 | 2013年度学生さん | 10000.00 | 7144.00 | 22968.00 | 7170.00 | 22986.00 | 1111.00 | 2317.00 | 10000.00 | 10000.00 | 93292.00 | | | | | |
11034016 | 2013年度学生さん | 10000.00 | 7146.00 | 23013.00 | 7145.00 | 22935.00 | 1124.00 | 2318.00 | 10000.00 | 10000.00 | 93260.00 | | | | | |
12034008 | 2014年度学生さん | 10000.00 | 7177.00 | 21565.00 | 7149.00 | 23040.00 | 1132.00 | 1094.00 | 10000.00 | 10000.00 | 73620.00 | | | | | |
12034009 | 2014年度学生さん | 10000.00 | 7102.00 | 21532.00 | 7173.00 | 22950.00 | 1102.00 | 1119.00 | 10000.00 | 10000.00 | 90015.50 | | | | | |
12034016 | 2014年度学生さん | 10000.00 | 7198.00 | 22902.00 | 7134.00 | 22990.00 | 1122.00 | 1108.00 | 10000.00 | 10000.00 | 91414.00 | | | | | |
12034023 | 2014年度学生さん | 10000.00 | 7148.00 | 23028.00 | 7162.00 | 22917.00 | 1130.00 | 1136.00 | 5817.00 | 9077.00 | 81623.00 | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
1000000 | | 10000.00 | 5241.00 | 17306.00 | 7186.00 | 22971.00 | 1127.00 | 1142.00 | 5853.00 | 6146.00 | 76279.00 | | | | | |
TA2015 | | 10000.00 | 7116.00 | 22698.00 | 7132.00 | 22824.00 | 1139.00 | 1124.00 | 10000.00 | 6195.00 | 87322.50 | | | | | |
12034006 | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | |
13034001 | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | |
13034002 | | 0 | 7170.00 | 21572.50 | 7135.00 | 22938.00 | 0 | 0 | 0 | 9107.00 | 65091.50 | | | | | |
13034003 | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | |
13034004 | | 0 | 7175.00 | 21677.50 | 7154.00 | 22995.00 | 0 | 0 | 0 | 9105.00 | 66211.00 | | | | | |
13034005 | | 10000.00 | 5167.00 | 17280.00 | 7109.00 | 22944.00 | 1105.00 | 1110.00 | 5787.00 | 6102.00 | 68749.00 | | | | | |
13034006 | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | |
13034007 | | 0 | 7172.00 | 21602.50 | 7146.00 | 22881.00 | 0 | 0 | 0 | 9116.00 | 66416.00 | | | | | |
13034008 | | 0 | 7175.00 | 21617.50 | 7138.00 | 22845.00 | 0 | 0 | 0 | 9103.00 | 66271.50 | | | | | |
13034009 | | 10000.00 | 7149.00 | 23016.00 | 7177.00 | 22962.00 | 1130.00 | 1120.00 | 10000.00 | 9114.00 | 91139.00 | | | | | |
13034010 | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | |
13034011 | | 10000.00 | 5176.00 | 20340.50 | 7141.00 | 22884.00 | 1139.00 | 1119.00 | 10000.00 | 6155.00 | 71619.50 | | | | | |
13034012 | | 5000.00 | 6163.00 | 21285.00 | 6133.00 | 22253.00 | 1061.00 | 1071.00 | 5786.00 | 10000.00 | 71952.00 | | | | | |
13034014 | | 10000.00 | 7156.00 | 23007.00 | 7152.00 | 22812.00 | 1111.00 | 1117.00 | 5796.00 | 9098.00 | 74201.00 | | | | | |
13034016 | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | |
13034017 | | 10000.00 | 7157.00 | 21607.50 | 7142.00 | 22848.00 | 1104.00 | 1116.00 | 10000.00 | 10000.00 | 89892.00 | | | | | |
13034019 | | 0 | 7164.00 | 21527.50 | 7154.00 | 22866.00 | 0 | 0 | 0 | 9101.00 | 66126.50 | | | | | |
13034020 | | 10000.00 | 7166.00 | 21517.50 | 7158.00 | 22863.00 | 1.00 | 1.00 | 3.00 | 9105.00 | 65547.50 | | | | | |
13034021 | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | |
日本語が出なくなったときの対応 †
推奨 †
- コンピュータで扱える日本語はいくつかあるが,ターミナルはEucという文字しか表示できない.プログラムの中でEuc以外の日本語を使用すると表示されなかったり読めない文字が出てきたりする.その場合,以下の方法でプログラム中の日本語をEucにする.
- Emacsで以下のコマンドを打つ
- ctrl-x (Controlキーを押しながらxを打つ)
- return
- f
- すると以下のメッセージ
- Coding system for saving file (default nil):
- が出るので,続いて以下の文字を打ってreturnキーを押す
- プログラムを保存して完了
最終手段 †
- ファイルに対して,使用している日本語の種類を強制的にかえる方法.ただし,バックアップをきちんと取っておかないとファイル自体が消えてしまったり使えないものになったりするので推奨はしない&使用する場合は非常に気をつけること
- 例
- sample.tex中の日本語を強制的にEUC-JPに変える
- コマンドライン(ターミナル)で作業
- 元となるファイルをバックアップ
- cp sample.tex sample.tex.bk
- 日本語の変換
- nkf --overwrite -e sample.tex
- emacでsample.texを開いてEUC-JPにかわっていることを確認
乱数の使い方 †
- 乱数の使い方
- banditの中で簡単に使う方法.ちゃんとした使い方は各自調べた方がよい
- 0.3の確率で何か(ランダム)をして、0.7の確率で何か(ちゃんと)をする、のような使い方
double r = (double) rand() / (double)RAND_MAX;
if( r <= 0.3){
なにか(ランダム)
}else{
なにか(ちゃんと)
}
- rand()は0からRAND_MAX(と定義されている整数)の間のランダムな数を出力する。なので、
- で、0から1の間のランダムな数となる。よって、これが(上記の例だと)0.3より小さい数である、と考えるのは0.3の確率で生じる、というのと同じことである。
int r = rand() % 5;
switch(r){
case 0:
break;
case 1:
...
}
- rand() % 5 とやると5で割ったあまりの数(0から4)が得られる。ここで、rand()はランダムな整数なので、ランダムな0から4までの値を得ることができる。