エクセル使ってシミュレーションしてる方います? at SIM
[2ch|▼Menu]
264:名無しさん@5周年
09/01/12 05:52:18
うむ、使い勝手はいいんだが遅すぎて大変

265:名無しさん@5周年
09/02/02 21:59:41
とあるワーク搬送シミュレーションを作りたいと思っています。(できればエクセルで)

20個のワークを一個づつロボットを使って装置へ供給・加工し、加工し終わったらまたロボットで
収納するっていう具合で。

目的は、ロボットの搬送時間や装置の加工時間を自由に設定して、その場合20個処理するのに
どれだけ時間がかかるかをシミュレートしたいんですが。

こういうのにエクセルは向いてないですかね?

266:名無しさん@5周年
09/02/03 01:09:24
そういう計算ならエクセルで簡単に出来そう。
むしろcとかよりもデータ入力とか結果出力とかが楽だ

267:265
09/02/03 13:21:21
ところが中々難しいんですよね。

ロボットは計5台あるんですけど、
ロボット1が搬送完了(20秒)→するとロボット2が搬送開始(10で完了)→そしてロボット3が・・・・
という風に、各ロボットの動作開始タイミングは設定値で変わるんです。
各ロボット同士で影響を与え合うというか・・・・

なのでロボットの数だけ独立したロボット用プログラムを作って、シミュレートしたいんですが、
これがなかなか難しいと思うんです。
あまりプログラムには詳しくないんですが、マルチスレッド機能ってやつがこういうときに役に立つのかな
と思ったり。
どなたかアドバイスをいただければ・・・

268:名無しさん@5周年
09/02/03 23:28:54
実機のリアルタイム処理でもやるならともかく、いきなりマルチスレッドとか言うあたりはよく解ってなさげ。

c++ならOOPで、ロボットクラスを作ってあげればいいだろうね。
excelでもマクロ(VBA)で色々処理出来るし、実はクラスもかける。

もっとも、OOPしなくても、ロボットが全然違うことをしないなら簡単だよ。
n番目のロボットはn-1(n=1のときは5番目)のロボットが搬送完了したら動作開始で、
あとはやること同じなんだよね?

269:265
09/02/04 00:57:10
回答ありがとうございます。

おっしゃるとおり、1個前のロボットが搬送完了(台に置く)すると次のロボットが
搬送開始(台から取る)するだけです。
ただ、ロボットは状況によって搬送先が変更になったりします。



270:265
09/02/04 01:19:14
補足させて頂きます。

先ほどの搬送先変更ということについてですが、一番最初のロボットが
ワークを取り出す動きをするんですが、このロボットは最後に加工されたワークを
収納する動きも担っています。
つまり、ロボット1=5ということです。

状況に応じて、ロボット1(5)は、取り出すか、収納するかを選択します。

このあたりの絡みで、ロボット単体ごとに動作プログラムを作るのがいいかなと思ったわけです。
ロボット1〜5を1つのプログラムで記述するのはちょっと無理そうなので。

オブジェクト指向というのは詳しくないのですが、ロボットの動作条件を記述したクラスを
ロボットの台数分用意すればいいということでしょうか?
その他、参考になるキーワードがあれば調べようと思いますのでなにとぞアドバイスをよろしくお願いいたします。



271:名無しさん@5周年
09/02/04 02:19:08
1.ロボットは、前のロボットがワークを放り込んだのを見て、自分も動き出す。
2.自分が運んだワークを放り込んだら、前のロボットが入れたワークが完成するのを待つ。
3.前のワークが加工完了したら、それを持って片付ける。
4.待機位置(初期位置)に復帰し、1に戻る

こんな感じね。各ロボットは同時ではないが、同じことをしている。だから同じ関数を用意してあげれば邯鄲。

クラスは(この場合)、ロボットの動作(前のロボットが動いたかチェックする、搬送する、待機する等)と、
ロボットの状態を表す情報(現在位置、遂行中の作業等)を併せ持った、貴方のいう「動作プログラミング」みたいなもの。
これを1つ用意しておいて、ロボットクラスのインスタンス(実体)を5つ作れと命令すれば5体のロボットが出来上がり。

ところで、プログラミングの経験は?basicか何か触った?

272:265
09/02/04 08:33:58
回答ありがとうございます。
プログラムの経験は無いことは無いですけど、たいしたレベルでは
ありません。
基本的にはC言語のみで、ポインタ・構造体は使ったこと無いけど
本で読んで理解している程度のレベルです。
CSVのデータを読み込んで、計算結果を新しいCSVに出力する程度の
プログラムが一杯一杯です。

本業はPLCっていうシーケンスソフトを取り扱ってるんで
プログラム自体は・・まぁこれから趣味で始めてみようかな
という程度です。
私の思い描いている完成形は、実際にロボットの絵を5つ用意して
ものすごく簡単なアニメーションで実際にロボットが動く様も
画面上にあらわしたいので、もともとVC++で作ろうかと思ってたの
ですが、VBAでも出来るのならそちらのほうがいいかなと思った次第です。

273:名無しさん@5周年
09/02/04 23:55:26
じゃあ学校の授業でifやfor文とか配列とかやったくらいと。
それならVBAもちょっと表現の仕方が違うだけでおんなじだから簡単です。

OOPt的記述だと、

R[1:.locate //ロボット1の座標
R[2].state //ロボット2の状態

みたいなロボットの各個体中心のデータ指定をするけど、
普通の構造化プログラミングなら、配列を使って

locate[1] //全ロボットの座標データを示す配列の1番目要素
state[2] //全ロボットの状態を示す配列の2番目要素

みたく、各データ毎に配列を用意して管理することになる。
VBAも配列つかえるけど、ワークシートのセルにもアクセスできるので、
ワークシート自体が巨大で高機能な配列(構造体)だから便利だよ。


こういうのが入門編としては参考になるかも。
URLリンク(www2.toyo.ac.jp)

その気になればどこまでもいけます。見栄えをよくするテクニックを使いまくっているので、まだ参考にはならないかも。
URLリンク(www1.plala.or.jp)

あとは自分でがんがって

274:265
09/02/05 23:44:44
ありがとうございます。
なるほど・・配列ですか。参考になります。

がんばってみます。


275:265
09/02/21 16:03:22
あれから検討してみましたが、やはり配列などの命令では
私の思い描いたものはできないという結論になりました。

ワークは20個あって、ロボット1は1個目をロボット2に渡したら、
すぐさま次のワークを取りに行き、またロボット2に渡すのです。
そういう風に、ロボット1は連続的に20個ワークを渡し続けるのですが、
その間にもワーク1〜19も他のロボットによって搬送されます。
また、搬送の途中にある処理装置の結果によっては搬送先も変更になるのです。

やはりこういう場合根本的に普通の一本道のプログラムでは
無理だと思います。なのでマルチスレッドかなとも思ったのですが。

276:名無しさん@5周年
09/02/21 17:17:08
Excelによる数値解析―オイラー法のうまい使い方 北陸電力ミックスオイラープロジェクトチーム 培風館

 ミックスオイラー法って、まんま 1次のシンプレクティックだ。(予感はしてたが)
 シンプレクティックには言及していて”違う”って書いてあるが誤解としか思えない

 なかなか普及しないらしい シンプレクティック を世の中に広める役にはたつか!?

 数値計算入門にエクセルで試してみるのには良さそうだが、即座に本格的なテキストに進むことをお勧めするって感じか

277:名無しさん@5周年
09/03/01 05:15:29
>>275
解析条件全てに目を通す元気はないんだけど、こんなのはどう?

 ・全てのロボットの位置を記憶させる配列を用意する
 ・ループは時刻暦で回す。たとえば、1秒刻み
 ・1ループ毎にロボットの位置をチェックし、イベントを発生させる

全てのロボットの振る舞いを定義するのはめんどくさそうだけどね。

278:名無しさん@5周年
09/05/25 01:19:24
スレチガイかもしれないけど、
expV/(expV+expV'+・・・)
という値が欲しい時、ちょっと桁数で問題があります.

V=0 V'=2000 V''=3000 ・・・(4桁以内)
くらいの値でやらなければならないのだけど、さすがにそれはオーバーフロー.
どうしたもんでしょう...

279:名無しさん@5周年
09/07/19 07:51:34
URLリンク(bbs03.gazoubbs.com)

280:名無しさん@5周年
09/07/21 15:48:41
大学でfortran95習って、ある程度はエクセルでも出来るんだなと気づいた。
バネの練成振動とか、距離の2乗分の1の力が働く系とかで質点のシュミレーション。
具体的にはオイラー法で「力→速度→位置」の順に計算する式を作る。
距離に力が依存する場合は、位置→力で循環させる。

281:名無しさん@5周年
09/07/21 16:03:57
>>278
かなり誤差が出そうだけどexp(500)ぐらいを計算して、その4乗、6乗を計算する。
自分でやってみたところ、exp(500)=1.4036+E217だったので、
exp(2000)=(exp(500))^4=3.8813*10^868
exp(3000)=(exp(500))^6=7.4645*10^1302
となりました(なるはずです。)しかし、この値は何なのか気になります…。

282:名無しさん@5周年
09/07/21 16:32:03
>>256
一年以上も前レスに返事するのも何ですが暇なので解答をー。
二項分布に従う確率を求める場合[binomdist]という関数を使えば一発で出ます。
binomdist(成功数,試行回数,成功率,基準値,0)という形で使います。
>>258のケースでは[成功数=17300/293=59.0…][試行数=17300][成功率=1/225]
を代入して求めると約0.5%となります。
というより、厳密に1/293となる成功数はないので文章をまんま解釈すると確率は0ですが。
ちなみに[0]の部分を[1]に変えると、代入した成功数以下になる確率を計算してくれます。
この場合だと当たり数が59回以下という確率で、2%ぐらいになります。こっちの方が実用的でしょう。

283:名無しさん@5周年
09/11/13 04:26:41
統計学の中心極限定理が成立するのを、エクセルでシミュレーションって
どのように行うのだろ?
469 :132人目の素数さん:2009/10/07(水) 00:06:15
 ・・・・・・・・・ワイブル分布に従うとした強度の分布も、n数が大きくなると
 正規分布に近づくのかと考えるのですが、これをエクセルでシミュレーションして
 みたいのです。n数が増えたことによってワイブル分布→正規分布へと近似されて
 いく様子をエクセルで表現する方法・・・・
統計学なんでもスレッド10
スレリンク(math板:469番)

284:名無しさん@5周年
09/11/18 02:37:34
>>283
中心極限定理を確かめたい場合、大抵乱数を利用するから、どうせならExcelよりはMathematicaだとかMaple使った方がいいです。
P.G.ホーエルの初等統計学に実験の仕方が詳しく書かれているから参照してください。

あと、Weibull分布関数か中心極限定理についての理解が浅いように思います。
分布関数の振る舞いを確かめたり、定理の内容を吟味してください。


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4381日前に更新/79 KB
担当:undef