交通シミュレーションの解析プログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
とうや

交通シミュレーションの解析プログラム

#1

投稿記事 by とうや » 16年前

いつもお世話になっております。
交通のシミュレーションについて質問させていただきます。

●環境
Microsoft Visual C++ 2008 Express Edition
C言語

●交通ルール
一次元配列で考えています。
○道路配列の長さを決定
○車をランダム確率で設置
○車は右方向へある確率で進行する
○前に車がいた場合は車は進行出来ない。
○車はある確率で発生する0→1
○車はある確率で消滅する1→0

 1 = 車
 0 = 空き

○プログラム例1 時間t 消滅確率0 発生確率0 進行確率100

t   01010111
t+1   10101110
t+2 01011101
t+2   10111010

*左右の端は繋がっているものとします。

このようなプログラムを作成しました。(プログラム内では ・配列の長さ20 ・100ステップ)
動作確認していただければ幸いです。


●質問内容
これから、この車の 速度・密度・流量 を求めたいと思っています。

○密度 = 車の数 ÷ 配列の長さ 
○速度 = 動くのことの出来た車の数 ÷ 車の数
○流量 = 速度 × 密度

のプログラムを追加させたいのですが、どうすれば良いのか分かりません。
特に速度は・・・消滅、発生を加えているため、この方法でいいのかも疑問があります。
何か良い方法・アドバイスをよろしくお願いします。

組木紙織

Re:交通シミュレーションの解析プログラム

#2

投稿記事 by 組木紙織 » 16年前

まずは状況をきちんと整理して一サイクルをどのように動かすのかを決めたほうがいいと思う。

特に粒子を扱うときの速度はいくつか種類があるのでどの速度で計算するのかを決めて置く必要があります。

とうや

Re:交通シミュレーションの解析プログラム

#3

投稿記事 by とうや » 16年前

前回引き続きコメントありがとうございます!

>まずは状況をきちんと整理して一サイクルをどのように動かすのかを決めたほうがいいと思う。
1サイクルの動かし方は述べている文章で伝わってないでしょうか?
色々設定を行いたいのですが、やりたいことは例文のようなものです。


>特に粒子を扱うときの速度はいくつか種類があるのでどの速度で計算するのかを決めて置く必要があります。
どの速度・・・今回は 動くのことの出来た車の数 ÷ 車の数
では駄目でしょうか? 単位時間当たりの位置の変化に基づいた考え方にしたのですが・・・


よろしければどの部分が分からないかを教えていただければ幸いです。

non

Re:交通シミュレーションの解析プログラム

#4

投稿記事 by non » 16年前

>●質問内容
>これから、この車の 速度・密度・流量 を求めたいと思っています。

>○密度 = 車の数 ÷ 配列の長さ 
>○速度 = 動くのことの出来た車の数 ÷ 車の数
>○流量 = 速度 × 密度

>のプログラムを追加させたいのですが、どうすれば良いのか分かりません。

横槍申し訳ありません。とうやさんが質問したいのは、上の方法でプログラムする方法でしょうか。
それとも、この定義で良いかということでしょうか?

この定義でよいかについては、私はさっぱりわかりません。
これは、卒論などの研究テーマでしょうから、とうやさんがモデル化することだと思います。
その式でプログラムを作れと言うのでしたらわかりますが、とうやさんがなぜプログラムが
作れないのかわかりません。
例えば、車の数は乱数発生させたり、消滅させたりしたときにカウントすればいいし、配列の長さは
NUMですし・・・
たぶん、私以外の方も、同じ理由で傍観されているのでは?

とうや

Re:交通シミュレーションの解析プログラム

#5

投稿記事 by とうや » 16年前

アドバイスありがとうございます!
分かりにくい説明で申し訳ありません。
定義がそのようなものにしたいということです。


その式でプログラムを作っているのですが、
特に速度についてがよく分からずにいます。
速度は発生・消滅があるため、進行しているかの判断をどのうようなものにすればよいのか・・・
ということです。

それが理由で組木紙織さんも「速度にはいくつかの種類がある」とおっしゃったんだと思います。
文章力がなく申し訳ありません。

non

Re:交通シミュレーションの解析プログラム

#6

投稿記事 by non » 16年前

>速度は発生・消滅があるため、進行しているかの判断をどのうようなものにすればよいのか・・・

私はわかりませんが、プログラマの立場からすれば、
決めていただければプログラムはできますが・・・
例えば、前回のサークルから新しく加わった車と、消滅した車はのぞくとか。
この場合。移動を先に行ってますから、消滅した車が、移動した車かどうか知る必要があります。
そうすると、車のクラスを作るなどして、情報を持たせた方がいいような気がします。
つまり、現在は車の情報のため、1から9までの乱数による番号が付いているようですが、
(もしかしたら、もっと違う目的なのかも知れませんが)
これを一連番号のようにして、車1台1台に固有番号をつけて管理するのが楽だと思います。

Mist

Re:交通シミュレーションの解析プログラム

#7

投稿記事 by Mist » 16年前

速度の部分だけ

今回発生した車は「動くのことの出来た車」に含まれないから考慮しなくていいでしょう。
問題は今回動いたけども消滅してしまった車をどうするか。

グローバル変数 int move[NUM];を追加
idou関数の最初に0クリアする。
移動できた車があれば、roadと同じ位置でmoveにも1をセットしておく。
deiri関数で消滅が発生したとき、moveをチェックして1が立っていたら0に戻す。

これでmove配列には「移動したけど消滅しなかった車」という情報ができるから速度を出せますよね。

non

Re:交通シミュレーションの解析プログラム

#8

投稿記事 by non » 16年前

なるほど、これ以上、処理が複雑にならないなら、その方が楽ですね。

とうや

Re:交通シミュレーションの解析プログラム

#9

投稿記事 by とうや » 16年前

アドバイスありがとうございます!
最初はnonさんのような考えをしていたため、番号はそのような目的でつけてました。
MISTさんの方法で速度を求めてみたいと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る