Presentation is loading. Please wait.

Presentation is loading. Please wait.

応用プロジェクト後半 第2回 (12/7) 担当:橋本先生

Similar presentations


Presentation on theme: "応用プロジェクト後半 第2回 (12/7) 担当:橋本先生"— Presentation transcript:

1 応用プロジェクト後半 第2回 (12/7) 担当:橋本先生
徳永メモ H28年度版の手順から無駄を省いて大幅に簡略化しているので、もし問題が起きたらH28年度版を参照すること。 応用プロジェクト後半 第2回 (12/7) 担当:橋本先生

2 今後の予定 第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) 発表会 最終レポート 数枚。

3 課題について 日本における自動車の普及予測(燃料電池自動車、ハ イブリッド車、ガソリン車、ディーゼル車、電気自動車) MADSで実現しようとするとき、自分なりのシミュレーショ ンシナリオを考えて、その際どんなデータ(水素ステー ションの設置数、環境政策の推移など)が必要なのかに ついて考察

4 本日の内容 ※今回と次回は基本的にmanualに従うだけで終わっ てしまう SampleSimulation 1 ~ 5 を実行
資料 (下記ページからmanual2.doc) ※今回と次回は基本的にmanualに従うだけで終わっ てしまう

5 詳しく知りたい人 mads-○×.jar/ sags-○×.jarファイルを解凍してeclipse 等で見てみると継承関係とかオーバーライド関係とか、 どのクラスのどのメソッドを使ってるのかわかりますよ mads-○×.jarに関しては,わざわざ解凍しなくても, eclipseの設定で,「ソース添付」と「Javadocロケーション」 を設定すると簡単に読めるようになる

6 Eclipseの英語版をインストールした方へ
Pleiades プラグインを導入すれば日本語化できます

7 コンパイラ準拠レベル Eclipseのバージョンによって1.5と表示されたり、5.0と表 示されたりしている
それ以上のバージョンの場合は基本的に上位互換なの で変更しなくても動くはずである Collectionを用いているため コマンドプロンプト/eclipseでバージョンは合わせる セキュリティ的には昔のバージョンの保持は脆弱性に繋 がるので基本的に消しておいた方がいい

8 作業 Manual1.docに倣い、Sample1~5を実行 読解の課題もあるので簡単にプログラムの解説もします
SAGS,Eclipse起動 Tutorialからサンプルをコピペ Javaアプリケーションの実行設定を新たに作成(メイン・ 引数・クラスパス) ※プログラム作成者は、1つのプロジェクトにつき1つのプログラムを作成することを推奨しているが、面倒なうえにプロジェクト一覧がごちゃごちゃするで、1つのプロジェクト内に複数プログラムを作成する手順を載せる。問題が出た場合は28年度資料を見てください。

9 Sags起動の必要性 中核となるプログラムは これらによってsagsと通信を行うため この2つを理解すればとても良い
Mads/core/ASimulationAgent.java Mads/core/AServiceAgent.java これらによってsagsと通信を行うため この2つを理解すればとても良い

10 SAGS起動 これが起動されていることを確認する

11 ソースをコピペ 前回作成したプロジェクト“SampleSimulation”を展開し, srcの上で右クリック→new→class
クラス名“Sample2_ServiceFunctions”とする tokyo.ac.jp/mads/tutorials/Sample2_ServiceFunctions.html このページからソースをコピペして貼り付ける

12 サンプルごとに実行構成を作成 実行の構成 (実行構成はコピペ可能。ただしプロジェクト名やクラス 名などはちゃんと書きかえること)
サンプルごとにこれらを毎回作成する必要がある。 (実行構成はコピペ可能。ただしプロジェクト名やクラス 名などはちゃんと書きかえること)

13 実行および構成

14 実行構成のコピペ 前回作成した実行構成Sample1を右クリック→複製

15 main Name: Sample2 Project: SampleSimulation Main class: Jade.Boot

16 引数 プログラムの引数欄 VM引数欄 -Xms128m -Xmx512m
-container sample:Sample2_ServiceFunctions VM引数欄 -Xms128m -Xmx512m

17 クラスパス(確認だけ) 前回ちゃんとビルド・パス設定から、ユーザーライブラ リー“Mads”を設定できていたら、クラスパスタブのユー ザーエントリーはこのようになっているはず

18 SampleSimulationについて
システムとしてはかなり親切で,各メソッド等に丁寧にコ メント(英語)がついているので,それを読めば何をして いるのかわかる システム開発のコーディング規約によってはコメントを残すと 怒られる 中身について触りだけ説明する

19 SampleSimulation1 これらは何者か?
public class Sample1_HelloWorld extends ASimulationAgent { public void doWork(){ System.out.println("Hello world !!! \n My first simulation"); }

20 ASimulationAgent - madsで中核を担うクラス
public abstract class ASimulationAgent extends Agent{ 抽象クラスASimulationAgentはJADEのAgentクラスを継承している (参考:JavaAgentDEvelopmentFramework) public abstract void doWork();   抽象メソッドdoWork()は定義・呼び出し方だけ決めてある。中身は空っぽ。 …抽象メソッドは必ずオーバーライドしなければならない 実行用クラス。Thread実行にはrun()メソッドが中で必要 class WorkThread extends java.lang.Thread{ public void run(){ doWork(); } 継承とは?…サブクラスはスーパークラスの変数定義やメソッドなどを受け継ぐ。 抽象クラスASimulationAgent…具体的な記述を行わずに共通部分だけ設計して、詳細は各々のサンプルで

21 SampleSimulation1 抽象メソッドdoWork()をオーバーライドし,Hello Worldを 出力させている
オーバーライドとは… オーバーライドとはスーパークラスにおいて定義されているインスタン スメソッドを、サブクラス内で再定義することを言います。スーパークラ スのメソッドを変更することはできないが、サブクラスに特化した機能を 付与する必要がある場合などに使用します。 (参考:Javaの道,

22 SampleSimulation2 ServiceFunction sf1 = new ServiceFunction(); ServiceFunction sf2 = new ServiceFunction(2000, 30); 型 変数名 を指定してインスタンス作成 コンストラクタは異なる引数をとれる (型を選択して右クリック→Open Declarationで中身確認) sf1.setBase(2000); sf1.setRange(50); 時刻2000,範囲50とセットする Javaオブジェクト指向でよくあるセッター

23 SampleSimulation2 for (int time = 2000; time <= 2050; time++) sf1.setValue(time, 100); 100を𝑡∈[2000,2050]でセット for (int time = sf2.getBase(); time <= sf2.getBase() + sf2.getRange(); time++) sf2.setValue(time, time); 時刻timeにデータtimeをセットする

24 データ出力/プロット System.out.println("\n -- printing sf2, using getValue()"); for (int time = sf2.getBase(); time <= sf2.getBase() + sf2.getRange(); time++) System.out.println(time + " -> " + sf2.getValue(time)); System.out.println("\n -- printing sf1, using print(), for the whole time range"); sf1.print(); System.out.println("\n -- printing sf2, using print(), between 2010 and 2020"); sf2.print(2010, 2020); System.out.println("\n -- printing sf2 in the short form"); System.out.println(sf2); sf2.plot("Y axis title", "sf2 for the whole time range"); sf2.plot(2010, 2020, "Y axis title", "sf2 between 2010 and 2020");

25 データ出力/プロット ServiceFunction sfSum = sf1.plus(sf2); System.out.println("\n -- printing sfSum = sf1 + sf2"); sfSum.print(); sf1.minus(sf1).plot("Value", "Difference between sf1 and sf1"); System.out.println("\nThe minimum of sf2 is : " + sf2.min()); System.out.println("The maximum of sf2 is : " + sf2.max()); System.out.println("The mean of sf2 is :" + sf2.mean()); System.out.println("The maximum of sf2 is reached in : " + sf2.tmax()); System.out.println("The minimum of sf2 is reached in : " + sf2.tmin()); System.out.println("The function sf2 reaches 2015 for the first time in : " + sf2.firstTimeIn(2000, 2015)); sf2.saveToFile("c:\\sf2.txt");

26 その他のSampleSimulation
これらも同様に解釈していけば大丈夫


Download ppt "応用プロジェクト後半 第2回 (12/7) 担当:橋本先生"

Similar presentations


Ads by Google