応用プロジェクト後半 第3回 (12/14) 担当:奥田先生
今後の予定 第1回(11/30) 環境構築 第2回(12/7) サンプル実行 第3回(12/14) サンプル実行 第1回(11/30) 環境構築 第2回(12/7) サンプル実行 第3回(12/14) サンプル実行 サンプル読解(長い)・最終テーマ案 第4回(12/21) SAGSの操作 データ探しの課題 第5回(1/11) 探したデータでSim. 第6回(1/16) 発表会 最終レポート 数枚。
課題について(レポート1) 提出先:徳永(tokunaga@multi.k.u-tokyo.ac.jp) 問1: Sample9_FCVDiffussionSimulationを実行し、ソースの解説をつける 問2 日本における自動車の普及予測(燃料電池自動車、ハイブリッド車、ガ ソリン車、ディーゼル車、電気自動車)をMADSで実装しようとするとき、 自分なりのシミュレーションシナリオを考えて、その際どんなデータが必 要なのか考察 提出先:徳永(tokunaga@multi.k.u-tokyo.ac.jp) Cc:郎(rou@multi.k.u-tokyo.ac.jp) 件名:応用プロジェクトレポート1 メール文面:学籍番号、名前 締切:12/28 23:59 分量:A41~2枚程度 ファイル名:応用プロジェクトレポート1_学籍番号_名前
本日の内容 SampleSimulation 6,7,9 を実行,中身を読む プログラムの簡単な解説 資料 (下記ページからmanual3.doc) http://www.multi.k.u- tokyo.ac.jp/lectures/pukiwiki/index.php?FrontPage プログラムの簡単な解説 簡単な問題を出すのでコーディングして下さい(これが終 われば帰ってよし) 暇な人はサンプル9の読解(課題)へ
詳しく知りたい人 mads-○×.jar/ sags-○×.jarファイルを解凍してeclipse 等で見てみると継承関係とかオーバーライド関係とか、 どのクラスのどのメソッドを使ってるのかわかりますよ Manual3.doc にも入手方法は書いてある。
作業 Manual1.docに倣い、Sample6,7,9を実行 読解の課題もあるので簡単にプログラムの解説もします SAGS,Eclipse起動 Tutorialからサンプルをコピペ Javaアプリケーションの実行設定を新たに作成(メイン・ 引数・クラスパス)
SampleSimulation6の結果
SampleSimulation6 これらは何者か? public class Sample6_Networks extends ASimulationAgent { public void doWork(){ NetworkGenerator gridGenerator = new TwoDimLatticeGenerator(5, false); ServiceNetworkFunction snfGrid = gridGenerator.generateNetwork(); snfGrid.plot(0, "2D Grid"); ServiceNetworkFunction snfSmWorld = (new WattsSmallWorldNetworkGenerator(25, 0.1, 4)).generateNetwork(); snfSmWorld.plot(0, "Small world network"); }
ASimulationAgent - madsで中核を担うクラス public abstract class ASimulationAgent extends Agent{ 抽象クラスASimulationAgentはJADEのAgentクラスを継承している (参考:JavaAgentDEvelopmentFramework ⇒ dade.tilab.com) public abstract void doWork(); 抽象メソッドdoWork()は定義・呼び出し方だけ決めてある。中身は空っぽ。 … 実行用クラス。Thread実行にはrun()メソッドが中で必要 class WorkThread extends java.lang.Thread{ public void run(){ doWork(); } 継承とは?…サブクラスはスーパークラスの変数定義やメソッドなどを受け継ぐ。 抽象クラスASimulationAgent…具体的な記述を行わずに共通部分だけ設計して、詳細は各々のサンプルで
SampleSimulation6 残りの部分 public class Sample6_Networks extends ASimulationAgent { public void doWork(){ NetworkGenerator gridGenerator = new TwoDimLatticeGenerator(5, false); ServiceNetworkFunction snfGrid = gridGenerator.generateNetwork(); snfGrid.plot(0, "2D Grid"); ServiceNetworkFunction snfSmWorld = (new WattsSmallWorldNetworkGenerator(25, 0.1, 4)).generateNetwork(); snfSmWorld.plot(0, "Small world network"); }
SampleSimulation6 NetworkGenerator gridGenerator = new TwoDimLatticeGenerator(5, false); ①参照型変数の型はNetworkGenerator,二次元格子クラスのインスタンス化 TwoDimLatticeGeneratorはinterface NetworkGeneratorをimplementsしている, 抽象メソッドgenerateNetwork()の中身を定義している ServiceNetworkFunction snfGrid = gridGenerator.generateNetwork(); ②ネットワーク生成 edu.uci.ics.jung.random.generatorsから。 http://grepcode.com/file/repo1.maven.org/maven2/jung/jung/1.7.5/edu/uci/ics/jung/rand om/generators/Lattice2DGenerator.java snfGrid.plot(0, "2D Grid"); ③ ServiceNetworkFunction クラス中のplotで描画 mads.plot.ServiceFunctionPlotにスーパークラスがある 格子サイズ,円形にするか否か ↓
ネットワークモデルについて詳しく知りたい人 増田直紀,今野紀雄,“複雑ネットワーク 基礎から応用まで”, 近代科学社,(2010) グラフ理論の基礎的な部分から始まり、様々なネットワークモ デルが紹介されている。 スモールワールドはミルグラムの実験に見る6次の隔たり、 スケールフリーはBAモデルのような次数分布のべき則
Javaの強い人になるために Javaのオブジェクト指向入門 Java Code Conventions デザインパターン http://www.kab-studio.biz/Programing/OOPinJava/ Java Code Conventions http://www.oracle.com/technetwork/java/codeconventions-150003.pdf デザインパターン http://www.techscore.com/tech/DesignPattern/index.html/ Reference http://www.javaroad.jp/index.htm http://www.oracle.com/technetwork/jp/java/javase/documentation/api-jsp- 316041-ja.html
SampleSimulation7 こんな結果が出てくる
SampleSimulation7 中身 ServiceNetworkFunction snfGrid = (new TwoDimLatticeGenerator(N, false)).generateNetwork(); int[] initialState = RandomInitialState.generateArray(N*N, new int[]{-1, 1}, new int[]{50,50}); Strategy isingStrategy = new Ising(Temperature); SocialInteractionSimulation isingSimulation = new SocialInteractionSimulation(snfGrid, isingStrategy, initialState, null); SocialInteractionSimulationResult result = isingSimulation.runRandomized(0, 1000, 1); ServiceFunction sfSpinDown = result.getStateEvolution(-1); sfSpinDown.plot("Percent (%)", "Spin-down evolution");
SampleSimulation7 中身 ServiceNetworkFunction snfGrid = (new TwoDimLatticeGenerator(N, false)).generateNetwork(); ①前サンプルと同様にネットワーク生成 N*Nの二次元格子 int[] initialState = RandomInitialState.generateArray(N*N, new int[]{-1, 1}, new int[]{50,50}); ②初期状態を与える {-1,1}を半々の割合で。 Strategy isingStrategy = new Ising(Temperature); ③イジングモデルという物理モデルを選択‐元の状態と他の状態で隣接格子とやり 取りして得られるエネルギーが小さければ状態をかえる SocialInteractionSimulation isingSimulation = new SocialInteractionSimulation(snfGrid, isingStrategy, initialState, null); ④シミュレーション実行(サービス関数、戦略、初期状態) あとは結果出力のためのなんたら
SampleSimulation9 結果
SampleSimulation9 中身 52~150 パラメータの設定 158~297 sagsからデータ読み込み+整形 52~150 パラメータの設定 158~297 sagsからデータ読み込み+整形 301~343 PRODUCTS ガソリン車、ハイブリッド車、燃料電池車(FCV) 347~388 SUPPLIERS ガソリン車、ハイブリッド車、燃料電池車(FCV)、H2-station 391~483 CONSUMERS Rich , veryRich , EarlyAdopter , etc. WattsSmallWorldNetowork 483~502 SIMULATION ComplexInteractionSimulation(consumers, snfComsumers, suppliers, snfSuppliers) 505~ RESULTS
SampleSimulation9 中身 長いので頑張って読解してください 開発されたシステムにしてはかなり丁寧にコメントが書い てある方なので、英語を読めばある程度分かった気分に なれます。英語は誤字が比較的多い 「MADSに関する情報ページ」→「Download」→「MADS Source - ZIP archive」
問題1 Practice1_Statistics.javaを作成 Sample3のガウス分布(sf1)をプロット ServiceFunctionを用いて傾き-0.000002,y切片0.020 の直線(sf2)をプロット 上記2つのServiceFunctionの差分(sf3=sf2-sf1)をプ ロット.(グラフタイトルもそれぞれ変更する) sf3の平均値,最小値をコンソールに出力 ※Gaussianの定義に注意
問題2 Practice2_NetworkGraphs.javaを作成 ServiceNetworkFunctionを用いる KleinbergSmallWorldNetworkGenerator, EppsteinPowerLawGeneratorクラスを用いてそれぞ れのグラフを出力させる 引数は任意に指定してよい ※どうやらBAモデルは進化を使えなさそう edu.uci.ics.jung.random.generators
終わったら お疲れ様です 今日は終了です