• 締切済み

ループ状システムのUMLでのモデリング

ニューラルネットをUMLでモデリングする方法について教えてください。 まず、ニューラルネットとは何かですが、以下のサイトを参照して下さい。 http://www.si.hirosaki-u.ac.jp/~slame/neuro/neuron.html それを私なりにUMLでモデリングしてみたのですが、「dendrite」から「soma」へ繋がる所でループしてしまいます。 少し勉強しただけなので、あまり理解できていないのですが、ループしたモデリングは相手に対する依存が強くなるので、お勧めできないということでした。 このような場合どのようにモデリングするのがベターな方法なのでしょうか? --考えてみたモデリング-- 「soma」◆---「axon」◆---「synapse」-|   ◆---「dendrite」←----------|

みんなの回答

  • ency
  • ベストアンサー率39% (93/238)
回答No.7

# まだ見てますか? クラス図を作成する場合、通常はまずオブジェクト図から作成することが多いです。 逆に、クラス図を先に作成した場合でも、オブジェクト図で抜けがないか、冗長な箇所はないかをチェックすることが多いと思います。 で、今回の場合、結論としては、クラス図は質問者さんが描いたものと同じになってしまいました。 私の考え方はこんな感じですね。 (1) まずオブジェクト図を描いてみる。 (省略)…---[:dendrite]---+                  +---[:synapse]-------[:dendrite]---…(省略)                   |                  | (省略)…---[:dendrite]---+---[:soma]----[:axon]---+---[:synapse]-------[:dendrite]---…(省略)                   |                  | (省略)…---[:dendrite]---+                  +---[:synapse]-------[:dendrite]---…(省略) こんなのの繰返しになりそうだなぁ。。。 # ちなみに [:クラス名] の部分がオブジェクトになります。 # 本当は下線も必要なんだけど…そこまではご勘弁を。 こんな感じでまず、実際のオブジェクトについての図を描いてみます。 (2) (1) で描いたオブジェクト図を、クラス図にしてみる。   +--------------------------------------+   |                              |  1↓                              | 1 [dendrite]------◆[soma]◆------[axon]◆------[synapse]       1..*             1        1..* オブジェクト図から多重度もわかりますよね。 多重度をつけておくと、詳細な設計に落とし込むときや、実装するときなんかに「ここは多重度『*』だから、このクラスは配列で持たせないとダメだなぁ」なんてこともわかります。 あと、クラス図を描くときには、できればプロパティ名も書く習慣をつけたほうが良いですよ。 # とか言いながら、上の図でもプロパティ名は書いていませんが。。。 # まぁ、今回の場合はクラス名=プロパティ名で良いのではないかなぁ、と # いうことで、省略しました。 あと、[synapse]クラスと[dendrite]クラスの関連は、[synapse]クラスから[dendrite]クラスへの依存関係 (実線ではなくて破線の矢印) にしても良いかもしれませんね。 そうすれば関連がループすることもありませんし。 実際、[soma] を生成したときに、[axon]や[synapse]、[dendrite]といったクラスも一緒に生成されることになると思いますが、このとき[synapse]から隣[soma]所属の[dendrite]への関連は必ずしも必要ないはずです。 で、[synapse]から隣の[soma]所属の[dendrite]へパルスを伝えるときにだけその情報が必要になるわけで、他のクラス同士の接続関係よりも関係が弱いことは明らかです。 そういう場合に、依存関係を使うことが多いと思います。 で、依存関係にしてみたのが↓下図↓です。                << call >>   + - - - - - - - - - - - - - - - - - - - - - - - - +   |                              |  1↓                              | 1 [dendrite]------◆[soma]◆------[axon]◆------[synapse]       1..*             1        1..* この場合は、<< call >> (呼出し) という依存関係を使ってみました。 このくらいの図なら、デザインパターンとかを気にするまでもないかと思います。 # っていうか、そのままクラス図にしただけですし。。。 とりあえず、ご参考まで。。。

rocket2008
質問者

お礼

ご回答ありがとうございます。 すみません、しばらくみておらずお礼が遅くなってしまいました。 少し時間を掛けて読ませていただきます。

回答No.6

【soma】 |-『urgency』 [Integer] |-『importance』 [Integer] |-『value』 [String] |-【dendrite】[method] |-【axon】[method] |-【synapse.toString】[method] |-【synapse.toNumber】[method] |-【synapse.inspect】[method] UMLではありませんが、多少、それっぽいものを追加して書き直しました。 ていうか、書けるもんだなぁ。やっぱり時間をおいた方がよさげ。 dendriteとaxonはさしずめsetValue()、getValue()という所でしょうか。 UMLについてはあまり理解していませんが、 UMLにあわせるなら、なんのためのpropertyか、propertyとmethodの関連性も必要と思います。 (さらにテキストベースじゃ書けないというところが、、、) 余談ですが、UMLのLanguageは、言語や記述式ではなく、「書式」と訳すのはいかがでしょうか。 HTML/XMLにも通じると思いますが。

rocket2008
質問者

補足

お返事ありがとうございます。 >ニューラルネットは初耳ですが、 >ニューラルネットとニューロンを混同されてる、なんて事はありませんか? 多分無いと思いますが・・・なにか混同しているように見えますか? 分かりにくいのは次のところを説明していなかったからかもしれません。 最初に紹介した次のページが以下のURLなのですが、最終的にはこのモデルのモデリングをしようとしています。 ただ、どちらにしろ似たようなものなのかなと思っているのですが。 http://www.si.hirosaki-u.ac.jp/~slame/neuro/neuron2.html >神経系をUMLで表せる物ではないと思いますけどね。 >強引に書けば、こんな感じでしょうか。 >◆-「dendrite」◆-「soma」◆-「axon」◆-「synapse」◆- この辺をデザインパターンで表すと、Compositeになるのではないかと思うのですが。 ただ、木構造とも少し違うので、どのようにオブジェクト同士をつなげるのかなと考えていました。 http://www.nulab.co.jp/designPatterns/designPatterns2/designPatterns2-4.html >UMLについてはあまり理解していませんが、 >UMLにあわせるなら、なんのためのpropertyか、propertyとmethodの関連性も必要と思います。 プロパティーやメソッドまで記入しようとは考えていません。 soma、dendrite、axonのオブジェクトがどのように繋がるのかが、分からないのです。 >余談ですが、UMLのLanguageは、言語や記述式ではなく、「書式」と訳すのはいかがでしょうか。 >HTML/XMLにも通じると思いますが。 すみません、どういう意味なのかいまいち分からないのですが、HTML、XMLも使いますが、やはり言語だと思います。

回答No.5

ニューラルネットは初耳ですが、 ニューラルネットとニューロンを混同されてる、なんて事はありませんか? 神経系をUMLで表せる物ではないと思いますけどね。 強引に書けば、こんな感じでしょうか。 ◆-「dendrite」◆-「soma」◆-「axon」◆-「synapse」◆- soma(本体、神経細胞)は1つではないのですし、dendriteは自分自身と連結はしないと思います。 ニューラルネットは、いかにして オブジェクト間の時間を短くするか、という考え方だと思いますよ。 「感覚神経(入力)soma」◆-「脊髄soma」◆-「脳soma」◆-「脊髄soma」◆-「運動(出力)soma」 「感覚神経(入力)soma」◆-「脊髄soma」◆-「運動(出力)soma」 入力データが同じなら、キャッシュに保存した計算済みデータを出力する、ってのは、その典型じゃないですかね。 入力 -> キャッシュ比較 -> 計算 -> 出力     |            ^     ーーーーーーーーーーーーー| (等幅フォント、全角スペースで調整) > ループしたモデリングは相手に対する依存が強くなるので、お勧めできないということでした。 自分1つでループするのではなく、 A.b()というメソッドはB.b()というメソッド(またはプロパティ)に依存する。 B.a()はA.a()に依存する、というループだと思います。 ご参考まで。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.4

>>私も「モデル」を作るのであれば試行錯誤し、色々作りながらになると思いますが、「モデリング」は現時点で存在する「モデル」をどう記述するかという問題だと思うのですがいかがでしょか? 「どう記述するか」っていう意味に誤解があるようですね。日本語あるいは、数式でモデルの振る舞いを「記述する」ってことでしょうか?つまりはプログラミングでいえば、簡単な概要書を詳細な仕様書レベルに仕上げる話でしょうか?それとも、具体的に仕様書を見て、プログラムをどう設計するかって、話でしょうか? もし前者の話でしたら、私の専門外ですのでお役に立てないようです。 また、後者の話でしたら、前述したようなツールが自動生成するコードに「プログラム記述をまかせてしまう」って発想ですし、そのコードのアルゴリズム等が自分の考えに合わない場合は、別のツールを探せばよい(つまりは、自分で作らない)って考えだったので、こちらも残念ながら、私では力になれないようです。 >>このようなサイトでは「オブジェクト指向分析,設計においてシステムをモデル化する際の記法(図法)を規定した言語(ビジュアル・ランゲージ)です.」 と記載されています。 UMLへの評価は、日経BP社「オブジェクト指向でなぜつくるのか」を読んでいて思ったことです。もちろん、著者の意図と違うように私が受け取ったという可能性もありますが・・。

rocket2008
質問者

お礼

お返事遅くなり、すみません。 そうですか、色々ありがとうございました。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.3

>>このような場合一般的にはどのようにモデリングするのが最適なのか教えていただきたかったのです。 うーん、ちょっと手段と目的の認識に相違があるのかもしれません。 どれが最適なモデルか?っていうのは、「作ってテストしてみないとわからない」っていうのが私の印象です。なので、プログラムを作成して、動かしてみて、「ちょっと現実(予想)と違うなあ」なんて試行錯誤しながらモデルを変形して最適なものを探す。その過程でのプログラミングを楽にするためにツールを使うという考え方でした。 なので、質問が「スタートラインにおけるモデルをどう作るのが最適か?」ってことへの回答にはなっていないと思います。ただ、すでに質問欄にそれは存在すると思っていました。 >>lv4uさんのご意見ではUMLではこのようなものをモデリングするのは向かないということなのでしょうか? 情報を整理するっていう意味では有効でしょうが、上記のような「実際に動かして確認していく」って手法では、UMLはあまり役に立たないって思っています。さらにいうと、UMLとオブジェクト指向とは無関係なものだと思っています。(オブジェクト指向の流行に乗った便乗商法的な面が強かったと思ってます。無駄ってわけではないですが。)

rocket2008
質問者

補足

説明が悪く申し訳ありませんが、どうも認識のずれがあるようです。 >>どれが最適なモデルか? lv4uさんの認識は「モデル」の作り方の話しをされているようですが 私は、今現時点で存在しているモデルをどう記述するかという「モデリング」の話をしているのです。 私も「モデル」を作るのであれば試行錯誤し、色々作りながらになると思いますが、「モデリング」は現時点で存在する「モデル」をどう記述するかという問題だと思うのですがいかがでしょか? >>UMLとオブジェクト指向とは無関係なものだと思っています。 これは私は初めて聞きましたが、一般的なことなのですか? このようなサイトでは「オブジェクト指向分析,設計においてシステムをモデル化する際の記法(図法)を規定した言語(ビジュアル・ランゲージ)です.」と記載されています。 http://www.objectclub.jp/technicaldoc/uml/umlintro1 以上よろしくお願いします。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.2

>>最終的にはニューラルネット一種である、バックプロパゲーションを実装したいと思っています。 ということは、コンピュータの中にニューラルネットを構築するってことですね。 >>また、なぜ今回UMLを使ったかというと、以前はC言語で記述したのですが、保守性が悪いため、オブジェクト指向を勉強しようとおもいました。 今回はオブジェクト指向モデリングの勉強とJavaの勉強を兼ねるためです。 オブジェクト指向で保守性を上げるっていうのはわかります。UMLでモデル化してJavaにコード化ってことでしょうか。 だた、質問者さんの考えたモデルが有効って思われるなら、ループがあろうとも、それを含めて作成されればいいのではないでしょうか?研究開発って、「これはダメ」って通説に反することを偶然やってしまって大発見をするってこともあるわけですしね。 あと、この手のモデルって自動羊肉って冗談で言われる「オートマトン」で使うツールが使えるかもしれません。SPINとかSMCompilerなどです。ただ、Javaの勉強って目的には合わないかもしれませんが。 http://smc.sourceforge.net/ http://japanese.osstrans.net/software/smcompiler.html

rocket2008
質問者

補足

ご回答ありがとうございます。 なんと言えばいいのでしょう、何か新しい発見をしたいというわけではなく このような場合一般的にはどのようにモデリングするのが最適なのか教えていただきたかったのです。 lv4uさんのご意見ではUMLではこのようなものをモデリングするのは向かないということなのでしょうか?

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

ニューラルネットって初めて聞く単語ですね。参照サイトを見る限りでは、通信遅れを含んだネットワークのように思えました。 ところで、これをモデリングして、何を行いたいのでしょうか?UMLでやろうとするのが無理なのではないですか? 例えば、 ・各節と節との通信時間が○秒の場合、レスポンスが間に合うか、予定性能が発揮できるか調べたい。 ・結果が戻ってくるか、こないか確認したい。 なんて調査は、単なるお絵かきなモデルをUMLで作成しても、答えは得られないように思えますが、どうでしょう?

rocket2008
質問者

補足

lv4uさんご回答ありがとうございます。 最終的にはニューラルネット一種である、バックプロパゲーションを実装したいと思っています。 したがって、ニューラルネット自体が目的であり、lv4uさんがおっしゃったようなことが目的ではないように思います。 http://www.si.hirosaki-u.ac.jp/~slame/neuro/nnindex.html また、なぜ今回UMLを使ったかというと、以前はC言語で記述したのですが、保守性が悪いため、オブジェクト指向を勉強しようとおもいました。 今回はオブジェクト指向モデリングの勉強とJavaの勉強を兼ねるためです。

関連するQ&A