因果モデルと非因果モデル
因果モデルとは
原因と結果の関係、いわゆる「因果関係」がはっきりしているモデル。
代入操作によって、計算する順番が決まっているモデル。
BasicやCなどのプログラミング言語はこの方式。実際に手計算で問題を解くのもこっちの考え方。
非因果モデルとは
計算する順番が決まっていないモデル。
等号で表現された方程式で作られたモデル。
因果モデルと異なり、入出力の関係を明示する必要がないため、接続がしやすく、作成した部品を再利用しやすいのが特徴。
Modelicaの処理系はこちらの「非因果モデル」。
※因果モデルが作れないわけではない。
非因果モデルはどうやって計算される?
コンピュータで計算する場合、因果モデルと同様に入出力を明確にする必要がある。
具体的には、既知変数(入力)と未知変数(出力)の判定をしている
- 時間関数で定義された変数、積分演算の状態変数は既知変数
- 既知変数を使って唯一の変数が解ける式がある場合、その変数は未知変数。
- 2.の未知変数が他の式で使われる場合、その式では既知変数とする
- ある変数がただ一つの式のみに表れる場合、未知変数。
当たり前だけど、方程式の数に対して、未知変数の数が多い場合は数学的に解けない
こうやって整理すると、非因果モデルはモデリングをしやすくするためのテクニックのように感じる。
モデルベース開発とは
事前認識(&イメージ)
- 制御開発で行われてきた手法で、それが開発全般にも使われるようになってきた
- 仕様をモデルであらわすため、誰が見てもわかりやすい
- モデルは動かせるため、動く仕様書とも言われる
- 開発上流での完成度が上がり、開発期間短縮が見込める
- 国内ではマツダのSKYACTIVEの開発が有名
モデルとは
ここでいうモデルはいわゆる「数理モデル」で、数式で現象を表現したもの。
イメージ図のような概念図や模型ではない。
要するに、製品の機能を数式で表現したモデルを作成し、それを仕様として、それを基に製品開発を進めていくのがモデルベース開発。
モデルベース開発(ソフトウェア開発における)
開発プロセス改善手法解説:いまさら聞けない モデルベース開発入門 (1/2) - MONOist(モノイスト)
モデルベース開発において言及される代表的な特徴
- モデルによる仕様の表現・定義「実行可能な仕様書」
- モデルのシミュレーションによる設計の詳細化、妥当性検証
- モデルから自動コード生成による実装
- テスト・検証におけるモデルの再利用
従来手法の問題点として指摘されていた、紙の仕様書で不足する情報を補完するために「モデル」を用いることで、「仕様を明確化する」「開発プロセス全体のコミュニケーションを改善する」「開発の上流工程を重視する」というコンセプトはどれも共通
これは組み込みソフトウェア設計におけるモデルベース開発の考え方。モデルからのコード生成など、プログラミングを意識させる部分はあるものの、製品開発全般に拡張しても違和感は無い。というか、違う意味で使うなら用語変えるか。
雑記
最近、思うこと
モデルベース開発はモデルで仕様を表現することにより、誰が見てもわかるというのがある。
でも、複雑なモデルだったら、複雑なプログラムコードを読むように簡単にはわからないし、そもそも数学的な基礎知識、リテラシーが必要。
効率的に運用するなら専門的知識(ある程度のリテラシー)を持った専門家の領域になるだろうし、誰にも使えるようになると、具体的かつ平易にわかりやすくしないといけない。
基本的には専門家がわかりやすくする工夫とそれ以外の人が基礎知識として知識の底上げをしていく努力の両方が必要だと思うけど、なかなか難しいよね。どちらにしても面倒だし。
Modelica勉強中
後でまとめたい、調べたいキーワードの覚書
- 因果/非因果モデリング
- class、modelとは?
- extend(継承)の使い方
- equationとalgorithmの違い
- ライブラリの使い方
- Modelica Standard Libraryの構造。できれば今後の参考書代わりに使いたい
- 介在変数と通過変数の取り扱い
- 教科書的な式から、簡単なライブラリをいくつか作成する
この辺を少しずつまとめられたらいいな。
オブジェクト指向
「はじめてのModelicaプログラミング」を読んでいて、Modelicaの基本的な考え方に、オブジェクト指向があるとあった。
そもそもオブジェクト指向って何?
まずは、Wikipedia
オブジェクト指向(オブジェクトしこう)とは、オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方である。
正直、よくわからない。
家に眠っているプログラミングの本 より
プログラムの機能をグループ化し、これを組み合わせてプログラムを作成していく考え方
グループ化ということは、関数やサブルーチンを作るってことかな・・・。
構造化プログラミングという言葉も聞いたことあるけど。
段階的詳細化では、プログラミングの最初の段階では、いきなりプログラミング言語の言語機能を直接使ってプログラムを記述するのではなく、機能を抽象化した「仮想機械」を想定し、その「仮想機械が提供する命令群」でプログラムを構成する
プログラムの機能をグループ化したもの=「仮想機械」
その機能を組み合わせてプログラムを作るってことか。
だから、機能をコンポーネントやライブラリとして作成して、それを組み合わせてモデルを作るModelicaはオブジェクト指向になるんだね。
Modelica関連の本購入
モデルベース開発の学習用にModelica関連本を3冊購入。
1冊目
Modelicaの文法書。最近、Modelicaを使うことが多くなってきたので購入。
英語が苦手なので、日本語の書籍はとても助かる。
はじめてのModelicaプログラミング -1日で読める わかる Modelica入門- (MBD Lab Series)
- 作者: 広野友英
- 出版社/メーカー: TechShare株式会社
- 発売日: 2017/10/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
2冊目
Modelica関連の国内解説本の第2段らしい。
第1段は今や絶版で中古価格8万円(汗
Modelicaによるシステムシミュレーション入門 -モデルベース開発のための物理システムモデリング- (MBD Lab Series)
- 作者: Peter Fritzson,大畠明(監訳),広野友英
- 出版社/メーカー: TechShare
- 発売日: 2015/07/15
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
3冊目
FMIということでモデル間連携に関係がありそうだと思い、購入。
Modelicaによるモデルベースシステム開発入門-ModelicaとFMIの活用による実践的モデルベース開発- (MBD Lab Series)
- 作者: 平野豊
- 出版社/メーカー: TechShare株式会社
- 発売日: 2017/11/06
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
ブログ開設
継続して勉強が続けられるように、勉強したことを見返すことができるように、ブログを開設しました。
数値解析、Modelica、RPA、英語などなど知識が足りないことは多々あるので、うまく活用していきたい。
まずは日記のように一言ずつでも良いから続けてみましょうか・・・