スケジュール管理手法PERT-Time      解 説    “最早開始時間計算のアルゴリズム”

Slides:



Advertisements
Similar presentations
果物識別 補足資料 1. やりたい事  入力された画像内に映っている果物が何かを自動判 別するプログラムを組むこと 識別器 りんご です.
Advertisements

専門教科「情報」(2) 6/1/07. 各科目(続き) 課題研究 課題研究(1) 目標 情報に関する課題を設定し,その課題の解決 を図る学習を通して,専門的な知識と技術の 深化,総合化を図るとともに,問題解決の能 力や自発的,創造的な学習態度を育てる.
組合せ最適化輪講 2.3 連結性 川原 純. 2.3 連結性 内容 – グラフ上の節点をすべてたどるアルゴリズム 計算機上でのグラフの表現 – 強連結成分を求めるアルゴリズム トポロジカル順序を求める方法も – k- 連結、 k- 辺連結について – 2- 連結グラフの耳分解について.
データベース. レシートを見てみよう コンビニやスーパーで買物をするときの レシートを見てみよう – 何がかいてあるだろうか? – レジで全部打ち込んでいる? – なぜ、打ち込まないのにレシートには商品名 や価格が出てくるの?
プログラミング演習( 2 組) 第 9 回
ICT 機器の基本操作 ( 接続編 ) 長崎県教育センター. 操作 ( 拡大・記録・加 工 ) する役割として の機器 モニターの 役割としての 機器.
到着時刻と燃料消費量を同時に最適化する船速・航路計画
2009/12/4 グラフ (2) 第10講: 平成21年12月4日 (金) 4限 E252教室 コンピュータアルゴリズム.
ユーザインタフェース 第4回 ナビゲーション.
筋トレ支援システム 青春!筋トレ日記        作成   IE4 高橋・中務・藤本・重田・市川 
工学部 知能情報工学科 准教授 高 尚策 (コウ ショウサク)
データ構造と アルゴリズム 第十二回 知能情報学部 知能情報学科 新田直也.
テキストベースの会議における議論の効率化に関する研究
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
JavaによるCAI学習ソフトウェアの開発
仮想ブロードキャストリンクを利用した 片方向通信路の透過的経路制御 藤枝 俊輔(慶應義塾大学)
ファーストイヤー・セミナーⅡ 第8回 データの入力.
 授業を設計する(その4) 情報科教育法 後期5回 2004/11/6 太田 剛.
前回の復習 課題: ある動物の t 年における数は、前年と前々年の数の 合計で表わされるという。すなわち
【事例演習2】               2001年11月更新      「最短経路探索 (1)」           その1      解 説    “最短ルート探索のアルゴリズム”
webブラウザ proxy設定 (HTTP1.0)
配送計画最適化システム WebMETROご紹介
アルゴリズムとデータ構造 補足資料7-3 「単純選択ソートselsort.c」
13回目 複合情報検索 13-1 課題の概要 13-2 EBSCOhost の使用方法 13-3 ProQuestの使用方法
データベース.
岩井 儀雄 コンピュータ基礎演習  ー探索、整列ー 岩井 儀雄
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
システム開発実験No.7        解 説       “論理式の簡略化方法”.
①データ構造 ②アルゴリズム ③プログラム言語 ④マークアップ言語
最短路問題のための LMS(Levelwise Mesh Sparsification)
アドホックネットワークの ルーティングプロトコル
UNIXについて 松野秀平.
携帯用グループナビゲーションの 実装とその評価
データ構造とアルゴリズム論 第7章 探索のアルゴリズム
スマホでクリッカー(1) clickest を使ってみよう.
P2P方式によるオンラインゲームの研究、開発
TCP/UDP プロセス間の通信のためのプロトコル TCP:信頼性高、処理時間大 UDP:信頼性低、処理時間小 ftp SMTP HTTP
MPIを用いた並列処理 ~GAによるTSPの解法~
第9章 Error and Control Messages (ICMP)
アルゴリズムとデータ構造 2013年7月16日
グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29.
プログラミング入門 電卓を作ろう・パートIV!!.
WWW上の効率的な ハブ探索法の提案と実装
 情報の授業 アルゴリズムとプログラム(1) Go.Ota.
シミュレーション学講義 第**回 スケジューリング問題とJSSP.
多変量解析ゼミ 第10回 第12章クラスター分析 発表者 直江 宗紀.
早わかりアントコロニー最適化 (Ant Colony Optimization)
P2P方式と構成の一般化 負荷の分散、ゲームセッションのデザイン.
日程計画 (scheduling) 大規模なプロジェクトの日程を計画し、その進行を管理する手法。
データベース設計 第7回 実用データベースの運用例 クライアント=サーバシステム(1)
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
アルゴリズムとデータ構造 2011年7月8日課題の復習
P2P ネットワーク上で 実時間ストリーミングを実現するための 分散制御プロトコルの提案
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
配送計画最適化システム WebMETROのご紹介
第16章 動的計画法 アルゴリズムイントロダクション.
アルゴリズムとデータ構造 2011年6月16日
情報ネットワーク 岡村耕二.
アドホックルーティングにおける 省電力フラッディング手法の提案
衛星回線を含むネットワークにおける 動的経路制御に関する研究
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
コストのついたグラフの探索 分枝限定法 A*アルゴリズム.
時間情報に基づく多様な中心性に着目した 動的ネットワーク分析の提案
離散数学 11. その他のアルゴリズム 五島.
アルゴリズムとデータ構造 2013年6月20日
新人研修発表 平成13年5月14日(月) 探索アルゴリズム ハッシュ法について 株式会社 エーアイネット・テクノロジ          須田 哲生.
スケジューリングってなんだ? -やり方ひとつで大きく変わる
第4章 空間解析 2.ネットワーク分析 (2) 最大流問題
アルゴリズム ~すべてのプログラムの基礎~.
「図書系職員のための アプリケーション開発講習会」
Presentation transcript:

  スケジュール管理手法PERT-Time      解 説    “最早開始時間計算のアルゴリズム”

【 最早開始時間計算アルゴリズムはどこに役立つか 】 ① 多数の仕事を多くの人が協力して行うとき,遅くても  【 最早開始時間計算アルゴリズムはどこに役立つか 】 ① 多数の仕事を多くの人が協力して行うとき,遅くても  いつまで仕事が終わるか事前に計算するアルゴリズム.  「スケジュール管理」の標準アルゴリズムとして有名.  (実用上は,最も重点的に管理すべきクリティカルパスや作業工程が            どの程度余裕があるかの日数計算等の計算も含む) ② 最短経路探索と同様に,情報処理技術者試験にもよく   出題される代表的なアルゴリズム (とゆうことは   ソフトウェア開発技術者が知っておくべき基本的な   アルゴリズム).

【問題】 グループを組んで,以下のような作業項目と作業日数を もつプログラムを開発するとしたとき,このプログラムは最も早く 【問題】 グループを組んで,以下のような作業項目と作業日数を もつプログラムを開発するとしたとき,このプログラムは最も早く て何日後に完成するか? (注)“データベーススキーマ設計”と“CGIプログラムの調査”が終わらないと次の作業“CGIプログラムの設計”は開始できない. CGIプログラムの設計 12日 4 6 データベースのスキーマ設計 CGIプログラム作成&テスト 5日 9日 プログラム機能の決定 8日 DBアクセス プログラム作成 総合テスト 7日 1 5日 2 4日 7 8 CGIプログラムの調査 3日 6日 10日 3 5 画面設計 ホームページ作成 HTML調査とデザイン 《 C/S型プログラム開発作業を例としたアローダイアグラム 》

基本的な考え方は,すべて最短経路探索と同じ. 1 基本的な考え方は,すべて最短経路探索と同じ.      トークンを同じ速さで移動させる. 12日 4 6 5日 9日 8日 5日 7日 1 2 4日 7 8 6日 10日 3 5 3日

トークンの移動結果を各ノードに記録して置く 2 トークンの移動結果を各ノードに記録して置く 14 2 2 -∞  - 2 -∞ - 2 1 経由時間合計 1つ前の経由ノード ノードに入ってくる 入力アークの数 (あらかじめ計算) ノード4に入ってくる入力アーク数 12日 4 6 5 1 1 -∞  - 1 -∞ - 2 1 5日 9日 8日 7日 1 5日 2 4日 7 8 -∞ - 2 3 6日 10日 3 5 3日 -∞  - 1 8 2 1 -∞  - 1

トークンがノードに到着したとき 3 ① すべてのトークンが到着してるかを見て,到着していなければ待つ(=トークンを ① すべてのトークンが到着してるかを見て,到着していなければ待つ(=トークンを   出発させ,次の仕事を始めるためには,前の仕事がすべて終わらなければならな   いことを意味している). 14 2 2 1 ノードにトークンが到達したら,“入力アーク数” (=未到着のトークン数を示すデータを兼ねている)を一つ減らす. -∞ - 2 1 経由時間合計 1つ前の経由ノード すでにトークンが出発したノードでは“入力アーク数”は0以外の数(例えば-1)にしておく. 12日 4 6 ノードに入ってくる 入力アークの数 5 1 -1 -∞ - 2 1 5日 9日 8日 7日 1 2 4日 7 8 5日 3日 -∞ - 2 3 6日 10日 3 5 8 2  1 -∞ - 2  0  1

② ノードに記録されている経由時間合計とトークンが経由してきた時間合計を比較する もしトークンが経由してきた時間合計の方が長ければ ② ノードに記録されている経由時間合計とトークンが経由してきた時間合計を比較する      もしトークンが経由してきた時間合計の方が長ければ          ・ノードの経由時間合計を長い方に書き換える          ・1つ前の経由ノードをトークンが経由してきたノードに書き換える 15 3 経由時間合計の長い方の時間が経たな ければ,次の仕事は開始できないので, 最も長い経由時間合計(=その時間にな れば,次の仕事が開始できる最早の時間) をノードに記録する.同時に1つ前の経由 ノードを記録する 14 2 -∞ - 2 1 経由時間合計 1つ前の経由ノード ノードに入ってくる 入力アークの数 12日 4 6 -∞ - 2 1 5日 9日 8日 5日 7日 1 2 4日 7 8 5 1 ‐1 3日 -∞ - 2 3 6日 10日 3 5 18 3 2 8 2 ‐1

トークンがノードから出発するとき 4 ③ 経由時間合計が一番短いノードからトークンを出発させる. ③ 経由時間合計が一番短いノードからトークンを出発させる. なぜなら,計算の都合上,一気にトークンが次のノードに移動したのであって,一番 短い経由時間合計の時間には,他のトークンは実際にはアーク上にあり,出発でき ない. 15 3 2 -∞ - 2 1 経由時間合計  出発させるノードを探すには,入力 ノード数がゼロ(=すべてのトークン が到着)のノードだけ探せばいい. (※入力ノード数が-1のノードは, すでにトークンが出発したノードを 示しているので対象外) 1つ前の経由ノード ノードに入ってくる 入力アーク数 12日 6 4 -∞ - 2 1 5日 9日 8日 7日 1 5日 2 4日 7 8 5 1 -1 -∞ - 2 3 3日 6日 10日 3 8 2 -1 5 18 3 2

アルゴリズムをプログラムにするときの考え方 アークで接続している先のノード番号と作業時間は,link表がもっている. 例えば,ノード2から接続しているノードと時間は・・link[i].connectNode link[i].time (詳しくはデータ構造で説明) History[ 4 ].totalTime History[ 4 ].previousNode History[ 4 ].inputArcCount 15 3 2 4 対応 9日 int q ; // トークンを送るノード番号 q = 4; // ノード4にトークンを送る 5日 7日 1 2 5 1 ‐1 3日 int p ; // 着目しているノード番号 p = 3; //  ノード3に着目する 3 8 2 ‐1

《 最早開始時間計算のアルゴリズム 》 トークンの到着 トークンの 出発 《 最早開始時間計算のアルゴリズム 》  経由経路表(route)の初期値として0,最長経由時間合計表(totalTime) の初期値として  -∞をそれぞれ設定する  p に 始点ノード番号をセットする        // トークンをpに置く  pが終点ノードに一致するまで繰返す       // トークンがpに到着するまで繰り返す pにリンクしているすべてのノードについて繰返す // 繰返しトークンを移動する    qをリンク先のノードの番号とする;   // トークンの1つの移動先をqとする    ノードqまでの時間をtime_q とする;      ①ノードqにまだトークンが未到着のアークがあるか(“入力アーク数”>0)      /* ②ノードqに到着したトークンの数と経過距離の比較 */             ノードpまでの経由時間 + time_q > ノードqの経由時間      /* ノードpを経由したルートの方が,経由時間合計が短いので              ノードp経由に変更する */   ノードqの“経由時間合計”をノードpの“経由時間合計”+ time_q にする   ノードqの“1つ前の経由ノード”をpにする    ノードqの“入力アーク数”を一つ減らす //qの未到達のアーク数を減らす すべてのトークンが出発したことを示すために“入力アーク数”を-1にする  トークンの到着 Yes No トークンの 出発 /* ③ 次にトークンを出発させるノードの決定 */   ネットーク全体から“入力するアーク数”が0で ,かつ経由時間の最も短い   ノードを選び出し,次にトークンを進めるべきノードをpとする

【参考】最短経路探索のアルゴリズム トークンの到着 トークンの 出発  経由経路表(route)の初期値として0,最短経由距離表(totalDist) の初期値として  ∞をそれぞれ設定する  p に 始点ノード番号をセットする         // トークンをpに置く  pが終点ノードに一致するまで繰返す       // トークンがpに到着するまで繰り返す pにリンクしているすべてのノードについて繰返す // 繰返しトークンを移動する   qをリンク先のノードの番号とする;  //トークンの1つの移動先をqとする    ノードqまでの距離をdist_q とする      ノードqの出発済みを示すフラッグが降りているか?       /* ①ノードqに到着したトークンの経過距離比較 */   ノードpまでの経由距離 + dist_q < ノードqの経由距離 /* ノードpを経由したルートの方が,経由距離合計が短いので       ノードp経由に変更する */   ノードqの“経由距離”をノードpまでの“経由距離 ”+dist_qにする;   ノードqの“1つ前の経由ノード”をpにする;   ノードqのフラッグを下げる トークンが出発済みであることを示すために,ノードpのフラッグを上げる Yes No トークンの到着 トークンの 出発 /* ② 次にトークンを出発させるノードの決定 */   ネットーク全体からフラッグが立っていなくて,かつ経由距離の最も短い   ノードを選び出し,次にトークンを進めるべきノードをpとする

《 ネットワークを表すデータ構造 》 Node[] 1 1 2 2 4 2 6 2 Link[] 《 ネットワークを表すデータ構造 》 Node[] 1 2 3 4 1 1 2 2 4 2 6 2 ノード1に接続するリンク(=アーク)データの位置(linkPosition) ノード2に接続するリンク(=アーク)データの位置(linkPosition) ノード3に接続するリンク(=アーク)データの位置(linkPosition) ノード4に接続するリンク(=アーク)データの位置(linkPosition) ノード4に接続するリンク数(linkSize) Link[] 1 2 3 4 5 6 7 8 2 5 3 3 4 9 4 7 5 10 6 12 7 5 connectNode 12日 time 4 6 9日 5日 8日 5日 7日 4日 1 2 7 8 3日 10日 6日 3 5

アルゴリズムの設計と並んで データ構造をいかに設計するかが,計算効率のよさを決める データ構造設計の重要性