応用プロジェクト後半 第3回 (12/3) 担当:奥田教授
今後の予定 第1回(11/19) 環境構築 第2回(11/26) サンプル実行 第3回(12/3) サンプル実行 第1回(11/19) 環境構築 第2回(11/26) サンプル実行 第3回(12/3) サンプル実行 サンプル読解(長い)・最終テーマ案 第4回(12/10) SAGSの操作 データ探しの課題 第5回(12/17) 探したデータでSim. 第6回(12/24) 発表会 最終レポート 数枚。
課題について Sample9_FCVDiffussionSimulationを実行し、ソースの解説をつける 日本における自動車の普及予測(燃料電池自動車、ハイブリッド車、ガソリン車、ディーゼル車、電気自動車)をMADSで実装しようとするとき、自分なりのシミュレーションシナリオを考えて、その際どんなデータが必要なのか考察 A4 1~2枚 提出先:kuramoto@multi.k.u-tokyo.ac.jp 締切: 12/3? 23:59 件名: 応用プロジェクトレポート 本文: 氏名,学籍番号を明記
本日の内容 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等で見てみると継承関係とかオーバーライド関係とか、どのクラスのどのメソッドを使ってるのかわかりますよ Manual3sub.doc にも入手方法は書いてある。
作業 Manual1.docに倣い、Sample6,7,9を実行 読解の課題もあるので簡単にプログラムの解説もします SAGS,Eclipse起動 新規プロジェクト作成 Tutorialからサンプルをコピペ Javaアプリケーションの実行設定を新たに作成(メイン・引数・クラスパス) ビルドパスの設定 Ctrl + F11
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/random/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_Statistiics.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
終わったら お疲れ様です 今日は終了です